the logical part is almost complete

This commit is contained in:
2026-06-09 22:36:05 +03:00
parent 28e1bf09c0
commit 7627d01425

102
main.py
View File

@@ -1,4 +1,8 @@
import tkinter as tk import tkinter as tk
import os
from datetime import datetime
STORAGE_PATH = os.path.expanduser("~/.config/focus-timer/data.txt")
STATE_IDLE = "IDLE" STATE_IDLE = "IDLE"
STATE_FOCUS = "FOCUS" STATE_FOCUS = "FOCUS"
@@ -21,8 +25,6 @@ app.minsize(width, height)
app.maxsize(width, height) app.maxsize(width, height)
app.resizable(False, False) app.resizable(False, False)
timer_label = tk.Label(app, text="hh:mm:ss",fg="#C8ACD6",background="#17153B",font=("Helvetica", 25) , anchor="center")
timer_label.pack(expand=True,fill="y")
def tick(): def tick():
global seconds_left, current_state global seconds_left, current_state
@@ -45,10 +47,10 @@ def tick():
def update_timer_label(): def update_timer_label():
global seconds_left global seconds_left
mins, secs = divmod(seconds_left, 60) mins, secs = divmod(seconds_left, 60)
time_label.config(text=f"{mins}:{secs}") timer_label.config(text=f"{mins}:{secs}")
def handle_transition(): def handle_transition():
global current_state, seconds_left, focus_attempts global current_state, seconds_left, distraction
match current_state: match current_state:
case "FOCUS": case "FOCUS":
@@ -64,15 +66,18 @@ def handle_transition():
current_state = STATE_IDLE current_state = STATE_IDLE
seconds_left = 0 seconds_left = 0
def start_button(): update_ui()
def start_button_f():
global current_state, seconds_left, distractions global current_state, seconds_left, distractions
distractions = 0 distractions = 0
current_state = STATE_FOCUS current_state = STATE_FOCUS
seconds_left = 0 seconds_left = 1200
tick() tick()
update_ui()
def distracted_button(): def distracted_button_f():
global current_state, seconds_left, distractions global current_state, seconds_left, distractions
if current_state != STATE_FOCUS: if current_state != STATE_FOCUS:
@@ -87,11 +92,92 @@ def distracted_button():
update_timer_label() update_timer_label()
def break_button(): def break_button_f():
global current_state, seconds_left global current_state, seconds_left
current_state = STATE_BREAK current_state = STATE_BREAK
seconds_left = 1500 seconds_left = 1500
update_timer_label() update_timer_label()
update_ui()
def complete_task_button_f():
create_post()
break_button_f()
def create_post():
os.makedirs(os.path.dirname(STORAGE_PATH), exist_ok=True)
history = {}
if os.path.exists(STORAGE_PATH):
with open(STORAGE_PATH, "r", encoding="utf-8") as f:
for line in f:
line = line.strip()
if " : " in line and line.endswith(" cycles."):
date_part, cycles_part = line.split(" : ", maxsplit=1)
count = int(cycles_part.replace(" cycles.", ""))
history[date_part] = count
date = datetime.now().strftime("%Y-%m-%d")
if date in history:
history[date] += 1
else:
history[date] = 1
with open(STORAGE_PATH, "w", encoding="utf-8") as f:
for dates, counts in history.items():
f.write(f"{dates} : {counts} cycles.\n")
def update_ui():
global current_state
start_button.pack_forget()
distracted_button.pack_forget()
complete_task_button.pack_forget()
break_button.pack_forget()
match current_state:
case "IDLE":
text_label.config(text="Wanna start?")
timer_label.config(text="00:20:00")
start_button.pack(side="bottom",pady="15")
case "FOCUS":
text_label.config(text="Time to focus!")
timer_label.config()
distracted_button.pack(side="bottom", pady="15")
case "WORK":
text_label.config(text="Work.")
timer_label.config()
complete_task_button.pack(side="bottom", pady="15")
case "OVERTIME":
text_label.config(text="Maybe a break?")
timer_label.config()
break_button.pack(side="bottom", pady="15")
case "BREAK":
text_label.config(text="Relax..")
timer_label.config()
start_button.pack(side="bottom", pady="15")
text_label = tk.Label(app, text="", font=("Helvetica", 14))
text_label.pack(side="top", pady="15")
timer_label = tk.Label(app, text="hh:mm:ss",fg="#C8ACD6",background="#17153B",font=("Helvetica", 25) , anchor="center")
timer_label.pack(expand=True,fill="y")
start_button = tk.Button(app, text="Start.", command=start_button_f)
distracted_button = tk.Button(app, text="I got distracted.", command=distracted_button_f)
complete_task_button = tk.Button(app, text="Complete the task.", command=complete_task_button_f)
break_button = tk.Button(app, text="Go break :3", command=break_button_f)
update_ui()
app.mainloop() app.mainloop()