nowfocus 0.5.0__py3-none-any.whl → 0.5.2__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 +28 -11
- {nowfocus-0.5.0.dist-info → nowfocus-0.5.2.dist-info}/METADATA +2 -2
- {nowfocus-0.5.0.dist-info → nowfocus-0.5.2.dist-info}/RECORD +11 -11
- {nowfocus-0.5.0.dist-info → nowfocus-0.5.2.dist-info}/WHEEL +0 -0
- {nowfocus-0.5.0.dist-info → nowfocus-0.5.2.dist-info}/entry_points.txt +0 -0
- {nowfocus-0.5.0.dist-info → nowfocus-0.5.2.dist-info}/licenses/LICENSE +0 -0
- {nowfocus-0.5.0.dist-info → nowfocus-0.5.2.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
|
|
|
@@ -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'])))
|
|
@@ -893,9 +902,9 @@ def get_total_time(id, category = 'tasks', start_time = None, end_time = None, g
|
|
|
893
902
|
|
|
894
903
|
def get_percent_time_focused():
|
|
895
904
|
|
|
896
|
-
rand_seconds = db_query("SELECT SUM(duration) as seconds FROM sessions WHERE sessions.task_id = 'Randomness' AND "+ sessions_timeframe_sql())[0]['seconds']
|
|
905
|
+
rand_seconds = force_number(db_query("SELECT SUM(duration) as seconds FROM sessions WHERE sessions.task_id = 'Randomness' AND "+ sessions_timeframe_sql())[0]['seconds'])
|
|
897
906
|
|
|
898
|
-
focus_seconds = db_query("SELECT SUM(duration) as seconds FROM sessions WHERE sessions.task_id != 'Randomness' AND "+ sessions_timeframe_sql())[0]['seconds']
|
|
907
|
+
focus_seconds = force_number(db_query("SELECT SUM(duration) as seconds FROM sessions WHERE sessions.task_id != 'Randomness' AND "+ sessions_timeframe_sql())[0]['seconds'])
|
|
899
908
|
|
|
900
909
|
percent = round(divide(focus_seconds,(focus_seconds + rand_seconds)) * 100)
|
|
901
910
|
|
|
@@ -905,9 +914,9 @@ def get_percent_time_focused():
|
|
|
905
914
|
|
|
906
915
|
def get_percent_time_priority():
|
|
907
916
|
|
|
908
|
-
priority_seconds = db_query("SELECT SUM(duration) as seconds FROM sessions WHERE sessions.task_id = 'Randomness' AND "+ sessions_timeframe_sql())[0]['seconds']
|
|
917
|
+
priority_seconds = force_number(db_query("SELECT SUM(duration) as seconds FROM sessions WHERE sessions.task_id = 'Randomness' AND "+ sessions_timeframe_sql())[0]['seconds'])
|
|
909
918
|
|
|
910
|
-
total_seconds = db_query("SELECT SUM(duration) as seconds FROM sessions WHERE "+ sessions_timeframe_sql())[0]['seconds']
|
|
919
|
+
total_seconds = force_number(db_query("SELECT SUM(duration) as seconds FROM sessions WHERE "+ sessions_timeframe_sql())[0]['seconds'])
|
|
911
920
|
|
|
912
921
|
percent = round(divide(priority_seconds,(total_seconds)) * 100)
|
|
913
922
|
|
|
@@ -1170,6 +1179,11 @@ def choose_from_lists(callback, selected_list_id = None, session = None, accepts
|
|
|
1170
1179
|
|
|
1171
1180
|
if accepts_tasks:
|
|
1172
1181
|
where += " AND data like '%\"accepts_tasks\": true%' "
|
|
1182
|
+
else:
|
|
1183
|
+
# HACK: to not show op level lists
|
|
1184
|
+
# TODO: think of a better way
|
|
1185
|
+
where += " AND parent_label != '' "
|
|
1186
|
+
|
|
1173
1187
|
|
|
1174
1188
|
lists = db_query("SELECT * FROM lists "+where+" ORDER BY todolist, extended_label ASC ", None, 'id')
|
|
1175
1189
|
|
|
@@ -1182,12 +1196,15 @@ def choose_from_lists(callback, selected_list_id = None, session = None, accepts
|
|
|
1182
1196
|
button_group = Gtk.RadioButton(label=l['label'])
|
|
1183
1197
|
item = button_group
|
|
1184
1198
|
else:
|
|
1185
|
-
|
|
1199
|
+
indent = len(get_lists_for_item(l)['ids'])
|
|
1200
|
+
label = f'{" " * indent}' + l['label']
|
|
1201
|
+
item = Gtk.RadioButton(label=GLib.markup_escape_text(label), group=button_group)
|
|
1186
1202
|
|
|
1187
1203
|
if todolist != l['todolist']:
|
|
1188
1204
|
# new buttongroup for new todolist
|
|
1189
1205
|
todolist = l['todolist']
|
|
1190
1206
|
l['header'] = Gtk.Label()
|
|
1207
|
+
|
|
1191
1208
|
try:
|
|
1192
1209
|
l['header'].set_markup("<b>"+conf.user['todolists'][todolist]["label"]+"</b>")
|
|
1193
1210
|
except Exception as e:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nowfocus
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
4
4
|
Summary: nowfocus: the open source task-tracking self-control panel.
|
|
5
5
|
Author: AltruistEnterprises
|
|
6
6
|
Project-URL: Homepage, https://www.nowfocus.org
|
|
@@ -173,7 +173,7 @@ Open nowfocus **Settings** from the indicator menu or tasks window and connect y
|
|
|
173
173
|
git clone https://codeberg.org/AltruistEnterprises/nowfocus.git
|
|
174
174
|
cd nowfocus
|
|
175
175
|
python3 -m venv .venv/nowfocus-build
|
|
176
|
-
source .venv/nowfocus-build/bin/activate
|
|
176
|
+
source .venv/nowfocus-build/bin/activate
|
|
177
177
|
pip install -r build-requirements.txt
|
|
178
178
|
python3 -m build
|
|
179
179
|
pipx install -e --force YOUR_INSTALL_PATH
|
|
@@ -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=Es62GSorb_48ZkD9ppkMXE2TLoAYXev6wTRNMn6Ps6g,50551
|
|
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.2.dist-info/licenses/LICENSE,sha256=fSJzoHs1EOCwEd7FIyokFeGEma7NKmTVEdHkCr5OIV4,35127
|
|
56
|
+
nowfocus-0.5.2.dist-info/METADATA,sha256=XxURJnrYxGV_5p9sq4Px_k4VB7-PJ-zfOwG-K-S_jEE,6804
|
|
57
|
+
nowfocus-0.5.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
58
|
+
nowfocus-0.5.2.dist-info/entry_points.txt,sha256=RbYY19-irSoNVglNeNnL9D36cHft7aKsaEGEYoSH3pA,51
|
|
59
|
+
nowfocus-0.5.2.dist-info/top_level.txt,sha256=3uLd9BwmfarZwqVUxkSJuVwJ8qHzjThte8rt_UYG7tE,9
|
|
60
|
+
nowfocus-0.5.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|