Sun, 28 Jan 2018 11:01:45 +0000
DreamTime.monotonic() no longer needs to call time.monotonic()
so is more "static" within wakeup periods, and so comparable to
time.monotonic() realisations. Also some PyObjC weirdness handling.
1
4cdc9c1f6b28
basic scheduler structure draft, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
1 | # |
40
cfbeeec8cb82
Improved exception reporting etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
38
diff
changeset
|
2 | # Borgend MacOS UI |
1
4cdc9c1f6b28
basic scheduler structure draft, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
3 | # |
4cdc9c1f6b28
basic scheduler structure draft, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
4 | |
4cdc9c1f6b28
basic scheduler structure draft, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
5 | import rumps |
10 | 6 | import time |
7 | import datetime | |
8 | import logging | |
34
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
9 | import borgend |
45
aa2a95dc6093
Further improvements to state reporting; indicate busyness if repository lock cannot be acquired
Tuomo Valkonen <tuomov@iki.fi>
parents:
42
diff
changeset
|
10 | import backup |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
11 | import sleep |
27
a347387868be
UI refresh delay to reduce flicker
Tuomo Valkonen <tuomov@iki.fi>
parents:
21
diff
changeset
|
12 | from threading import Lock, Timer |
34
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
13 | from config import settings |
21
c36e549a7f12
Errors as rumps notifications
Tuomo Valkonen <tuomov@iki.fi>
parents:
20
diff
changeset
|
14 | import objc |
10 | 15 | |
34
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
16 | logger=borgend.logger.getChild(__name__) |
31 | 17 | |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
18 | traynames_ok={ |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
19 | backup.State.INACTIVE: 'B.', |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
20 | backup.State.SCHEDULED: 'B.', |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
21 | backup.State.QUEUED: 'B:', |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
22 | backup.State.ACTIVE: 'B!', |
45
aa2a95dc6093
Further improvements to state reporting; indicate busyness if repository lock cannot be acquired
Tuomo Valkonen <tuomov@iki.fi>
parents:
42
diff
changeset
|
23 | } |
14
5a988a2c2624
UI: progress percentange support (Borg doesn't seem to be reporting) + error indicator in tray: B?
Tuomo Valkonen <tuomov@iki.fi>
parents:
11
diff
changeset
|
24 | |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
25 | traynames_errors={ |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
26 | # The first one should never be used |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
27 | backup.Errors.OK: traynames_ok[backup.State.INACTIVE], |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
28 | backup.Errors.BUSY: 'B⦙', |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
29 | backup.Errors.OFFLINE: 'B⦙', |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
30 | backup.Errors.ERRORS: 'B?' |
16
d0ffae5550ef
Added offline symbol B⦙ (no offline detection yet)
Tuomo Valkonen <tuomov@iki.fi>
parents:
15
diff
changeset
|
31 | } |
14
5a988a2c2624
UI: progress percentange support (Borg doesn't seem to be reporting) + error indicator in tray: B?
Tuomo Valkonen <tuomov@iki.fi>
parents:
11
diff
changeset
|
32 | |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
33 | def trayname(ste): |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
34 | state=ste[0] |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
35 | errors=ste[1] |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
36 | if not errors.ok(): |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
37 | return traynames_errors[errors] |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
38 | else: |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
39 | return traynames_ok[state] |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
40 | |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
41 | def combine_state(a, b): |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
42 | return (max(a[0], b[0]), max(a[1], b[1])) |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
43 | |
27
a347387868be
UI refresh delay to reduce flicker
Tuomo Valkonen <tuomov@iki.fi>
parents:
21
diff
changeset
|
44 | # Refresh the menu at most once a second to reduce flicker |
a347387868be
UI refresh delay to reduce flicker
Tuomo Valkonen <tuomov@iki.fi>
parents:
21
diff
changeset
|
45 | refresh_interval=1.0 |
a347387868be
UI refresh delay to reduce flicker
Tuomo Valkonen <tuomov@iki.fi>
parents:
21
diff
changeset
|
46 | |
32 | 47 | # Workaround to rumps brokenness; |
48 | # see https://github.com/jaredks/rumps/issues/59 | |
49 | def notification_workaround(title, subtitle, message): | |
34
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
50 | try: |
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
51 | NSDictionary = objc.lookUpClass("NSDictionary") |
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
52 | d=NSDictionary() |
32 | 53 | |
34
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
54 | rumps.notification(title, subtitle, message, data=d) |
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
55 | except Exception as err: |
50 | 56 | logger.exception("Failed to display notification") |
32 | 57 | |
19
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
58 | # Based on code snatched from |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
59 | # https://stackoverflow.com/questions/12523586/python-format-size-application-converting-b-to-kb-mb-gb-tb/37423778 |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
60 | def humanbytes(B): |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
61 | 'Return the given bytes as a human friendly KB, MB, GB, or TB string' |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
62 | B = float(B) |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
63 | KB = float(1024) |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
64 | MB = float(KB ** 2) # 1,048,576 |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
65 | GB = float(KB ** 3) # 1,073,741,824 |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
66 | TB = float(KB ** 4) # 1,099,511,627,776 |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
67 | |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
68 | if B < KB: |
20
fdfbe5d7b677
Keychain support and random fixes
Tuomo Valkonen <tuomov@iki.fi>
parents:
19
diff
changeset
|
69 | return '{0}B'.format(B) |
19
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
70 | elif KB <= B < MB: |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
71 | return '{0:.2f}KB'.format(B/KB) |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
72 | elif MB <= B < GB: |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
73 | return '{0:.2f}MB'.format(B/MB) |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
74 | elif GB <= B < TB: |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
75 | return '{0:.2f}GB'.format(B/GB) |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
76 | elif TB <= B: |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
77 | return '{0:.2f}TB'.format(B/TB) |
f9ce2442f14f
Display original/deduplicatd size if no progress percentage available
Tuomo Valkonen <tuomov@iki.fi>
parents:
18
diff
changeset
|
78 | |
10 | 79 | def make_title(status): |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
80 | def add_info(info, new): |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
81 | if info: |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
82 | return "%s; %s" % (info, new) |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
83 | else: |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
84 | return new |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
85 | |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
86 | info=None |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
87 | this_need_reconstruct=None |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
88 | |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
89 | if not status.errors.ok(): |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
90 | info=add_info(info, str(status.errors)) |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
91 | |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
92 | if status.state==backup.State.SCHEDULED: |
10 | 93 | # Operation scheduled |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
94 | when=status.when() |
10 | 95 | now=time.time() |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
96 | |
10 | 97 | if when<now: |
98 | whenstr='overdue' | |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
99 | info='' |
10 | 100 | else: |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
101 | tnow=datetime.datetime.fromtimestamp(now) |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
102 | twhen=datetime.datetime.fromtimestamp(when) |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
103 | tendtoday=twhen.replace(hour=23,minute=59,second=59) |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
104 | tendtomorrow=tendtoday+datetime.timedelta(days=1) |
10 | 105 | diff=datetime.timedelta(seconds=when-now) |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
106 | |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
107 | if twhen>tendtomorrow: |
10 | 108 | whenday=datetime.date.fromtimestamp(when) |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
109 | whenstr='on %s' % twhen.date().isoformat() |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
110 | this_need_reconstruct=tendtoday+datetime.timedelta(seconds=1) |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
111 | elif diff.seconds>=12*60*60: # 12 hours |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
112 | whenstr='tomorrow' |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
113 | this_need_reconstruct=twhen-datetime.timedelta(hours=12) |
10 | 114 | else: |
115 | twhen=time.localtime(when) | |
116 | if twhen.tm_sec>30: | |
117 | # Round up minute display to avoid user confusion | |
118 | twhen=time.localtime(when+30) | |
119 | whenstr='at %02d:%02d' % (twhen.tm_hour, twhen.tm_min) | |
38 | 120 | |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
121 | this_info='' |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
122 | if 'reason' in status.detail: |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
123 | this_info=status.detail['reason'] + ' ' |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
124 | |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
125 | when_how_sched= "%s%s %s" % (this_info, status.operation, whenstr) |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
126 | |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
127 | info=add_info(info, when_how_sched) |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
128 | |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
129 | elif status.state==backup.State.QUEUED: |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
130 | info=add_info(info, "queued") |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
131 | elif status.state==backup.State.ACTIVE: |
10 | 132 | # Operation running |
14
5a988a2c2624
UI: progress percentange support (Borg doesn't seem to be reporting) + error indicator in tray: B?
Tuomo Valkonen <tuomov@iki.fi>
parents:
11
diff
changeset
|
133 | progress='' |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
134 | d=status.detail |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
135 | if 'progress_current' in d and 'progress_total' in d: |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
136 | progress=' %d%%' % (d['progress_current']/d['progress_total']) |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
137 | elif 'original_size' in d and 'deduplicated_size' in d: |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
138 | progress=' %s→%s' % (humanbytes(d['original_size']), |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
139 | humanbytes(d['deduplicated_size'])) |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
140 | |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
141 | howrunning = "running %s%s" % (status.operation, progress) |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
142 | |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
143 | info=add_info(info, howrunning) |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
144 | else: |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
145 | pass |
15 | 146 | |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
147 | if info: |
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
148 | title=status.name + ' (' + info + ')' |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
149 | else: |
62
b7d13b2ad67e
Turned Status and Operation into classes instead of dictionaries
Tuomo Valkonen <tuomov@iki.fi>
parents:
61
diff
changeset
|
150 | title=status.name |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
151 | |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
152 | return title, (status.state, status.errors), this_need_reconstruct |
10 | 153 | |
1
4cdc9c1f6b28
basic scheduler structure draft, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
154 | class BorgendTray(rumps.App): |
33
91421eeb4426
Use rumps.application_support instead of xdg paths. Also separated branding into config.py
Tuomo Valkonen <tuomov@iki.fi>
parents:
32
diff
changeset
|
155 | def __init__(self, backups): |
10 | 156 | self.lock=Lock() |
157 | self.backups=backups | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
158 | self.refresh_timer=None |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
159 | self.refresh_timer_time=None |
10 | 160 | self.statuses=[None]*len(backups) |
161 | ||
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
162 | for index in range(len(backups)): |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
163 | self.statuses[index]=backups[index].status() |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
164 | |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
165 | menu, title=self.build_menu_and_timer() |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
166 | |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
167 | super().__init__(title, menu=menu, quit_button=None) |
10 | 168 | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
169 | for index in range(len(backups)): |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
170 | # Python closures suck dog's balls; hence the _index=index hack |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
171 | # See also http://math.andrej.com/2009/04/09/pythons-lambda-is-broken/ |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
172 | cb=(lambda status, errors=None, _index=index: |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
173 | self.__status_callback(_index, status, errorlog=errors)) |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
174 | backups[index].set_status_update_callback(cb) |
9
aa121291eb0e
Rumps/Mac UI stuff is fucked and disables ^C etc.; threading doesn't help
Tuomo Valkonen <tuomov@iki.fi>
parents:
1
diff
changeset
|
175 | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
75
diff
changeset
|
176 | sleep.add_callback(self, self.refresh_ui) |
10 | 177 | |
178 | def __rebuild_menu(self): | |
179 | menu=[] | |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
180 | state=(backup.State.INACTIVE, backup.Errors.OK) |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
181 | need_reconstruct=None |
10 | 182 | for index in range(len(self.backups)): |
183 | b=self.backups[index] | |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
184 | title, this_state, this_need_reconstruct=make_title(self.statuses[index]) |
10 | 185 | # Python closures suck dog's balls... |
186 | # first and the last program I write in Python until somebody | |
187 | # fixes this brain damage | |
188 | cbm=lambda sender, _b=b: self.__menu_select_backup(sender, _b) | |
189 | item=rumps.MenuItem(title, callback=cbm) | |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
190 | if not this_state[1].ok(): |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
191 | item.state=-1 |
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
192 | elif this_state[0]==backup.State.SCHEDULED or this_state[0]==backup.State.QUEUED: |
38 | 193 | item.state=1 |
10 | 194 | menu.append(item) |
61
bc6c3d74e6ea
Made combination error-state into an error-state matrix, as well as Enum
Tuomo Valkonen <tuomov@iki.fi>
parents:
55
diff
changeset
|
195 | state=combine_state(state, this_state) |
10 | 196 | |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
197 | # Do we have to automatically update menu display? |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
198 | if not need_reconstruct: |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
199 | need_reconstruct=this_need_reconstruct |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
200 | elif this_need_reconstruct: |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
201 | need_reconstruct=min(need_reconstruct, this_need_reconstruct) |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
202 | |
42
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
203 | menu_log=rumps.MenuItem("Show log", callback=lambda _: showlog()) |
34
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
204 | menu.append(menu_log) |
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
205 | |
30
3dd525652dc8
Added no_quit_menu_entry option
Tuomo Valkonen <tuomov@iki.fi>
parents:
28
diff
changeset
|
206 | if not settings['no_quit_menu_entry']: |
46
ecb41072a1b7
Unsuccesfull attempts at clean quit on exceptions that fall through
Tuomo Valkonen <tuomov@iki.fi>
parents:
45
diff
changeset
|
207 | menu_quit=rumps.MenuItem("Quit...", callback=lambda _: self.quit()) |
30
3dd525652dc8
Added no_quit_menu_entry option
Tuomo Valkonen <tuomov@iki.fi>
parents:
28
diff
changeset
|
208 | menu.append(menu_quit) |
10 | 209 | |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
210 | return menu, state, need_reconstruct |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
211 | |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
212 | def build_menu_and_timer(self): |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
213 | if self.refresh_timer: |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
214 | self.refresh_timer.cancel() |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
215 | self.refresh_timer=None |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
216 | self.refresh_timer_time=None |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
217 | logger.debug('Rebuilding menu') |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
218 | menu, state, need_reconstruct=self.__rebuild_menu() |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
219 | title=trayname(state) |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
220 | |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
221 | if need_reconstruct: |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
222 | when=time.mktime(need_reconstruct.timetuple()) |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
223 | delay=when-time.time() |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
224 | self.refresh_timer=Timer(delay, self.refresh_ui) |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
225 | self.refresh_timer_time=need_reconstruct |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
226 | self.refresh_timer.start() |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
227 | |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
228 | return menu, title |
10 | 229 | |
27
a347387868be
UI refresh delay to reduce flicker
Tuomo Valkonen <tuomov@iki.fi>
parents:
21
diff
changeset
|
230 | def refresh_ui(self): |
a347387868be
UI refresh delay to reduce flicker
Tuomo Valkonen <tuomov@iki.fi>
parents:
21
diff
changeset
|
231 | with self.lock: |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
232 | menu, title=self.build_menu_and_timer() |
27
a347387868be
UI refresh delay to reduce flicker
Tuomo Valkonen <tuomov@iki.fi>
parents:
21
diff
changeset
|
233 | self.menu.clear() |
a347387868be
UI refresh delay to reduce flicker
Tuomo Valkonen <tuomov@iki.fi>
parents:
21
diff
changeset
|
234 | self.menu.update(menu) |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
235 | self.title=title |
27
a347387868be
UI refresh delay to reduce flicker
Tuomo Valkonen <tuomov@iki.fi>
parents:
21
diff
changeset
|
236 | |
55
407af23d16bb
Improved backup main thread loop, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
51
diff
changeset
|
237 | def __status_callback(self, index, status, errorlog=None): |
75
2a44b9649212
UI refresh fix; added debug messages
Tuomo Valkonen <tuomov@iki.fi>
parents:
72
diff
changeset
|
238 | logger.debug("Tray status callback") |
10 | 239 | with self.lock: |
240 | self.statuses[index]=status | |
75
2a44b9649212
UI refresh fix; added debug messages
Tuomo Valkonen <tuomov@iki.fi>
parents:
72
diff
changeset
|
241 | # Time the refresh if it has not been timed, or if the timer |
2a44b9649212
UI refresh fix; added debug messages
Tuomo Valkonen <tuomov@iki.fi>
parents:
72
diff
changeset
|
242 | # is timing for the "long-term" (refresh_timer_time set) |
2a44b9649212
UI refresh fix; added debug messages
Tuomo Valkonen <tuomov@iki.fi>
parents:
72
diff
changeset
|
243 | if not self.refresh_timer or self.refresh_timer_time: |
2a44b9649212
UI refresh fix; added debug messages
Tuomo Valkonen <tuomov@iki.fi>
parents:
72
diff
changeset
|
244 | logger.debug("Timing refresh") |
27
a347387868be
UI refresh delay to reduce flicker
Tuomo Valkonen <tuomov@iki.fi>
parents:
21
diff
changeset
|
245 | self.refresh_timer=Timer(refresh_interval, self.refresh_ui) |
72
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
246 | # refresh_timer_time is only set for "long-term timers" |
e0e6043779e2
Improved time display in menu
Tuomo Valkonen <tuomov@iki.fi>
parents:
62
diff
changeset
|
247 | self.refresh_timer_time=None |
27
a347387868be
UI refresh delay to reduce flicker
Tuomo Valkonen <tuomov@iki.fi>
parents:
21
diff
changeset
|
248 | self.refresh_timer.start() |
10 | 249 | |
21
c36e549a7f12
Errors as rumps notifications
Tuomo Valkonen <tuomov@iki.fi>
parents:
20
diff
changeset
|
250 | if errorlog: |
c36e549a7f12
Errors as rumps notifications
Tuomo Valkonen <tuomov@iki.fi>
parents:
20
diff
changeset
|
251 | if 'msgid' not in errorlog or not isinstance(errorlog['msgid'], str): |
c36e549a7f12
Errors as rumps notifications
Tuomo Valkonen <tuomov@iki.fi>
parents:
20
diff
changeset
|
252 | msgid='UnknownError' |
c36e549a7f12
Errors as rumps notifications
Tuomo Valkonen <tuomov@iki.fi>
parents:
20
diff
changeset
|
253 | else: |
c36e549a7f12
Errors as rumps notifications
Tuomo Valkonen <tuomov@iki.fi>
parents:
20
diff
changeset
|
254 | msgid=errorlog['msgid'] |
c36e549a7f12
Errors as rumps notifications
Tuomo Valkonen <tuomov@iki.fi>
parents:
20
diff
changeset
|
255 | |
32 | 256 | logger.debug("Opening notification for error %s '%s'", |
257 | msgid, errorlog['message']) | |
21
c36e549a7f12
Errors as rumps notifications
Tuomo Valkonen <tuomov@iki.fi>
parents:
20
diff
changeset
|
258 | |
34
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
259 | notification_workaround(borgend.appname_stylised, |
33
91421eeb4426
Use rumps.application_support instead of xdg paths. Also separated branding into config.py
Tuomo Valkonen <tuomov@iki.fi>
parents:
32
diff
changeset
|
260 | msgid, errorlog['message']) |
21
c36e549a7f12
Errors as rumps notifications
Tuomo Valkonen <tuomov@iki.fi>
parents:
20
diff
changeset
|
261 | |
46
ecb41072a1b7
Unsuccesfull attempts at clean quit on exceptions that fall through
Tuomo Valkonen <tuomov@iki.fi>
parents:
45
diff
changeset
|
262 | def quit(self): |
34
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
263 | logging.shutdown() |
28 | 264 | rumps.quit_application() |
265 | ||
266 | def __menu_select_backup(self, sender, b): | |
267 | #sender.state=not sender.state | |
31 | 268 | logger.debug("Manually backup '%s'", b.name) |
32 | 269 | try: |
49 | 270 | b.create() |
32 | 271 | except Exception as err: |
50 | 272 | logger.exception("Failure to initialise backup") |
34
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
273 | notification_workaround(borgend.appname_stylised, |
33
91421eeb4426
Use rumps.application_support instead of xdg paths. Also separated branding into config.py
Tuomo Valkonen <tuomov@iki.fi>
parents:
32
diff
changeset
|
274 | err.__class__.__name__, str(err)) |
28 | 275 | |
42
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
276 | # |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
277 | # Log window |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
278 | # |
10 | 279 | |
42
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
280 | logwindow=[None] |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
281 | logwindow_lock=Lock() |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
282 | |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
283 | def showlog(): |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
284 | try: |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
285 | w=None |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
286 | with logwindow_lock: |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
287 | if not logwindow[0]: |
34
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
288 | lines=borgend.fifolog.formatAll() |
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
289 | msg="\n".join(lines[0:]) |
42
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
290 | w=rumps.Window(title=borgend.appname_stylised+' log', |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
291 | default_text=msg, |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
292 | ok='Close', |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
293 | dimensions=(640,320)) |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
294 | logwindow[0]=w |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
295 | if w: |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
296 | try: |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
297 | w.run() |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
298 | finally: |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
299 | with logwindow_lock: |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
300 | logwindow[0]=None |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
301 | except Exception as err: |
50 | 302 | logger.exception("Failed to display log") |
34
9fce700d42de
Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
33
diff
changeset
|
303 | |
42
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
304 | # |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
305 | # Notification click response => show log window |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
306 | # |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
307 | |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
308 | @rumps.notifications |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
309 | def notification_center(_): |
00accd11978b
Moved logwindow dispay out of BorgendTray, and made notification_center
Tuomo Valkonen <tuomov@iki.fi>
parents:
40
diff
changeset
|
310 | showlog() |
50 | 311 |