5 |
5 |
6 """ |
6 """ |
7 Module implementing a dialog to show a list of existing crash session files. |
7 Module implementing a dialog to show a list of existing crash session files. |
8 """ |
8 """ |
9 |
9 |
|
10 import contextlib |
10 import json |
11 import json |
11 import os |
12 import os |
12 import time |
13 import time |
13 |
14 |
14 from PyQt6.QtCore import Qt, pyqtSlot |
15 from PyQt6.QtCore import Qt, pyqtSlot |
15 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QListWidgetItem |
16 from PyQt6.QtWidgets import ( |
|
17 QAbstractItemView, |
|
18 QDialog, |
|
19 QDialogButtonBox, |
|
20 QListWidgetItem, |
|
21 ) |
16 |
22 |
17 from eric7.EricWidgets import EricMessageBox |
23 from eric7.EricWidgets import EricMessageBox |
18 |
24 |
19 from .Ui_CrashedSessionsSelectionDialog import Ui_CrashedSessionsSelectionDialog |
25 from .Ui_CrashedSessionsSelectionDialog import Ui_CrashedSessionsSelectionDialog |
20 |
26 |
22 class CrashedSessionsSelectionDialog(QDialog, Ui_CrashedSessionsSelectionDialog): |
28 class CrashedSessionsSelectionDialog(QDialog, Ui_CrashedSessionsSelectionDialog): |
23 """ |
29 """ |
24 Class implementing a dialog to show a list of existing crash session files. |
30 Class implementing a dialog to show a list of existing crash session files. |
25 """ |
31 """ |
26 |
32 |
27 def __init__(self, sessionFiles, parent=None): |
33 def __init__(self, sessionFiles, deleteMode=False, parent=None): |
28 """ |
34 """ |
29 Constructor |
35 Constructor |
30 |
36 |
31 @param sessionFiles list of crash session file names |
37 @param sessionFiles list of crash session file names |
32 @type list of str |
38 @type list of str |
|
39 @param deleteMode flag indicating the delete mode (defaults to False) |
|
40 @type bool (optional) |
33 @param parent reference to the parent widget (defaults to None) |
41 @param parent reference to the parent widget (defaults to None) |
34 @type QWidget (optional) |
42 @type QWidget (optional) |
35 """ |
43 """ |
36 super().__init__(parent) |
44 super().__init__(parent) |
37 self.setupUi(self) |
45 self.setupUi(self) |
38 |
46 |
39 self.crashedSessionsList.itemDoubleClicked.connect(self.accept) |
47 self.crashedSessionsList.itemDoubleClicked.connect(self.accept) |
40 self.crashedSessionsList.itemActivated.connect(self.accept) |
48 self.crashedSessionsList.itemActivated.connect(self.accept) |
41 self.crashedSessionsList.itemSelectionChanged.connect(self.__updateOk) |
49 self.crashedSessionsList.itemSelectionChanged.connect(self.__updateButtonStates) |
42 |
50 |
43 for sessionFile in sessionFiles: |
51 for sessionFile in sessionFiles: |
44 self.__addSessionFileEntry(sessionFile) |
52 self.__addSessionFileEntry(sessionFile) |
45 |
53 |
46 self.__updateOk() |
54 self.__deleteMode = deleteMode |
|
55 if deleteMode: |
|
56 self.setWindowTitle(self.tr("Clean Crash Sessions")) |
|
57 self.messageLabel.setText( |
|
58 self.tr( |
|
59 "These crash session files were found. Select the ones to be" |
|
60 " deleted." |
|
61 ) |
|
62 ) |
|
63 self.crashedSessionsList.setSelectionMode( |
|
64 QAbstractItemView.SelectionMode.ExtendedSelection |
|
65 ) |
|
66 self.removeButton.hide() |
|
67 else: |
|
68 self.setWindowTitle(self.tr("Found Crash Sessions")) |
|
69 self.messageLabel.setText( |
|
70 self.tr( |
|
71 "These crash session files were found. Select the one to open." |
|
72 " Select 'Cancel' to not open a crash session." |
|
73 ) |
|
74 ) |
|
75 |
|
76 self.__updateButtonStates() |
47 |
77 |
48 @pyqtSlot() |
78 @pyqtSlot() |
49 def __updateOk(self): |
79 def __updateButtonStates(self): |
50 """ |
80 """ |
51 Private method to update the enabled state of the OK button. |
81 Private method to update the enabled state of the buttons. |
52 """ |
82 """ |
53 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled( |
83 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled( |
54 bool(self.crashedSessionsList.selectedItems()) |
84 bool(self.crashedSessionsList.selectedItems()) |
55 ) |
85 ) |
|
86 self.removeButton.setEnabled(bool(self.crashedSessionsList.selectedItems())) |
56 |
87 |
57 def __addSessionFileEntry(self, sessionFile): |
88 def __addSessionFileEntry(self, sessionFile): |
58 """ |
89 """ |
59 Private method to read the given session file and add a list entry for it. |
90 Private method to read the given session file and add a list entry for it. |
60 |
91 |
88 "{0}\nTimestamp: {1}", "Crash Session, Timestamp" |
119 "{0}\nTimestamp: {1}", "Crash Session, Timestamp" |
89 ).format(sessionFile, timestamp) |
120 ).format(sessionFile, timestamp) |
90 itm = QListWidgetItem(labelText, self.crashedSessionsList) |
121 itm = QListWidgetItem(labelText, self.crashedSessionsList) |
91 itm.setData(Qt.ItemDataRole.UserRole, sessionFile) |
122 itm.setData(Qt.ItemDataRole.UserRole, sessionFile) |
92 |
123 |
|
124 @pyqtSlot() |
|
125 def on_removeButton_clicked(self): |
|
126 """ |
|
127 Private slot to remove the selected crash session files. |
|
128 """ |
|
129 for itm in self.crashedSessionsList.selectedItems(): |
|
130 crashSession = itm.data(Qt.ItemDataRole.UserRole) |
|
131 with contextlib.suppress(OSError): |
|
132 os.remove(crashSession) |
|
133 self.crashedSessionsList.takeItem(self.crashedSessionsList.row(itm)) |
|
134 del itm |
|
135 |
93 def getSelectedCrashSession(self): |
136 def getSelectedCrashSession(self): |
94 """ |
137 """ |
95 Public method to get the selected crash session file name. |
138 Public method to get the selected crash session file name. |
96 |
139 |
97 @return file name of the selected crash session |
140 @return file name of the selected crash session |
98 @rtype str |
141 @rtype str |
99 """ |
142 """ |
100 # TODO: not implemented yet |
|
101 selectedItems = self.crashedSessionsList.selectedItems() |
143 selectedItems = self.crashedSessionsList.selectedItems() |
102 |
144 |
103 if selectedItems: |
145 if selectedItems: |
104 return selectedItems[0].data(Qt.ItemDataRole.UserRole) |
146 return selectedItems[0].data(Qt.ItemDataRole.UserRole) |
105 else: |
147 else: |
106 return None |
148 return None |
|
149 |
|
150 def getSelectedCrashSessions(self): |
|
151 """ |
|
152 Public method to get the selected crash session file names. |
|
153 |
|
154 @return file names of the selected crash sessions |
|
155 @rtype list of str |
|
156 """ |
|
157 selectedItems = self.crashedSessionsList.selectedItems() |
|
158 |
|
159 if selectedItems: |
|
160 return [itm.data(Qt.ItemDataRole.UserRole) for itm in selectedItems] |
|
161 else: |
|
162 return [] |