diff --git a/src/time_tracker/core/session_manager.py b/src/time_tracker/core/session_manager.py index 7f9b9c4..44e6c19 100644 --- a/src/time_tracker/core/session_manager.py +++ b/src/time_tracker/core/session_manager.py @@ -3,6 +3,7 @@ import os from datetime import datetime from typing import Dict, List, Optional from pathlib import Path +import time class SessionManager: @@ -11,17 +12,26 @@ class SessionManager: self.tasks_directory.mkdir(exist_ok=True) self.current_session: Optional[Dict] = None self.session_dirty = False + # Keep track of last session creation time to prevent duplicates + self._last_session_time = 0 def create_session(self, task_id: str, project_id: str) -> Dict: """ Create a new work session. """ - session_id = datetime.now().strftime("%Y%m%dT%H%M%S") + # Ensure unique session ID even if called rapidly + current_time = time.time() + if current_time <= self._last_session_time: + current_time = self._last_session_time + 0.001 # Add small increment + + self._last_session_time = current_time + session_id = datetime.fromtimestamp(current_time).strftime("%Y%m%dT%H%M%S%f")[:-3] # Include milliseconds + session = { "session_id": session_id, "task_id": task_id, "project_id": project_id, - "started_at": datetime.now().isoformat(), + "started_at": datetime.fromtimestamp(current_time).isoformat(), "duration_seconds": 0, "window_details": {}, "distractions": [], diff --git a/src/time_tracker/platform/windows.py b/src/time_tracker/platform/windows.py index f6f2842..e228b96 100644 --- a/src/time_tracker/platform/windows.py +++ b/src/time_tracker/platform/windows.py @@ -37,11 +37,19 @@ def register_session_listener(callback: Callable[[str], None]) -> None: except: pass # Already registered + # Corrected CreateWindow call with all required parameters hwnd = win32gui.CreateWindow( - wndclass.lpszClassName, - "Session Watcher", - 0, 0, 0, 0, 0, - 0, hinst, None + wndclass.lpszClassName, # lpClassName + "Session Watcher", # lpWindowName + 0, # dwStyle + 0, # x + 0, # y + 0, # nWidth + 0, # nHeight + 0, # hWndParent + 0, # hMenu + hinst, # hInstance + None # lParam ) # Register for session notifications