nowfocus 0.5.2__py3-none-any.whl → 0.5.4__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 CHANGED
@@ -100,8 +100,9 @@ class Application(Gtk.Application):
100
100
  # time.sleep(3)
101
101
  # self.open_session_options_dialog('test_param')
102
102
  # self.open_settings_window() #for testing
103
- # self.open_new_task_dialog() #for testing
103
+ self.open_new_task_dialog() #for testing
104
104
  # self.print_time_totals()
105
+ # self.new_task_dialog()
105
106
 
106
107
  signal.signal(signal.SIGINT, self.quit)
107
108
  signal.signal(signal.SIGUSR1, self.signal_handler)
nowfocus/task_window.py CHANGED
@@ -407,7 +407,7 @@ class TaskWindow(Gtk.Window):
407
407
  # self.r_sidebar.connect("enter-notify-event",self.test)
408
408
 
409
409
 
410
- self.l_sidebar.add(choose_from_lists(self.select_list_callback, 'None', None, False))
410
+ self.l_sidebar.add(choose_from_lists(self.select_list_callback, 'None', None, False, show_todolist_headers=False))
411
411
 
412
412
  self.SessionEditDialog = SessionEditDialog # passed to show_sessions via self
413
413
  sidebar_sessions = get_sessions(use_sessions_timeframe_setting=False)
@@ -491,8 +491,8 @@ class TaskWindow(Gtk.Window):
491
491
 
492
492
  extended_label = GLib.markup_escape_text(t['extended_label'])
493
493
 
494
- if len(extended_label) > 110:
495
- extended_label = extended_label[:110]+"..."
494
+ if len(extended_label) > 100:
495
+ extended_label = extended_label[:100]+"..."
496
496
 
497
497
  if len(self.search_term) > 1:
498
498
 
nowfocus/utils.py CHANGED
@@ -661,20 +661,20 @@ def db_cleanup(widget = None):
661
661
  ids = []
662
662
  # print('ids_sql',ids_sql)
663
663
  for id, todo in conf.user['todolists'].items():
664
- if todo['status']:
665
- ids.append(id)
664
+ ids.append(id)
666
665
 
667
666
  # Old save
668
667
  # print("Active todolist ids",ids)
669
668
 
670
669
  # Delete unlinked tasks
671
- # db_query('DELETE FROM tasks WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
670
+ db_query('DELETE FROM tasks WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
671
+
672
672
  # print(len(orphaned_tasks),"orphaned_tasks",orphaned_tasks)
673
673
  # orphaned_tasks = db_query('SELECT id, extended_label, todolist FROM tasks WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
674
674
  # print(len(orphaned_tasks),"orphaned_tasks",orphaned_tasks)
675
675
 
676
676
  # Delete unlinked lists
677
- # db_query('DELETE FROM lists WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
677
+ db_query('DELETE FROM lists WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
678
678
 
679
679
  # orphaned_lists = db_query('SELECT id, extended_label, todolist FROM lists WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
680
680
  # print("orphaned_lists",orphaned_lists)
@@ -1043,10 +1043,11 @@ def get_times(task):
1043
1043
 
1044
1044
 
1045
1045
  def db_deactivate_todo(id):
1046
- dbg("deactivating todolist: "+id, s='todoloading')
1046
+ dbg("deactivating todolist: ",id, s='todoloading')
1047
1047
  # Delete inactive todo items (except where there are sessions for them)
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,))
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
+
1050
1051
  db_query("UPDATE lists SET status = -1 WHERE todolist = ?",(id,))
1051
1052
  db_query("UPDATE tasks SET status = -1 WHERE todolist = ?",(id,))
1052
1053
 
@@ -1156,7 +1157,7 @@ def get_most_recent_list(session = None):
1156
1157
  return last_session[0]['parent_id']
1157
1158
 
1158
1159
 
1159
- def choose_from_lists(callback, selected_list_id = None, session = None, accepts_tasks = True):
1160
+ def choose_from_lists(callback, selected_list_id = None, session = None, accepts_tasks = True, skip_top_level_lists = False, show_todolist_headers = True):
1160
1161
  ''' Returns a Gtk.ScrolledWindow widget with radio buttons'''
1161
1162
 
1162
1163
  # TODO: consider using TreeView https://lazka.github.io/pgi-docs/Gtk-3.0/classes/TreeView.html#Gtk.TreeView
@@ -1166,6 +1167,7 @@ def choose_from_lists(callback, selected_list_id = None, session = None, accepts
1166
1167
  selected_list_id = get_most_recent_list(session = None)
1167
1168
 
1168
1169
  box = Gtk.VBox()
1170
+ box.set_spacing(8)
1169
1171
 
1170
1172
  scrolled_window = Gtk.ScrolledWindow()
1171
1173
  scrolled_window.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
@@ -1177,48 +1179,55 @@ def choose_from_lists(callback, selected_list_id = None, session = None, accepts
1177
1179
 
1178
1180
  where = " WHERE status = '1' "
1179
1181
 
1180
- if accepts_tasks:
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 != '' "
1182
+ if skip_top_level_lists:
1183
+ where += " AND parent_label IS NOT NULL "
1186
1184
 
1187
-
1188
- lists = db_query("SELECT * FROM lists "+where+" ORDER BY todolist, extended_label ASC ", None, 'id')
1185
+ lists = db_query("SELECT lists.*, (SELECT start_time FROM sessions WHERE todolist = lists.todolist ORDER BY start_time DESC LIMIT 1 ) as last_session_on_todo FROM lists "+where+" ORDER BY last_session_on_todo DESC, CASE WHEN parent_id IS NULL THEN 1 ELSE 2 END, extended_label ASC ", None, 'id')
1186
+
1187
+ r_button = None
1188
+ todolist_id = None
1189
1189
 
1190
1190
  for id, l in lists.items():
1191
- l['data'] = json.loads(l['data'])
1192
- # print("AddTask list ",l['label'])
1191
+ try:
1192
+ l['data'] = json.loads(l['data'])
1193
1193
 
1194
- if todolist == None:
1195
- # initial button group
1196
- button_group = Gtk.RadioButton(label=l['label'])
1197
- item = button_group
1198
- else:
1199
1194
  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)
1202
-
1203
- if todolist != l['todolist']:
1204
- # new buttongroup for new todolist
1205
- todolist = l['todolist']
1206
- l['header'] = Gtk.Label()
1195
+ label = f'{" · " * indent}' + GLib.markup_escape_text(l['label'])
1196
+
1197
+ if todolist_id != l['todolist']:
1198
+ todolist_id = l['todolist']
1199
+ if show_todolist_headers:
1200
+ label = "<b>" + label + "</b>"
1201
+ if r_button:
1202
+ r_button.set_margin_bottom(20)
1203
+ else:
1204
+ continue
1207
1205
 
1208
- try:
1209
- l['header'].set_markup("<b>"+conf.user['todolists'][todolist]["label"]+"</b>")
1210
- except Exception as e:
1211
- dbg('Exception creating button group header for list',l, e=e, l=0)
1212
-
1213
- box.add(l['header'])
1206
+ label_widget = Gtk.Label()
1207
+ label_widget.set_halign(Gtk.Align.START)
1208
+ label_widget.set_markup(label)
1214
1209
 
1215
- if l['id'] == selected_list_id:
1216
- item.set_active(True)
1210
+ if accepts_tasks and l['data']['accepts_tasks'] == False:
1211
+ label_widget.set_markup(' '+label)
1212
+
1213
+ box.add(label_widget)
1214
+
1215
+ else:
1216
+ r_button = Gtk.RadioButton(group=r_button)
1217
+ r_button.add(label_widget)
1218
+
1219
+
1220
+ if l['id'] == selected_list_id:
1221
+ r_button.set_active(True)
1217
1222
 
1218
- item.connect("toggled", callback, l) #
1219
- box.add(item)
1223
+ r_button.connect("toggled", callback, l)
1224
+ box.add(r_button)
1225
+
1226
+ except Exception as e:
1227
+ dbg('Exception adding to choose_from_lists list', l, e=e, l=0)
1220
1228
 
1221
1229
  # TODO: allow a height argument to account for other things that require space, and possibly a global screen height value?
1230
+
1222
1231
  # Optimize the height, 27px per item with max of 700 px and a min of 50
1223
1232
  height = max(50,min(500, (len(lists) * 27)))
1224
1233
  scrolled_window.set_size_request(-1, height)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nowfocus
3
- Version: 0.5.2
3
+ Version: 0.5.4
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
@@ -1,5 +1,5 @@
1
1
  nowfocus/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
2
- nowfocus/__main__.py,sha256=kIJy1gd2FIZkXNqLdUYhjU7OSBKLYarieSw7f9PQA4U,33097
2
+ nowfocus/__main__.py,sha256=kVykjOg41_zI0aej28l8MPLrFw4GkKZBxIfi-lwiH-8,33132
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
@@ -9,9 +9,9 @@ nowfocus/session_options.py,sha256=mOnyEM3-usKgVvBhESY0TNBcy4FTG-AHP6ETMgB1fQ4,5
9
9
  nowfocus/sessions.csv,sha256=kYpr06yQg_J86NQ4AiYw4RnQchcw3ouPKVYa1lYDUNo,39
10
10
  nowfocus/settings.py,sha256=CZoSpFacxAs99Nq-NXNDKiBqjPSLPwg8bL5hcsi2a6E,35151
11
11
  nowfocus/styles.css,sha256=PG1SrLkwSSay8M2VKeRcE0UdK54ndsEDFnRLRkmP-9M,510
12
- nowfocus/task_window.py,sha256=Ypt3s8czczeoMTsAMbPW_zpFJlQq4uBU5x0ankPnZlg,29071
12
+ nowfocus/task_window.py,sha256=cwqd1XeVXOwgkrLosEpiT3DUKHoXINRU2aeBHJqqswo,29100
13
13
  nowfocus/user_idle_time.py,sha256=I44Ip-iGGzWAiHnM2_06jNqhCne9y1SbvcBI-nYBolU,2365
14
- nowfocus/utils.py,sha256=Es62GSorb_48ZkD9ppkMXE2TLoAYXev6wTRNMn6Ps6g,50551
14
+ nowfocus/utils.py,sha256=FEzVb_xhdIg_7gsPfFbnu-hmNeGhhD17MqwqOAUnaGM,50902
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.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,,
55
+ nowfocus-0.5.4.dist-info/licenses/LICENSE,sha256=fSJzoHs1EOCwEd7FIyokFeGEma7NKmTVEdHkCr5OIV4,35127
56
+ nowfocus-0.5.4.dist-info/METADATA,sha256=qpziOM_IPWoVquD2EsAN7UUMRAYkAg56AEeAOxnzqDA,6804
57
+ nowfocus-0.5.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
58
+ nowfocus-0.5.4.dist-info/entry_points.txt,sha256=RbYY19-irSoNVglNeNnL9D36cHft7aKsaEGEYoSH3pA,51
59
+ nowfocus-0.5.4.dist-info/top_level.txt,sha256=3uLd9BwmfarZwqVUxkSJuVwJ8qHzjThte8rt_UYG7tE,9
60
+ nowfocus-0.5.4.dist-info/RECORD,,