10 import json |
10 import json |
11 import time |
11 import time |
12 |
12 |
13 from PyQt6.QtCore import QObject |
13 from PyQt6.QtCore import QObject |
14 |
14 |
15 from E5Gui import E5MessageBox |
15 from E5Gui import EricMessageBox |
16 from E5Gui.E5OverrideCursor import E5OverridenCursor |
16 from E5Gui.EricOverrideCursor import EricOverridenCursor |
17 from E5Gui.E5Application import e5App |
17 from E5Gui.EricApplication import ericApp |
18 |
18 |
19 import Preferences |
19 import Preferences |
20 |
20 |
21 from .Task import TaskType, TaskPriority |
21 from .Task import TaskType, TaskPriority |
22 |
22 |
61 tasksDict["ProjectScanFilter"] = "" |
61 tasksDict["ProjectScanFilter"] = "" |
62 |
62 |
63 # step 2: tasks |
63 # step 2: tasks |
64 tasksDict["Tasks"] = [ |
64 tasksDict["Tasks"] = [ |
65 task.toDict() |
65 task.toDict() |
66 for task in e5App().getObject("TaskViewer").getGlobalTasks() |
66 for task in ericApp().getObject("TaskViewer").getGlobalTasks() |
67 ] |
67 ] |
68 else: |
68 else: |
69 tasksDict["header"] = { |
69 tasksDict["header"] = { |
70 "comment": "eric tasks file for project {0}".format( |
70 "comment": "eric tasks file for project {0}".format( |
71 e5App().getObject("Project").getProjectName()), |
71 ericApp().getObject("Project").getProjectName()), |
72 "warning": ( |
72 "warning": ( |
73 "This file was generated automatically, do not edit." |
73 "This file was generated automatically, do not edit." |
74 ), |
74 ), |
75 } |
75 } |
76 if Preferences.getProject("TimestampFile"): |
76 if Preferences.getProject("TimestampFile"): |
77 tasksDict["header"]["saved"] = ( |
77 tasksDict["header"]["saved"] = ( |
78 time.strftime('%Y-%m-%d, %H:%M:%S') |
78 time.strftime('%Y-%m-%d, %H:%M:%S') |
79 ) |
79 ) |
80 # step 1: project scan filter |
80 # step 1: project scan filter |
81 tasksDict["ProjectScanFilter"] = ( |
81 tasksDict["ProjectScanFilter"] = ( |
82 e5App().getObject("TaskViewer").getTasksScanFilter() |
82 ericApp().getObject("TaskViewer").getTasksScanFilter() |
83 ) |
83 ) |
84 |
84 |
85 # step 2: tasks |
85 # step 2: tasks |
86 tasksDict["Tasks"] = [ |
86 tasksDict["Tasks"] = [ |
87 task.toDict() |
87 task.toDict() |
88 for task in e5App().getObject("TaskViewer").getProjectTasks() |
88 for task in ericApp().getObject("TaskViewer").getProjectTasks() |
89 ] |
89 ] |
90 |
90 |
91 try: |
91 try: |
92 jsonString = json.dumps(tasksDict, indent=2) |
92 jsonString = json.dumps(tasksDict, indent=2) |
93 with open(filename, "w") as f: |
93 with open(filename, "w") as f: |
94 f.write(jsonString) |
94 f.write(jsonString) |
95 except (TypeError, OSError) as err: |
95 except (TypeError, OSError) as err: |
96 with E5OverridenCursor(): |
96 with EricOverridenCursor(): |
97 E5MessageBox.critical( |
97 EricMessageBox.critical( |
98 None, |
98 None, |
99 self.tr("Save Tasks"), |
99 self.tr("Save Tasks"), |
100 self.tr( |
100 self.tr( |
101 "<p>The tasks file <b>{0}</b> could not be" |
101 "<p>The tasks file <b>{0}</b> could not be" |
102 " written.</p><p>Reason: {1}</p>" |
102 " written.</p><p>Reason: {1}</p>" |
118 try: |
118 try: |
119 with open(filename, "r") as f: |
119 with open(filename, "r") as f: |
120 jsonString = f.read() |
120 jsonString = f.read() |
121 tasksDict = json.loads(jsonString) |
121 tasksDict = json.loads(jsonString) |
122 except (OSError, json.JSONDecodeError) as err: |
122 except (OSError, json.JSONDecodeError) as err: |
123 E5MessageBox.critical( |
123 EricMessageBox.critical( |
124 None, |
124 None, |
125 self.tr("Read Tasks"), |
125 self.tr("Read Tasks"), |
126 self.tr( |
126 self.tr( |
127 "<p>The tasks file <b>{0}</b> could not be read.</p>" |
127 "<p>The tasks file <b>{0}</b> could not be read.</p>" |
128 "<p>Reason: {1}</p>" |
128 "<p>Reason: {1}</p>" |
129 ).format(filename, str(err)) |
129 ).format(filename, str(err)) |
130 ) |
130 ) |
131 return False |
131 return False |
132 |
132 |
133 viewer = e5App().getObject("TaskViewer") |
133 viewer = ericApp().getObject("TaskViewer") |
134 if tasksDict["ProjectScanFilter"]: |
134 if tasksDict["ProjectScanFilter"]: |
135 viewer.setTasksScanFilter(tasksDict["ProjectScanFilter"]) |
135 viewer.setTasksScanFilter(tasksDict["ProjectScanFilter"]) |
136 |
136 |
137 addedTasks = [] |
137 addedTasks = [] |
138 for task in tasksDict["Tasks"]: |
138 for task in tasksDict["Tasks"]: |