From 8ad2527392fbe3fc69a1bca4fa093ace69f3289e Mon Sep 17 00:00:00 2001 From: hmj6502 Date: Fri, 19 Dec 2025 09:45:00 +0000 Subject: move countdown timer to seperate file --- main.py | 30 ++---------------------------- timers.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 28 deletions(-) create mode 100644 timers.py diff --git a/main.py b/main.py index 93c6a5d..bde6bf8 100644 --- a/main.py +++ b/main.py @@ -2,13 +2,10 @@ import pygal import csv import time import datetime -import datetime import hashlib from collections import OrderedDict -import termios -import tty -import sys import inputs +import timers import formatting as f print("welcome to lock-n-log, the best way to organise and analyse your focus time!") @@ -33,30 +30,7 @@ if option == 't': print("timer length (in minutes)? ", end="", flush=True) timer_length = inputs.get_pos_int() - time_left = timer_length - start = datetime.datetime.now() - end = start + datetime.timedelta(seconds=time_left) # change to mins in final - accum = 0 - timeout = 1/120 # 120Hz refresh - - old_settings = termios.tcgetattr(sys.stdin) - tty.setcbreak(sys.stdin.fileno()) - while True: - now = datetime.datetime.now() - time_left = end - now - if time_left.total_seconds() <= 0: - break - - ch = inputs.getch_nb(timeout) - if ch == 'q': - print("exited early!") - break - # see https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797 - print("\x1b[2K\r" + inputs.delta_to_HM(time_left), end="", flush=True) - accum += timeout - if accum >= 1: - accum = 0 - termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings) + time_left, start = timers.countdown(timer_length) print("\nfocus session finished!\nlogging...") session = OrderedDict() diff --git a/timers.py b/timers.py new file mode 100644 index 0000000..0141222 --- /dev/null +++ b/timers.py @@ -0,0 +1,32 @@ +import datetime +import sys, termios, tty +import inputs + +def countdown(length): + """countdown timer; length in seconds. returns start and time left (>0 if quit early)""" + time_left = length + start = datetime.datetime.now() + end = start + datetime.timedelta(seconds=time_left) # change to mins in final + accum = 0 + timeout = 1/120 # 120Hz refresh + + old_settings = termios.tcgetattr(sys.stdin) + tty.setcbreak(sys.stdin.fileno()) + while True: + now = datetime.datetime.now() + time_left = end - now + if time_left.total_seconds() <= 0: + break + + ch = inputs.getch_nb(timeout) + if ch == 'q': + print("\nexited early!") + break + # see https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797 + print("\x1b[2K\r" + inputs.delta_to_HM(time_left), end="", flush=True) + accum += timeout + if accum >= 1: + accum = 0 + termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings) + + return (time_left, start) -- cgit v1.2.3