| 27 # Refresh the menu at most once a second to reduce flicker |
27 # Refresh the menu at most once a second to reduce flicker |
| 28 refresh_interval=1.0 |
28 refresh_interval=1.0 |
| 29 |
29 |
| 30 def combine_state(state1, state2): |
30 def combine_state(state1, state2): |
| 31 return max(state1, state2) |
31 return max(state1, state2) |
| |
32 |
| |
33 # Workaround to rumps brokenness; |
| |
34 # see https://github.com/jaredks/rumps/issues/59 |
| |
35 def notification_workaround(title, subtitle, message): |
| |
36 NSDictionary = objc.lookUpClass("NSDictionary") |
| |
37 d=NSDictionary() |
| |
38 |
| |
39 rumps.notification(title, subtitle, message, data=d) |
| 32 |
40 |
| 33 # Based on code snatched from |
41 # Based on code snatched from |
| 34 # https://stackoverflow.com/questions/12523586/python-format-size-application-converting-b-to-kb-mb-gb-tb/37423778 |
42 # https://stackoverflow.com/questions/12523586/python-format-size-application-converting-b-to-kb-mb-gb-tb/37423778 |
| 35 def humanbytes(B): |
43 def humanbytes(B): |
| 36 'Return the given bytes as a human friendly KB, MB, GB, or TB string' |
44 'Return the given bytes as a human friendly KB, MB, GB, or TB string' |
| 167 if 'msgid' not in errorlog or not isinstance(errorlog['msgid'], str): |
175 if 'msgid' not in errorlog or not isinstance(errorlog['msgid'], str): |
| 168 msgid='UnknownError' |
176 msgid='UnknownError' |
| 169 else: |
177 else: |
| 170 msgid=errorlog['msgid'] |
178 msgid=errorlog['msgid'] |
| 171 |
179 |
| 172 logger.debug('Opening notification for error') |
180 logger.debug("Opening notification for error %s '%s'", |
| 173 |
181 msgid, errorlog['message']) |
| 174 # Workaround to rumps brokenness |
182 |
| 175 # See https://github.com/jaredks/rumps/issues/59 |
183 notification_workaround('Borgend', msgid, errorlog['message']) |
| 176 NSDictionary = objc.lookUpClass("NSDictionary") |
|
| 177 d=NSDictionary() |
|
| 178 |
|
| 179 rumps.notification('Borgend', msgid, errorlog['message'], data=d) |
|
| 180 |
184 |
| 181 def my_quit(self, _): |
185 def my_quit(self, _): |
| 182 rumps.quit_application() |
186 rumps.quit_application() |
| 183 |
187 |
| 184 def __menu_select_backup(self, sender, b): |
188 def __menu_select_backup(self, sender, b): |
| 185 #sender.state=not sender.state |
189 #sender.state=not sender.state |
| 186 logger.debug("Manually backup '%s'", b.name) |
190 logger.debug("Manually backup '%s'", b.name) |
| 187 b.create(None) |
191 try: |
| |
192 b.create(None) |
| |
193 except Exception as err: |
| |
194 logger.debug("Opening notification for exception %s '%s'", |
| |
195 err.__class__.__name__, str(err)) |
| |
196 notification_workaround('Borgend', err.__class__.__name__, str(err)) |
| 188 |
197 |
| 189 @rumps.notifications |
198 @rumps.notifications |
| 190 def notification_center(data): |
199 def notification_center(data): |
| 191 pass |
200 pass |
| 192 |
201 |
| 193 |
|
| 194 |
|
| 195 |
|