global params; default hidden done tasks; toggle active
This commit is contained in:
parent
02658555d7
commit
33b0e5c52a
6 changed files with 215 additions and 7 deletions
155
config.py
Normal file
155
config.py
Normal 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)
|
20
model.py
20
model.py
|
@ -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
18
params.py
Normal 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
3
tag.py
|
@ -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
20
task.py
|
@ -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
6
ztm.py
|
@ -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()
|
||||||
|
|
||||||
|
|
Reference in a new issue