Compare commits

...

3 commits

Author SHA1 Message Date
Chris (wolcen) Thompson
e8f7adc355 Seems there are problems with prompt on the same line (sometimes)
May well have to do with changes to my environment, but I'm not dealing w/that now
2024-11-19 13:31:34 -05:00
Chris (wolcen) Thompson
f908389c40 Add text entry history/editing/auto-complete
...and import utc directly
2024-11-19 10:59:14 -05:00
Chris (wolcen) Thompson
5c111e96f1 Add ability to use w/out GUI (via --no-gui)
And ring the console bell w/--noisy
2024-11-18 21:39:33 -05:00
2 changed files with 53 additions and 16 deletions

View file

@ -6,23 +6,39 @@ import prompt_window
import time
from datetime import datetime, timedelta
from pathlib import Path
from pytz import timezone
from pytz import timezone, utc
from prompt_toolkit import PromptSession
from prompt_toolkit.history import FileHistory
#from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
from prompt_toolkit.completion import WordCompleter
import pytz
session = PromptSession(history=FileHistory(os.path.expanduser('~/.pomodoro_history')))
# Move to a file:
words = WordCompleter(['NCHFA', 'PECE', 'Housing Works', 'Internal'])
#os.path.dirname(os.path.realpath(__file__))
#completion_list = WordCompleter(history=FileHistory(os.path.dirname(os.path.realpath(__file__)) + '.auto_complete'))
WORK_MIN = 25 # Minutes for a work session
SHORT_MIN = 5 # Minutes for a short break
LONG_MIN = 15 # Minutes for a long break (NOT YET IMPLEMENTED)
INTERRUPTED_MIN = 1 # Minimum minutes to ask to record an interrupted Pomodoro
QUIET = True
GUI = True
def pomodoro_prompt_plan(whatdid = ''):
""" Ask about what task will be worked on (showing last thing worked on)
"""
text = "What're you gonna do?"
text = "What're you gonna do? "
# NOTE: If we can do system notifications that when clicked will focus the terminal
# running pomodoro prompt, that might be even better than the pop-up GUI text entry.
if GUI:
whatnext = prompt_window.prompt(prompt=text, task=whatdid)
else:
whatnext = session.prompt(message = text + '\n',
default = whatdid or '',
vi_mode = True,
completer = words,
complete_while_typing = True).strip()
# Pressing cancel returns None, but we want to just treat it as an empty string.
if whatnext is None:
whatnext = ''
@ -31,8 +47,15 @@ def pomodoro_prompt_plan(whatdid = ''):
def pomodoro_prompt_report(whatnext):
""" Ask what task was completed, showing the last task claimed to be being worked on
"""
text = "What'd you do?"
text = "What'd you do? "
if GUI:
whatdid = prompt_window.prompt(prompt=text, task=whatnext)
else:
whatdid = session.prompt(message = text + '\n',
default = whatnext or '',
vi_mode = True,
completer = words,
complete_while_typing = True).strip()
# Pressing cancel returns None, but we want to just treat it as an empty string.
if whatdid is None:
whatdid = ''
@ -64,7 +87,7 @@ def record_task(whatnext, whatdid, start, end=None):
""" Record completed pomodoro to CSV
"""
if end is None:
end = datetime.now(pytz.utc)
end = datetime.now(utc)
filepath = prepare_file(start)
if not os.path.isfile(filepath):
@ -84,8 +107,8 @@ def str_minutes(time_diff):
def countdown_to(until):
""" Display a timer counting down to until
"""
while datetime.now(pytz.utc) <= until:
to_go = until-datetime.now(pytz.utc)
while datetime.now(utc) <= until:
to_go = until-datetime.now(utc)
print('\r', str_minutes(to_go), sep='', end='')
time.sleep(1)
@ -107,20 +130,33 @@ def prepare_file(utc_start, ext='csv', daily=False):
timelog_path += '.' + ext
return timelog_path
def bing():
if GUI:
from playsound import playsound
playsound('res/timesup.aac')
else:
sys.stdout.write('\a')
sys.stdout.flush()
def main():
whatdid = ''
global GUI, QUIET
if "--no-gui" in sys.argv:
GUI = False
if "--noisy" in sys.argv:
QUIET = False
while True:
whatnext = pomodoro_prompt_plan(whatdid)
start = datetime.now(pytz.utc)
start = datetime.now(utc)
end = start + timedelta(minutes=WORK_MIN)
log_step('Start with plan: ' + whatnext, start)
try:
print('Working on: ' + whatnext)
print('Working on: ' + (whatnext or "(...it must be a mystery)"))
countdown_to(end)
if not QUIET:
from playsound import playsound
playsound('res/timesup.aac')
bing()
whatdid = pomodoro_prompt_report(whatnext)
record_task(whatnext, whatdid, start)
log_step('Completed pomodoro: ' + whatdid, start, True)
@ -129,16 +165,16 @@ def main():
print('Break time!')
# We're taking a break. Clear out task start/end times.
start = None
end = datetime.now(pytz.utc) + timedelta(minutes=SHORT_MIN)
end = datetime.now(utc) + timedelta(minutes=SHORT_MIN)
countdown_to(end)
if not QUIET:
playsound('res/timesup.aac')
bing()
continue
except KeyboardInterrupt:
if start is None:
quit_prompt()
continue
time_spent = datetime.now(pytz.utc) - start
time_spent = datetime.now(utc) - start
if time_spent < timedelta(minutes=INTERRUPTED_MIN):
quit_prompt()
continue

View file

@ -11,6 +11,7 @@ in pkgs.mkShell {
pycairo
pytz
tzlocal
prompt-toolkit # for text entry history/auto complete
# For Qt:
# pyside6
# Using GTK: