+ db = TodoDB(prefix=app_config['prefix'])
+ params_to_encode = []
+ for param_name, filter_db_name in {('t_and', 't_filter_and'), ('t_not', 't_filter_not')}:
+ filter_db = getattr(db, filter_db_name)
+ if param_name in postvars.keys():
+ for target in postvars[param_name]:
+ if len(target) > 0 and not target in filter_db:
+ filter_db += [target]
+ if len(filter_db) == 0:
+ params_to_encode += [(param_name, '-')]
+ params_to_encode += [(param_name, f) for f in filter_db]
+
+ def collect_checked(prefix, postvars):
+ tags_checked = []
+ for k in postvars.keys():
+ if k.startswith(prefix):
+ tags_checked += [k[len(prefix):]]
+ return tags_checked
+
+ if parsed_url.path == app_config['prefix'] + '/calendar':
+ params_to_encode += [('start', postvars['start'][0] if len(postvars['start'][0]) > 0 else '-')]
+ params_to_encode += [('end', postvars['end'][0] if len(postvars['end'][0]) > 0 else '-')]
+
+ elif parsed_url.path == app_config['prefix'] + '/todo':
+ task_uuid = postvars['task_uuid'][0]
+ date = postvars['date'][0]
+ params_to_encode += [('task', task_uuid), ('date', date)]
+ db.update_todo(task_uuid, date, postvars['day_effort'][0], 'done' in postvars.keys(), postvars['comment'][0], postvars['joined_day_tags'][0], collect_checked('day_tag_', postvars), postvars['importance'][0])
+
+ elif parsed_url.path == app_config['prefix'] + '/task':
+ id_ = postvars['id'][0]
+ params_to_encode += [('id', id_)]
+ if 'title' in postvars.keys():
+ db.update_task(id_, postvars['title'][0], postvars['default_effort'][0], postvars['joined_tags'][0], collect_checked('tag_', postvars), collect_checked('link_', postvars))
+
+ elif parsed_url.path == app_config['prefix'] + '/day':
+ if 'expect_unchosen_done' in postvars.keys():
+ params_to_encode += [('hide_unchosen', int('hide_unchosen' in postvars.keys()))] + [('hide_done', int('hide_done' in postvars.keys()))]
+ if 'selected_date' in postvars.keys():
+ db.selected_date = postvars['selected_date'][0]
+ if 't_uuid' in postvars.keys():
+ for i, uuid in enumerate(postvars['t_uuid']):
+ t = db.tasks[uuid]
+ if uuid in db.selected_day.todos.keys() and ((not 'choose' in postvars) or uuid not in postvars['choose']) and not db.selected_day.todos[uuid].is_empty():
+ del db.selected_day.todos[uuid]
+ if 'choose' in postvars.keys():
+ for i, uuid in enumerate(postvars['t_uuid']):
+ uuids = postvars['choose'] + postvars['done'] if 'done' in postvars.keys() else []
+ if uuid in uuids or postvars['day_effort'][i] != '' or postvars['importance'][i] != '1.0':
+ done = 'done' in postvars and uuid in postvars['done']
+ db.update_todo_mini(uuid, db.selected_date, postvars['day_effort'][i], done, postvars['importance'][i])
+ if 'day_comment' in postvars.keys():
+ db.selected_day.comment = postvars['day_comment'][0]
+ params_to_encode += [('selected_date', db.selected_date)]
+
+ encoded_params = urlencode(params_to_encode)
+ homepage = f'{parsed_url.path}?{encoded_params}'
+ db.write()