fosKeyMan
Loading...
Searching...
No Matches
trashmanager.py
Go to the documentation of this file.
1from PySide6.QtCore import Qt, QSize
2from PySide6.QtGui import QIcon
3from PySide6.QtWidgets import QDialog, QTableWidgetItem, QPushButton, QMessageBox, QHeaderView
4from utils.utils import apply_icon_button_style
5from frontend.ui.uitrash import Ui_Trash
6
7
8class TrashManager(QDialog):
9 r"""
10 Class to manage deleted keyfiles in the trash directory.
11 """
12 def __init__(self, key_handler, parent=None):
13 r"""
14 Initialize the trash manager dialog.
15
16 \param key_handler (KeyHandler): An instance of KeyHandler used for keyfile operations.
17 \param parent (QWidget, optional): Parent widget for this dialog.
18 """
19 super().__init__(parent)
20
21 self.ui = Ui_Trash()
22 self.ui.setupUi(self)
23
24 self.key_handler = key_handler
25
26 self.ui.closeButton.clicked.connect(self.reject)
27 self.ui.emptyButton.clicked.connect(self.clear_all_trash)
28
30
32 r"""
33 Set up the trash table displaying all deleted keyfiles.
34 """
35 self.ui.tableWidget.setRowCount(0)
36 self.ui.tableWidget.setColumnCount(3)
37 self.ui.tableWidget.setHorizontalHeaderLabels([self.tr("Serial Number"), "", ""])
38
39 header = self.ui.tableWidget.horizontalHeader()
40 header.setSectionResizeMode(0, QHeaderView.ResizeMode.Stretch)
41 header.setSectionResizeMode(1, QHeaderView.ResizeMode.Fixed)
42 header.setSectionResizeMode(2, QHeaderView.ResizeMode.Fixed)
43 self.ui.tableWidget.setColumnWidth(1, 40)
44 self.ui.tableWidget.setColumnWidth(2, 40)
45
46 serial_numbers = self.key_handler.read_keys("trash")
47
48 for serial_number in serial_numbers:
49 row = self.ui.tableWidget.rowCount()
50 self.ui.tableWidget.insertRow(row)
51
52 item = QTableWidgetItem(serial_number)
53 item.setFlags(Qt.ItemFlag.ItemIsEnabled)
54 self.ui.tableWidget.setItem(row, 0, item)
55
56 delete_btn = QPushButton()
57 delete_btn.setToolTip(self.tr("Permanently delete"))
58 delete_btn.setIcon(QIcon(":/icons/icons/editbin.svg"))
59 apply_icon_button_style(delete_btn)
60 delete_btn.setFixedSize(28, 28)
61 delete_btn.setIconSize(QSize(20, 20))
62 delete_btn.clicked.connect(lambda _, key=serial_number: self.delete_keyfile(key))
63 self.ui.tableWidget.setCellWidget(row, 1, delete_btn)
64
65 undo_btn = QPushButton()
66 undo_btn.setToolTip(self.tr("Restore"))
67 undo_btn.setIcon(QIcon(":/icons/icons/undo.svg"))
68 apply_icon_button_style(undo_btn)
69 undo_btn.setFixedSize(28, 28)
70 undo_btn.setIconSize(QSize(20, 20))
71 undo_btn.clicked.connect(lambda _, key=serial_number: self.restore_keyfile(key))
72 self.ui.tableWidget.setCellWidget(row, 2, undo_btn)
73
74 def clear_all_trash(self):
75 r"""
76 Permanently delete all keyfiles in the trash directory after confirmation.
77 Clear the table UI after deletion.
78 """
79 confirm = QMessageBox.question(
80 self,
81 self.tr("Confirm Deletion"),
82 self.tr("Are you sure you want to permanently delete all keyfiles in trash?"),
83 QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No
84 )
85 if confirm != QMessageBox.StandardButton.Yes:
86 return
87
88 for key in self.key_handler.read_keys("trash"):
89 self.key_handler.permanently_delete_key(key)
90
91 self.ui.tableWidget.setRowCount(0)
92
93 QMessageBox.information(self, self.tr("Success"), self.tr("Trash has been cleared."))
94
95 def delete_keyfile(self, key):
96 r"""
97 Permanently delete a keyfile from the trash and remove its row from the table.
98
99 \param key (str): Serial number of the keyfile to delete.
100 """
101 confirm = QMessageBox.question(
102 self,
103 self.tr("Confirm Deletion"),
104 self.tr(f"Are you sure you want to permanently delete keyfile '{key}'?"),
105 QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No
106 )
107
108 if confirm != QMessageBox.StandardButton.Yes:
109 return
110
111 if self.key_handler.permanently_delete_key(key):
112 for row in range(self.ui.tableWidget.rowCount()):
113 item = self.ui.tableWidget.item(row, 0)
114 if item and item.text() == key:
115 self.ui.tableWidget.removeRow(row)
116 break
117
118 def restore_keyfile(self, key):
119 r"""
120 Restore a keyfile from the trash to the deactivated directory and remove its row from the table.
121
122 \param key (str): Serial number of the keyfile to restore.
123 """
124 if self.key_handler.undo_delete_key(key):
125 for row in range(self.ui.tableWidget.rowCount()):
126 item = self.ui.tableWidget.item(row, 0)
127 if item and item.text() == key:
128 self.ui.tableWidget.removeRow(row)
129 break
130
Class to manage deleted keyfiles in the trash directory.
restore_keyfile(self, key)
Restore a keyfile from the trash to the deactivated directory and remove its row from the table.
setup_trash_table(self)
Set up the trash table displaying all deleted keyfiles.
__init__(self, key_handler, parent=None)
Initialize the trash manager dialog.
delete_keyfile(self, key)
Permanently delete a keyfile from the trash and remove its row from the table.