initial 2
This commit is contained in:
58
src/time_tracker/app.py
Normal file
58
src/time_tracker/app.py
Normal file
@@ -0,0 +1,58 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
from .models import TrackerConfig, TrackedTask
|
||||
from .utils import get_platform, ensure_dir
|
||||
from .ui.overlay import OverlayWindow
|
||||
|
||||
|
||||
class Application:
|
||||
def __init__(self):
|
||||
self.config_path = Path("config.json")
|
||||
self.tasks_dir = Path("tasks")
|
||||
self.config: TrackerConfig = self._load_or_create_config()
|
||||
self.current_task: Optional[TrackedTask] = None
|
||||
self.platform = get_platform()
|
||||
|
||||
# Загружаем текущую задачу, если указан ID
|
||||
if self.config.current_task_id:
|
||||
self.current_task = self._load_task(self.config.current_task_id)
|
||||
|
||||
# Создаём директорию для задач, если нужно
|
||||
ensure_dir(self.tasks_dir)
|
||||
|
||||
def _load_or_create_config(self) -> TrackerConfig:
|
||||
if self.config_path.exists():
|
||||
with open(self.config_path, "r", encoding="utf-8") as f:
|
||||
data = json.load(f)
|
||||
return TrackerConfig.model_validate(data)
|
||||
else:
|
||||
config = TrackerConfig()
|
||||
self._save_config(config)
|
||||
return config
|
||||
|
||||
def _save_config(self, config: TrackerConfig) -> None:
|
||||
with open(self.config_path, "w", encoding="utf-8") as f:
|
||||
f.write(config.model_dump_json(indent=2))
|
||||
|
||||
def _load_task(self, task_id: str) -> Optional[TrackedTask]:
|
||||
task_file = self.tasks_dir / f"{task_id}.json"
|
||||
if task_file.exists():
|
||||
try:
|
||||
with open(task_file, "r", encoding="utf-8") as f:
|
||||
data = json.load(f)
|
||||
return TrackedTask.model_validate(data)
|
||||
except Exception:
|
||||
return None
|
||||
return None
|
||||
|
||||
def save_task(self, task: TrackedTask) -> None:
|
||||
task_file = self.tasks_dir / f"{task.task_id}.json"
|
||||
with open(task_file, "w", encoding="utf-8") as f:
|
||||
f.write(task.model_dump_json(indent=2))
|
||||
|
||||
def run(self):
|
||||
# Пока просто запускаем UI
|
||||
# Позже сюда добавим трекинг в фоне
|
||||
overlay = OverlayWindow()
|
||||
overlay.run()
|
||||
Reference in New Issue
Block a user