global params; default hidden done tasks; toggle active

This commit is contained in:
Arnas Udovicius 2018-02-25 22:31:42 +02:00
parent 02658555d7
commit 33b0e5c52a
6 changed files with 215 additions and 7 deletions

155
config.py Normal file
View file

@ -0,0 +1,155 @@
import sys
from pyfzf.pyfzf import FzfPrompt
from model import Model
from params import Params
from bcolors import bcolors
class Config:
def __init__(self):
self.model = Model()
self.params = Params()
self.fzf = FzfPrompt()
def manage(self):
done = 'off'
if self.params.get('done'):
done = 'on'
print(bcolors.WARNING + 'Show done tasks: [' + done + ']' + bcolors.ENDC)
self.manage_menu()
def manage_menu(self):
menu = input(bcolors.OKBLUE + '~config: ' + bcolors.OKGREEN + 'What you want to do? (?!vt#<q) ' + bcolors.ENDC)
if menu == 'q':
self.bye()
elif menu == '?':
self.manage_about()
elif menu == '!':
self.toggle_active()
elif menu == 'v':
self.toggle_done()
elif menu == '<':
return
else:
print(bcolors.FAIL + 'This is not implemented...' + bcolors.ENDC)
self.manage_menu()
def manage_about(self):
print(bcolors.WARNING + '''
Short instruction
-----------------
? - help (this dialog)
! - toggle active tasks
v - toggle done tasks
t - manage time slots
# - backup/restore
< - back
q - exit
''' + bcolors.ENDC)
self.manage()
def toggle_done(self):
done = self.params.get('done')
self.params.update('done', not done)
print(bcolors.OKBLUE + '[parameter "done" has been toggled]' + bcolors.ENDC)
self.manage()
def manage_timeslot(self):
self.manage_timeslot_menu()
def manage_timeslot_menu(self):
menu = input(bcolors.OKBLUE + '~config: ' + bcolors.OKGREEN + 'What you want to do? (?!vt#<q) ' + bcolors.ENDC)
if menu == 'q':
self.bye()
elif menu == '/':
self.search_time_slot()
self.manage_menu()
elif menu == '?':
self.manage_timeslot_about()
elif menu == '+':
self.add_time_slot()
elif menu == '-':
self.remove_time_slot()
elif menu == '<':
return
else:
print(bcolors.FAIL + 'This is not implemented...' + bcolors.ENDC)
self.manage_menu()
def manage_timeslot_about(self):
print(bcolors.WARNING + '''
Short instruction
-----------------
? - help (this dialog)
! - toggle active tasks
v - toggle done tasks
t - manage time slots
# - backup/restore
< - back
q - exit
''' + bcolors.ENDC)
self.manage()
def add_time_slot(self):
print(bcolors.HEADER + 'Adding time slot' + bcolors.ENDC)
name = input('Name (short): ')
description = input('Description: ')
tid = self.model.create_time_slot(name, description)
print(bcolors.OKBLUE + '[time slot has been created]' + bcolors.ENDC)
self.manage()
def search_tag(self, tid=None):
tagsData = self.model.get_all_tags()
if not tagsData:
self.add_tag()
tagsData = self.model.get_all_tags()
tags = []
for t in tagsData:
tags.append(t['name'])
selected = self.fzf.prompt(tags)
if selected:
tag = self.model.get_tag_by_name(selected[0])
self.manage_tag(tag['id'])
else:
print(bcolors.FAIL + 'Tag was not selected...' + bcolors.ENDC)
def remove_tag(self, tid=None):
tagsData = self.model.get_all_tags()
if not tagsData:
print(bcolors.FAIL + 'Where is no tags...' + bcolors.ENDC)
self.manage_tag_menu()
tags = []
for t in tagsData:
tags.append(t['name'])
selected = self.fzf.prompt(tags)
if selected:
self.model.remove_tag_by_name(selected[0])
print(bcolors.OKBLUE + '[tag has been deleted]' + bcolors.ENDC)
self.manage_tag()
else:
print(bcolors.FAIL + 'Tag was not selected...' + bcolors.ENDC)
def bye(self):
print(bcolors.FAIL + 'bye o/' + bcolors.ENDC)
sys.exit(0)

View file

@ -19,13 +19,22 @@ class Model:
return self.conn.execute(query, tag_name) return self.conn.execute(query, tag_name)
def get_all_tasks(self): def get_all_tasks(self, done=False, active=False):
done_query = ''
if done:
done_query = 'AND t.done = 1'
active_query = ''
if active:
active_query = 'AND t.active = 1'
query = ''' query = '''
SELECT t.*, GROUP_CONCAT(g.name, ' ') AS tag_names FROM task t SELECT t.*, GROUP_CONCAT(g.name, ' ') AS tag_names FROM task t
LEFT JOIN tag_task tt ON tt.task_id = t.id LEFT JOIN tag_task tt ON tt.task_id = t.id
LEFT JOIN tag g ON g.id = tt.tag_id LEFT JOIN tag g ON g.id = tt.tag_id
WHERE 1 %s %s
GROUP BY t.id GROUP BY t.id
''' ''' % (done_query, active_query)
return self.conn.execute(query) return self.conn.execute(query)
@ -86,9 +95,14 @@ class Model:
cursor.execute('UPDATE task SET long_term=NOT long_term WHERE aid=?', (aid)) cursor.execute('UPDATE task SET long_term=NOT long_term WHERE aid=?', (aid))
self.conn.commit() self.conn.commit()
def toggle_active(self, aid):
cursor = self.conn.cursor()
cursor.execute('UPDATE task SET active=NOT active WHERE aid=?', (aid))
self.conn.commit()
def toggle_done(self, aid): def toggle_done(self, aid):
cursor = self.conn.cursor() cursor = self.conn.cursor()
cursor.execute('UPDATE task SET done=NOT done, finished_at=DATETIME(\'now\') WHERE aid=?', (aid)) cursor.execute('UPDATE task SET done=NOT done, finished_at=DATETIME(\'now\'), active=0 WHERE aid=?', (aid))
self.conn.commit() self.conn.commit()
def create_tag(self, name): def create_tag(self, name):

18
params.py Normal file
View file

@ -0,0 +1,18 @@
class Params:
singleton = None
params = {
'active': False,
'done': False,
}
def __new__(cls, *args, **kwargs):
if not cls.singleton:
cls.singleton = object.__new__(Params)
return cls.singleton
def update(self, key, value):
self.params[key] = value
def get(self, key):
return self.params[key]

3
tag.py
View file

@ -3,7 +3,6 @@ import sys
from pyfzf.pyfzf import FzfPrompt from pyfzf.pyfzf import FzfPrompt
from model import Model from model import Model
from task import Task
from bcolors import bcolors from bcolors import bcolors
@ -33,7 +32,7 @@ class Tag:
self.manage_tag_menu(tid) self.manage_tag_menu(tid)
def manage_tag_menu(self, tid=None): def manage_tag_menu(self, tid=None):
menu = input(bcolors.OKBLUE + '~tag: ' + bcolors.OKGREEN + 'What you want to do? (?/+-<q) ' + bcolors.ENDC) menu = input(bcolors.OKBLUE + '~tag: ' + bcolors.OKGREEN + 'What you want to do? (?/+-&<q) ' + bcolors.ENDC)
if menu == 'q': if menu == 'q':
self.bye() self.bye()

20
task.py
View file

@ -62,10 +62,13 @@ Created: %s ''' % (task['aid'], task['description'], tags, long_term, task['
if task['done'] and task['done'] != 'FALSE': if task['done'] and task['done'] != 'FALSE':
print(bcolors.OKGREEN + 'Finished: ' + task['finished_at'] + bcolors.ENDC) print(bcolors.OKGREEN + 'Finished: ' + task['finished_at'] + bcolors.ENDC)
if task['active'] and task['active'] != 'FALSE':
print(bcolors.WARNING + 'ACTIVE' + bcolors.ENDC)
self.manage_task_menu(aid) self.manage_task_menu(aid)
def manage_task_menu(self, aid): def manage_task_menu(self, aid):
menu = input(bcolors.OKBLUE + '~task: ' + bcolors.OKGREEN + 'What you want to do? (?e*+-v&><q) ' + bcolors.ENDC) menu = input(bcolors.OKBLUE + '~task: ' + bcolors.OKGREEN + 'What you want to do? (?e*+-!v&><q) ' + bcolors.ENDC)
if menu == 'q': if menu == 'q':
self.bye() self.bye()
@ -85,6 +88,9 @@ Created: %s ''' % (task['aid'], task['description'], tags, long_term, task['
elif menu == '-': elif menu == '-':
self.remove_tags(aid) self.remove_tags(aid)
elif menu == '!':
self.toggle_active(aid)
elif menu == 'v': elif menu == 'v':
self.toggle_done(aid) self.toggle_done(aid)
@ -104,7 +110,9 @@ e - edit content
* - toggle long term * - toggle long term
+ - add tag + - add tag
- - remove tag - - remove tag
v - mark done/undone ! - toggle active
v - toggle done
x - delete task
& - add child task & - add child task
> - go to child > - go to child
< - back < - back
@ -131,6 +139,9 @@ Created: %s ''' % (task['aid'], tags, long_term, task['created_at'])
if task['done'] and task['done'] != 'FALSE': if task['done'] and task['done'] != 'FALSE':
content += '\nFinished: ' + task['finished_at'] content += '\nFinished: ' + task['finished_at']
if task['active'] and task['active'] != 'FALSE':
content += '\n**ACTIVE**'
content += '\n\n# ' + task['description'] content += '\n\n# ' + task['description']
if task['content']: if task['content']:
content += task['content'] content += task['content']
@ -167,6 +178,11 @@ Created: %s ''' % (task['aid'], tags, long_term, task['created_at'])
print(bcolors.OKBLUE + '[task has been updated]' + bcolors.ENDC) print(bcolors.OKBLUE + '[task has been updated]' + bcolors.ENDC)
self.manage_task(aid) self.manage_task(aid)
def toggle_active(self, aid):
self.model.toggle_active(aid)
print(bcolors.OKBLUE + '[task has been activated]' + bcolors.ENDC)
self.manage_task(aid)
def toggle_done(self, aid): def toggle_done(self, aid):
self.model.toggle_done(aid) self.model.toggle_done(aid)
print(bcolors.OKBLUE + '[task has been updated]' + bcolors.ENDC) print(bcolors.OKBLUE + '[task has been updated]' + bcolors.ENDC)

6
ztm.py
View file

@ -5,6 +5,7 @@ from pyfzf.pyfzf import FzfPrompt
from model import Model from model import Model
from task import Task from task import Task
from tag import Tag from tag import Tag
from config import Config
from bcolors import bcolors from bcolors import bcolors
@ -13,6 +14,7 @@ class Main:
self.model = Model() self.model = Model()
self.task = Task() self.task = Task()
self.tag = Tag() self.tag = Tag()
self.config = Config()
self.fzf = FzfPrompt() self.fzf = FzfPrompt()
def run(self): def run(self):
@ -51,6 +53,10 @@ Task manager from Zordsdavini (2018) ''' + bcolors.ENDC)
self.tag.manage_tag() self.tag.manage_tag()
self.menu() self.menu()
elif menu == 'c':
self.config.manage()
self.menu()
elif menu == 'q': elif menu == 'q':
self.bye() self.bye()