nowfocus 0.5.1__py3-none-any.whl → 0.5.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nowfocus/__main__.py +2 -2
- nowfocus/settings.py +38 -37
- nowfocus/task_window.py +17 -5
- nowfocus/user_idle_time.py +1 -1
- nowfocus/utils.py +32 -14
- {nowfocus-0.5.1.dist-info → nowfocus-0.5.3.dist-info}/METADATA +1 -1
- {nowfocus-0.5.1.dist-info → nowfocus-0.5.3.dist-info}/RECORD +11 -11
- {nowfocus-0.5.1.dist-info → nowfocus-0.5.3.dist-info}/WHEEL +0 -0
- {nowfocus-0.5.1.dist-info → nowfocus-0.5.3.dist-info}/entry_points.txt +0 -0
- {nowfocus-0.5.1.dist-info → nowfocus-0.5.3.dist-info}/licenses/LICENSE +0 -0
- {nowfocus-0.5.1.dist-info → nowfocus-0.5.3.dist-info}/top_level.txt +0 -0
nowfocus/__main__.py
CHANGED
|
@@ -62,13 +62,12 @@ class Application(Gtk.Application):
|
|
|
62
62
|
|
|
63
63
|
try:
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
65
|
self.window = None
|
|
68
66
|
|
|
69
67
|
self.is_running = False
|
|
70
68
|
self.device_in_use = True
|
|
71
69
|
self.UserIdleTime = UserIdleTime()
|
|
70
|
+
dbg('self.UserIdleTime.platform', self.UserIdleTime.platform,s='user_away')
|
|
72
71
|
self.last_user_idle_check_time = None
|
|
73
72
|
self.session = default_session()
|
|
74
73
|
|
|
@@ -111,6 +110,7 @@ class Application(Gtk.Application):
|
|
|
111
110
|
Gtk.main()
|
|
112
111
|
except Exception as e:
|
|
113
112
|
print(conf.app_name +' had a pretty bad error. Please submit the following trace as an issue on the git repo or email it to the developers ')
|
|
113
|
+
print(e)
|
|
114
114
|
traceback.print_tb(e.__traceback__)
|
|
115
115
|
self.quit()
|
|
116
116
|
|
nowfocus/settings.py
CHANGED
|
@@ -105,6 +105,44 @@ class SettingsWindow(Gtk.Window):
|
|
|
105
105
|
self.add(self.notebook)
|
|
106
106
|
|
|
107
107
|
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
# Settings
|
|
112
|
+
row = 0
|
|
113
|
+
grid = Gtk.Grid()
|
|
114
|
+
grid.set_row_spacing(10)
|
|
115
|
+
grid.set_column_spacing(10)
|
|
116
|
+
self.notebook.append_page(grid,Gtk.Label('Settings'))
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
grid.attach(Gtk.Box(border_width=10),0,(row:=row+1),5,1) # Spacer
|
|
120
|
+
|
|
121
|
+
grid.attach(self.settings_updater('default_text','What am I Doing?','Entry'),0,(row:=row+1),5,1)
|
|
122
|
+
|
|
123
|
+
grid.attach(self.settings_updater('open_task_window_fullscreen',True,'Switch'),0,(row:=row+1),5,1)
|
|
124
|
+
grid.attach(self.settings_updater('show_task_window_sidebars',True,'Switch'),0,(row:=row+1),5,1)
|
|
125
|
+
|
|
126
|
+
grid.attach(self.settings_updater('pomodoro_interval',25,'SpinButton',"(minutes)"),0,(row:=row+1),5,1)
|
|
127
|
+
|
|
128
|
+
grid.attach(self.settings_updater('randomness_interrupt_interval', 3, 'SpinButton',"\nPop up todo menu every so many minutes if not doing a task"),0,(row:=row+1),5,1)
|
|
129
|
+
|
|
130
|
+
grid.attach(self.settings_updater('todolist_refresh_interval', 3, 'SpinButton',"(hours)"),0,(row:=row+1),5,1)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
# grid.attach(self.settings_updater('invoice_hourly_rate', 33, 'SpinButton',""),0,(row:=row+1),5,1)
|
|
134
|
+
|
|
135
|
+
grid.attach(self.settings_updater('hours_search_timeframe', 'auto', 'ComboBoxText',"\nDefault timetracking range for hours shown in main window and invoicing", options = list(hours_search_timeframes().keys())),0,(row:=row+1),5,1)
|
|
136
|
+
|
|
137
|
+
grid.attach(self.settings_updater('prompts', None, 'TextView',""),0,(row:=row+1),5,1)
|
|
138
|
+
|
|
139
|
+
grid.attach(self.settings_updater('display_todolist_as_top_level_list', 'auto', 'ComboBoxText',"", options = ['auto','always','never']),0,(row:=row+1),5,1)
|
|
140
|
+
|
|
141
|
+
grid.attach(self.settings_updater('max_top_level_menu_items', 18, 'SpinButton',""),0,(row:=row+1),5,1)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
108
146
|
row = 0
|
|
109
147
|
grid = Gtk.Grid()
|
|
110
148
|
grid.set_row_spacing(10)
|
|
@@ -113,7 +151,6 @@ class SettingsWindow(Gtk.Window):
|
|
|
113
151
|
|
|
114
152
|
self.notebook.append_page(grid,Gtk.Label('Todolists and Time Trackers'))
|
|
115
153
|
|
|
116
|
-
|
|
117
154
|
sub_head = Gtk.Label()
|
|
118
155
|
sub_head.set_markup("<b>Todo Lists</b>")
|
|
119
156
|
grid.attach(sub_head,0,(row:=row+1),5,1)
|
|
@@ -187,42 +224,6 @@ class SettingsWindow(Gtk.Window):
|
|
|
187
224
|
|
|
188
225
|
|
|
189
226
|
|
|
190
|
-
# Settings
|
|
191
|
-
row = 0
|
|
192
|
-
grid = Gtk.Grid()
|
|
193
|
-
grid.set_row_spacing(10)
|
|
194
|
-
grid.set_column_spacing(10)
|
|
195
|
-
self.notebook.append_page(grid,Gtk.Label('Settings'))
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
grid.attach(Gtk.Box(border_width=10),0,(row:=row+1),5,1) # Spacer
|
|
199
|
-
|
|
200
|
-
grid.attach(self.settings_updater('default_text','What am I Doing?','Entry'),0,(row:=row+1),5,1)
|
|
201
|
-
|
|
202
|
-
grid.attach(self.settings_updater('open_task_window_fullscreen',True,'Switch'),0,(row:=row+1),5,1)
|
|
203
|
-
grid.attach(self.settings_updater('show_task_window_sidebars',True,'Switch'),0,(row:=row+1),5,1)
|
|
204
|
-
|
|
205
|
-
grid.attach(self.settings_updater('pomodoro_interval',25,'SpinButton',"(minutes)"),0,(row:=row+1),5,1)
|
|
206
|
-
|
|
207
|
-
grid.attach(self.settings_updater('randomness_interrupt_interval', 3, 'SpinButton',"\nPop up todo menu every so many minutes if not doing a task"),0,(row:=row+1),5,1)
|
|
208
|
-
|
|
209
|
-
grid.attach(self.settings_updater('todolist_refresh_interval', 3, 'SpinButton',"(hours)"),0,(row:=row+1),5,1)
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
# grid.attach(self.settings_updater('invoice_hourly_rate', 33, 'SpinButton',""),0,(row:=row+1),5,1)
|
|
213
|
-
|
|
214
|
-
grid.attach(self.settings_updater('hours_search_timeframe', 'auto', 'ComboBoxText',"\nDefault timetracking range for hours shown in main window and invoicing", options = list(hours_search_timeframes().keys())),0,(row:=row+1),5,1)
|
|
215
|
-
|
|
216
|
-
grid.attach(self.settings_updater('prompts', None, 'TextView',""),0,(row:=row+1),5,1)
|
|
217
|
-
|
|
218
|
-
grid.attach(self.settings_updater('display_todolist_as_top_level_list', 'auto', 'ComboBoxText',"", options = ['auto','always','never']),0,(row:=row+1),5,1)
|
|
219
|
-
|
|
220
|
-
grid.attach(self.settings_updater('max_top_level_menu_items', 18, 'SpinButton',""),0,(row:=row+1),5,1)
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
227
|
|
|
227
228
|
|
|
228
229
|
# Task Commands notebook page
|
nowfocus/task_window.py
CHANGED
|
@@ -141,7 +141,7 @@ class TaskWindow(Gtk.Window):
|
|
|
141
141
|
self.center_box.pack_start(self.scrolled_window, True, True, 0)
|
|
142
142
|
self.scrolled_window.set_size_request(-1, 350)
|
|
143
143
|
|
|
144
|
-
self.scrolled_window.connect('scroll-event', self.on_scroll) # This doesn't catch scrollbar moves
|
|
144
|
+
# self.scrolled_window.connect('scroll-event', self.on_scroll) # This doesn't catch scrollbar moves
|
|
145
145
|
self.scrolled_window.connect('edge-reached', self.on_scroll) # This is a little late and may not fire if the list is short?
|
|
146
146
|
|
|
147
147
|
self.tasks_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=7)
|
|
@@ -153,6 +153,7 @@ class TaskWindow(Gtk.Window):
|
|
|
153
153
|
self.total_duration_label.set_margin_end(12)
|
|
154
154
|
self.total_duration_label.get_style_context().add_class('subtle')
|
|
155
155
|
self.total_duration_label.set_halign(Gtk.Align.END)
|
|
156
|
+
# self.total_duration_label.connect("button-press-event",self.timesheet_to_clipboard) // doesn't work
|
|
156
157
|
self.task_entry_overlay.add_overlay(self.total_duration_label)
|
|
157
158
|
|
|
158
159
|
# Cool but captures the up/down selection
|
|
@@ -408,8 +409,10 @@ class TaskWindow(Gtk.Window):
|
|
|
408
409
|
|
|
409
410
|
self.l_sidebar.add(choose_from_lists(self.select_list_callback, 'None', None, False))
|
|
410
411
|
|
|
411
|
-
self.SessionEditDialog = SessionEditDialog # passed to show_sessions
|
|
412
|
-
|
|
412
|
+
self.SessionEditDialog = SessionEditDialog # passed to show_sessions via self
|
|
413
|
+
sidebar_sessions = get_sessions(use_sessions_timeframe_setting=False)
|
|
414
|
+
|
|
415
|
+
show_sessions(None, self, self.sessions_box, None, passed_sessions=sidebar_sessions, truncate_labels_to_chars=30)
|
|
413
416
|
|
|
414
417
|
self.l_sidebar.show_all()
|
|
415
418
|
self.r_sidebar.show_all()
|
|
@@ -435,11 +438,12 @@ class TaskWindow(Gtk.Window):
|
|
|
435
438
|
|
|
436
439
|
|
|
437
440
|
def task_search(self,widget = None):
|
|
438
|
-
|
|
441
|
+
timeit()
|
|
439
442
|
self.tasks_box.foreach(lambda child: child.destroy())
|
|
440
443
|
self.shown_tasks.clear()
|
|
441
444
|
|
|
442
445
|
self.search_term = self.taskEntry.get_text()
|
|
446
|
+
# print('taskwindow search start: ', self.search_term)
|
|
443
447
|
|
|
444
448
|
if self.search_term in self.search_cache:
|
|
445
449
|
tasks = self.search_cache[self.search_term]
|
|
@@ -465,11 +469,17 @@ class TaskWindow(Gtk.Window):
|
|
|
465
469
|
self.tasks_box.show_all()
|
|
466
470
|
|
|
467
471
|
self.total_duration_label.set_markup('<b>'+str(round(total_duration / 60 / 60,1))+'</b> hrs\n'+conf.user['hours_search_timeframe'] )
|
|
472
|
+
# print('taskwindow search done')
|
|
473
|
+
timeit()
|
|
468
474
|
|
|
469
475
|
|
|
470
476
|
def add_task_to_window(self,t):
|
|
471
477
|
|
|
472
478
|
try:
|
|
479
|
+
if not t['extended_label']:
|
|
480
|
+
utils.dbg("add_task_to_list no extended_label is missing.", t, s='taskwindow',l=1)
|
|
481
|
+
return False
|
|
482
|
+
|
|
473
483
|
utils.dbg("add_task_to_list "+ str(t['extended_label']), "status",t['status'], s='taskwindow',l=3)
|
|
474
484
|
|
|
475
485
|
self.shown_tasks[t['id']] = Gtk.MenuButton(popover=self.task_rclick_menu)
|
|
@@ -479,7 +489,7 @@ class TaskWindow(Gtk.Window):
|
|
|
479
489
|
|
|
480
490
|
label = Gtk.Label()
|
|
481
491
|
|
|
482
|
-
extended_label = GLib.markup_escape_text(t['extended_label']
|
|
492
|
+
extended_label = GLib.markup_escape_text(t['extended_label'])
|
|
483
493
|
|
|
484
494
|
if len(extended_label) > 110:
|
|
485
495
|
extended_label = extended_label[:110]+"..."
|
|
@@ -511,10 +521,12 @@ class TaskWindow(Gtk.Window):
|
|
|
511
521
|
button.connect("activate", self.select_task, None, t['id'])
|
|
512
522
|
button.set_relief(Gtk.ReliefStyle.NONE)
|
|
513
523
|
self.tasks_box.add(button)
|
|
524
|
+
return True
|
|
514
525
|
|
|
515
526
|
|
|
516
527
|
except Exception as e:
|
|
517
528
|
utils.dbg("Error adding task to list"+ str(t['extended_label']), t, e, l=0, s='taskwindow')
|
|
529
|
+
return False
|
|
518
530
|
|
|
519
531
|
|
|
520
532
|
def select_task(self,widget,event=None,tid=None):
|
nowfocus/user_idle_time.py
CHANGED
nowfocus/utils.py
CHANGED
|
@@ -56,7 +56,11 @@ def dbg(*data, s="", l=2, e=None, notify=None):
|
|
|
56
56
|
if system:
|
|
57
57
|
system = "- "+system
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
try:
|
|
60
|
+
print(json.dumps(data,indent=2), system+" "+levels[level])
|
|
61
|
+
except:
|
|
62
|
+
print(data)
|
|
63
|
+
|
|
60
64
|
|
|
61
65
|
# else:
|
|
62
66
|
# print("Not displaying dbg s:",system,'conf.debug_systems',conf.debug_systems)
|
|
@@ -64,6 +68,7 @@ def dbg(*data, s="", l=2, e=None, notify=None):
|
|
|
64
68
|
|
|
65
69
|
if e and isinstance(e,Exception):
|
|
66
70
|
traceback.print_tb(e.__traceback__)
|
|
71
|
+
print(e)
|
|
67
72
|
|
|
68
73
|
def error_notice(title, details = None, e = None):
|
|
69
74
|
print('ERROR',title,details,e)
|
|
@@ -433,7 +438,8 @@ def reindex(t=None):
|
|
|
433
438
|
|
|
434
439
|
|
|
435
440
|
def reindex_all():
|
|
436
|
-
|
|
441
|
+
timeit()
|
|
442
|
+
# print('reindex start')
|
|
437
443
|
db_query("DROP TABLE IF EXISTS taskindex",None,None,0)
|
|
438
444
|
db_query("CREATE VIRTUAL TABLE taskindex USING fts5(id, extended_label, priority, status)")
|
|
439
445
|
db_query("INSERT INTO taskindex(id, extended_label, priority, status) SELECT id, extended_label, priority, status FROM tasks WHERE tasks.status IS NOT '-1' ")
|
|
@@ -442,6 +448,9 @@ def reindex_all():
|
|
|
442
448
|
db_query("UPDATE taskindex set priority = ? WHERE id = ?",(t['priority'],t['id']))
|
|
443
449
|
|
|
444
450
|
db_query("REPLACE INTO system(field, value) VALUES(?,?)",('taskindex_update_time',now().strftime("%Y-%m-%d %H:%M:%S")))
|
|
451
|
+
# print('reindex done')
|
|
452
|
+
timeit()
|
|
453
|
+
|
|
445
454
|
return True
|
|
446
455
|
|
|
447
456
|
|
|
@@ -652,20 +661,20 @@ def db_cleanup(widget = None):
|
|
|
652
661
|
ids = []
|
|
653
662
|
# print('ids_sql',ids_sql)
|
|
654
663
|
for id, todo in conf.user['todolists'].items():
|
|
655
|
-
|
|
656
|
-
ids.append(id)
|
|
664
|
+
ids.append(id)
|
|
657
665
|
|
|
658
666
|
# Old save
|
|
659
667
|
# print("Active todolist ids",ids)
|
|
660
668
|
|
|
661
669
|
# Delete unlinked tasks
|
|
662
|
-
|
|
670
|
+
db_query('DELETE FROM tasks WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
|
|
671
|
+
|
|
663
672
|
# print(len(orphaned_tasks),"orphaned_tasks",orphaned_tasks)
|
|
664
673
|
# orphaned_tasks = db_query('SELECT id, extended_label, todolist FROM tasks WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
|
|
665
674
|
# print(len(orphaned_tasks),"orphaned_tasks",orphaned_tasks)
|
|
666
675
|
|
|
667
676
|
# Delete unlinked lists
|
|
668
|
-
|
|
677
|
+
db_query('DELETE FROM lists WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
|
|
669
678
|
|
|
670
679
|
# orphaned_lists = db_query('SELECT id, extended_label, todolist FROM lists WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
|
|
671
680
|
# print("orphaned_lists",orphaned_lists)
|
|
@@ -811,7 +820,7 @@ def get_sessions(conditions_sql = None, order_by = 'start_time', limit = 35, use
|
|
|
811
820
|
return db_query(" SELECT * FROM sessions WHERE 1=1 "+conditions+" ORDER BY "+order_by+" DESC LIMIT ? ",(limit,))
|
|
812
821
|
|
|
813
822
|
|
|
814
|
-
def show_sessions(widget = None, self = None, sessions_box = None, label_text = "Most Recent Sessions", order_by = 'start_time', limit = 35, passed_sessions = None,
|
|
823
|
+
def show_sessions(widget = None, self = None, sessions_box = None, label_text = "Most Recent Sessions", order_by = 'start_time', limit = 35, passed_sessions = None, truncate_labels_to_chars = None ):
|
|
815
824
|
|
|
816
825
|
sessions_box.foreach(lambda child: child.destroy())
|
|
817
826
|
|
|
@@ -833,10 +842,10 @@ def show_sessions(widget = None, self = None, sessions_box = None, label_text =
|
|
|
833
842
|
|
|
834
843
|
for ls in sessions:
|
|
835
844
|
dbg('Add session to session_box',ls['extended_label'],s='settings')
|
|
836
|
-
if
|
|
845
|
+
if truncate_labels_to_chars:
|
|
837
846
|
label = ls['extended_label'].split('>')[-1].strip()
|
|
838
|
-
if len(label) >
|
|
839
|
-
label = label[:
|
|
847
|
+
if len(label) > truncate_labels_to_chars:
|
|
848
|
+
label = label[:truncate_labels_to_chars]+'…'
|
|
840
849
|
btn = Gtk.Button(label=label+' '+str(sec_to_time(ls['duration'])))
|
|
841
850
|
else:
|
|
842
851
|
btn = Gtk.Button(label=ls['extended_label']+' '+str(sec_to_time(ls['duration'])))
|
|
@@ -1034,10 +1043,11 @@ def get_times(task):
|
|
|
1034
1043
|
|
|
1035
1044
|
|
|
1036
1045
|
def db_deactivate_todo(id):
|
|
1037
|
-
dbg("deactivating todolist: "
|
|
1046
|
+
dbg("deactivating todolist: ",id, s='todoloading')
|
|
1038
1047
|
# Delete inactive todo items (except where there are sessions for them)
|
|
1039
|
-
db_query("DELETE FROM tasks WHERE todolist = ? AND id NOT IN (SELECT task_id FROM sessions)",(id,))
|
|
1040
|
-
db_query("DELETE FROM lists WHERE todolist = ? AND id NOT IN (SELECT parent_id FROM tasks)",(id,))
|
|
1048
|
+
# db_query("DELETE FROM tasks WHERE todolist = ? AND id NOT IN (SELECT task_id FROM sessions)",(id,))
|
|
1049
|
+
# db_query("DELETE FROM lists WHERE todolist = ? AND id NOT IN (SELECT parent_id FROM tasks)",(id,))
|
|
1050
|
+
|
|
1041
1051
|
db_query("UPDATE lists SET status = -1 WHERE todolist = ?",(id,))
|
|
1042
1052
|
db_query("UPDATE tasks SET status = -1 WHERE todolist = ?",(id,))
|
|
1043
1053
|
|
|
@@ -1170,6 +1180,11 @@ def choose_from_lists(callback, selected_list_id = None, session = None, accepts
|
|
|
1170
1180
|
|
|
1171
1181
|
if accepts_tasks:
|
|
1172
1182
|
where += " AND data like '%\"accepts_tasks\": true%' "
|
|
1183
|
+
else:
|
|
1184
|
+
# HACK: to not show op level lists
|
|
1185
|
+
# TODO: think of a better way
|
|
1186
|
+
where += " AND parent_label != '' "
|
|
1187
|
+
|
|
1173
1188
|
|
|
1174
1189
|
lists = db_query("SELECT * FROM lists "+where+" ORDER BY todolist, extended_label ASC ", None, 'id')
|
|
1175
1190
|
|
|
@@ -1182,12 +1197,15 @@ def choose_from_lists(callback, selected_list_id = None, session = None, accepts
|
|
|
1182
1197
|
button_group = Gtk.RadioButton(label=l['label'])
|
|
1183
1198
|
item = button_group
|
|
1184
1199
|
else:
|
|
1185
|
-
|
|
1200
|
+
indent = len(get_lists_for_item(l)['ids'])
|
|
1201
|
+
label = f'{" " * indent}' + l['label']
|
|
1202
|
+
item = Gtk.RadioButton(label=GLib.markup_escape_text(label), group=button_group)
|
|
1186
1203
|
|
|
1187
1204
|
if todolist != l['todolist']:
|
|
1188
1205
|
# new buttongroup for new todolist
|
|
1189
1206
|
todolist = l['todolist']
|
|
1190
1207
|
l['header'] = Gtk.Label()
|
|
1208
|
+
|
|
1191
1209
|
try:
|
|
1192
1210
|
l['header'].set_markup("<b>"+conf.user['todolists'][todolist]["label"]+"</b>")
|
|
1193
1211
|
except Exception as e:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
nowfocus/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
2
|
-
nowfocus/__main__.py,sha256=
|
|
2
|
+
nowfocus/__main__.py,sha256=kIJy1gd2FIZkXNqLdUYhjU7OSBKLYarieSw7f9PQA4U,33097
|
|
3
3
|
nowfocus/conf.py,sha256=KV0iouYSSpYUITLlG-lPvmk1sHFVQsykwqmvb9wyTdk,6693
|
|
4
4
|
nowfocus/example-todo.txt,sha256=o-ZRNiTlSGFbTK9jpdDIi07qHBrpvP0JhBZSk0VlpQU,246
|
|
5
5
|
nowfocus/install.py,sha256=tcds4l6b492HTC7DfapatafgeMmDWvBfy8nwi1CjFXk,3040
|
|
@@ -7,11 +7,11 @@ nowfocus/new_task_dialog.py,sha256=GG49tOAwXiUKAHeaKnCG8Q3SZlL5pJijRZEcSjMwQng,4
|
|
|
7
7
|
nowfocus/session_edit_dialog.py,sha256=V2QWSdNaxsQHRcG28CJBQM2sa45m5RNcu_suQF26mkM,6912
|
|
8
8
|
nowfocus/session_options.py,sha256=mOnyEM3-usKgVvBhESY0TNBcy4FTG-AHP6ETMgB1fQ4,5071
|
|
9
9
|
nowfocus/sessions.csv,sha256=kYpr06yQg_J86NQ4AiYw4RnQchcw3ouPKVYa1lYDUNo,39
|
|
10
|
-
nowfocus/settings.py,sha256=
|
|
10
|
+
nowfocus/settings.py,sha256=CZoSpFacxAs99Nq-NXNDKiBqjPSLPwg8bL5hcsi2a6E,35151
|
|
11
11
|
nowfocus/styles.css,sha256=PG1SrLkwSSay8M2VKeRcE0UdK54ndsEDFnRLRkmP-9M,510
|
|
12
|
-
nowfocus/task_window.py,sha256=
|
|
13
|
-
nowfocus/user_idle_time.py,sha256=
|
|
14
|
-
nowfocus/utils.py,sha256=
|
|
12
|
+
nowfocus/task_window.py,sha256=Ypt3s8czczeoMTsAMbPW_zpFJlQq4uBU5x0ankPnZlg,29071
|
|
13
|
+
nowfocus/user_idle_time.py,sha256=I44Ip-iGGzWAiHnM2_06jNqhCne9y1SbvcBI-nYBolU,2365
|
|
14
|
+
nowfocus/utils.py,sha256=C2t3JPodSEfVdCHuroKpiH05Q5fV_vPfxyszN4cVoo0,50526
|
|
15
15
|
nowfocus/version_migrator.py,sha256=q8T1C8-DLOwUQUM5IPcMjPbVbsLTO4VsqADlAAXd9gw,628
|
|
16
16
|
nowfocus/connectors/activitywatch.py,sha256=QbkOmjIOiVwccWc2xhhePd0Abww5vEiVpCNjeqOyYGg,921
|
|
17
17
|
nowfocus/connectors/caldav.py,sha256=PeM_9yJC8W17L8Y5AyS75o6GfzTrPoMYKIvetND8T78,5089
|
|
@@ -52,9 +52,9 @@ nowfocus/icon/settings.svg,sha256=fgkGJouPPtZLxZn2nr_5pEp9MdhRSRaW9mtdxhJHDuQ,39
|
|
|
52
52
|
nowfocus/sound/bell-xylophone-g.mp3,sha256=1OBcRWvD87AGNcq1uZFR8HqG0nanJykImERfVDVxHD4,53891
|
|
53
53
|
nowfocus/sound/dinner-bell.mp3,sha256=hjjO0xqA4uXpYw9KLwwlBnrVfRhVq1K5OXzwlMXhRn4,113620
|
|
54
54
|
nowfocus/sound/xylophone-chord.mp3,sha256=gwgBSqhMt5PMzT5N03Z6TvDgipQZfnkEz_o81Rq5Z1U,131806
|
|
55
|
-
nowfocus-0.5.
|
|
56
|
-
nowfocus-0.5.
|
|
57
|
-
nowfocus-0.5.
|
|
58
|
-
nowfocus-0.5.
|
|
59
|
-
nowfocus-0.5.
|
|
60
|
-
nowfocus-0.5.
|
|
55
|
+
nowfocus-0.5.3.dist-info/licenses/LICENSE,sha256=fSJzoHs1EOCwEd7FIyokFeGEma7NKmTVEdHkCr5OIV4,35127
|
|
56
|
+
nowfocus-0.5.3.dist-info/METADATA,sha256=N_QAlr4Ecm61b-0CKwc2YMPYkmJcFG2s94NHpGvrhzQ,6804
|
|
57
|
+
nowfocus-0.5.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
58
|
+
nowfocus-0.5.3.dist-info/entry_points.txt,sha256=RbYY19-irSoNVglNeNnL9D36cHft7aKsaEGEYoSH3pA,51
|
|
59
|
+
nowfocus-0.5.3.dist-info/top_level.txt,sha256=3uLd9BwmfarZwqVUxkSJuVwJ8qHzjThte8rt_UYG7tE,9
|
|
60
|
+
nowfocus-0.5.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|