| 81 twhen=time.localtime(when) |
83 twhen=time.localtime(when) |
| 82 if twhen.tm_sec>30: |
84 if twhen.tm_sec>30: |
| 83 # Round up minute display to avoid user confusion |
85 # Round up minute display to avoid user confusion |
| 84 twhen=time.localtime(when+30) |
86 twhen=time.localtime(when+30) |
| 85 whenstr='at %02d:%02d' % (twhen.tm_hour, twhen.tm_min) |
87 whenstr='at %02d:%02d' % (twhen.tm_hour, twhen.tm_min) |
| 86 detail='' |
88 |
| 87 if 'detail' in status and status['detail']: |
89 if status['detail']=='normal': |
| 88 if status['detail']=='retry': |
90 state=SCHEDULED_OK |
| 89 state=ERRORS |
91 detail='' |
| 90 detail=status['detail']+' ' |
92 else: |
| |
93 if status['detail']=='retry': |
| |
94 state=ERRORS |
| |
95 detail=status['detail']+' ' |
| 91 title="%s (%s%s %s)" % (status['name'], detail, status['operation'], whenstr) |
96 title="%s (%s%s %s)" % (status['name'], detail, status['operation'], whenstr) |
| 92 elif status['type']=='current': |
97 elif status['type']=='current': |
| 93 # Operation running |
98 # Operation running |
| 94 progress='' |
99 progress='' |
| 95 if 'progress_current' in status and 'progress_total' in status: |
100 if 'progress_current' in status and 'progress_total' in status: |
| 100 title="%s (running: %s%s)" % (status['name'], status['operation'], progress) |
105 title="%s (running: %s%s)" % (status['name'], status['operation'], progress) |
| 101 state=ACTIVE |
106 state=ACTIVE |
| 102 else: # status['type']=='nothing': |
107 else: # status['type']=='nothing': |
| 103 # Should be unscheduled, nothing running |
108 # Should be unscheduled, nothing running |
| 104 title=status['name'] |
109 title=status['name'] |
| |
110 if status['errors']: |
| |
111 title=title + " (errors)" |
| 105 |
112 |
| 106 if status['errors']: |
113 if status['errors']: |
| 107 state=ERRORS |
114 state=ERRORS |
| 108 |
115 |
| 109 return title, state |
116 return title, state |
| 146 # Python closures suck dog's balls... |
153 # Python closures suck dog's balls... |
| 147 # first and the last program I write in Python until somebody |
154 # first and the last program I write in Python until somebody |
| 148 # fixes this brain damage |
155 # fixes this brain damage |
| 149 cbm=lambda sender, _b=b: self.__menu_select_backup(sender, _b) |
156 cbm=lambda sender, _b=b: self.__menu_select_backup(sender, _b) |
| 150 item=rumps.MenuItem(title, callback=cbm) |
157 item=rumps.MenuItem(title, callback=cbm) |
| |
158 if this_state==SCHEDULED_OK: |
| |
159 item.state=1 |
| |
160 elif this_state>=OFFLINE: |
| |
161 item.state=-1 |
| 151 menu.append(item) |
162 menu.append(item) |
| 152 state=combine_state(state, this_state) |
163 state=combine_state(state, this_state) |
| 153 |
164 |
| 154 menu_log=rumps.MenuItem("Show log", callback=self.showlog) |
165 menu_log=rumps.MenuItem("Show log", callback=self.showlog) |
| 155 menu.append(menu_log) |
166 menu.append(menu_log) |