import time
import sqlite3
import psutil
import win32gui
from datetime import datetime
DB_NAME = "time_tracker.db"
CHECK_INTERVAL = 1 # seconds
# ----------------------------------------
# Database Setup
# ----------------------------------------
def init_db():
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS app_usage (
id INTEGER PRIMARY KEY AUTOINCREMENT,
app_name TEXT,
window_title TEXT,
start_time TEXT,
end_time TEXT,
duration REAL
)
""")
conn.commit()
conn.close()
# ----------------------------------------
# Get Active Window Info
# ----------------------------------------
def get_active_window():
hwnd = win32gui.GetForegroundWindow()
window_title = win32gui.GetWindowText(hwnd)
try:
pid = win32gui.GetWindowThreadProcessId(hwnd)[1]
process = psutil.Process(pid)
app_name = process.name()
except:
app_name = "Unknown"
return app_name, window_title
# ----------------------------------------
# Save Session
# ----------------------------------------
def save_session(app_name, window_title, start_time, end_time):
duration = (end_time - start_time).total_seconds()
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute("""
INSERT INTO app_usage (app_name, window_title, start_time, end_time, duration)
VALUES (?, ?, ?, ?, ?)
""", (
app_name,
window_title,
start_time.strftime("%Y-%m-%d %H:%M:%S"),
end_time.strftime("%Y-%m-%d %H:%M:%S"),
duration
))
conn.commit()
conn.close()
# ----------------------------------------
# Tracking Loop
# ----------------------------------------
def track_time():
print("🗂 Project Time Tracker Started (Press Ctrl+C to stop)\n")
current_app, current_title = get_active_window()
start_time = datetime.now()
try:
while True:
time.sleep(CHECK_INTERVAL)
new_app, new_title = get_active_window()
if new_app != current_app or new_title != current_title:
end_time = datetime.now()
save_session(current_app, current_title, start_time, end_time)
current_app, current_title = new_app, new_title
start_time = datetime.now()
except KeyboardInterrupt:
print("\nStopping tracker...")
end_time = datetime.now()
save_session(current_app, current_title, start_time, end_time)
print("Session saved.")
# ----------------------------------------
# Summary Report
# ----------------------------------------
def show_summary():
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute("""
SELECT app_name, SUM(duration)/60 as total_minutes
FROM app_usage
GROUP BY app_name
ORDER BY total_minutes DESC
""")
results = cursor.fetchall()
conn.close()
print("\n Time Usage Summary (Minutes):\n")
for app, minutes in results:
print(f"{app:20} {minutes:.2f} min")
# ----------------------------------------
# MAIN
# ----------------------------------------
if __name__ == "__main__":
init_db()
print("1. Start Tracking")
print("2. Show Summary")
choice = input("Choose option: ").strip()
if choice == "1":
track_time()
elif choice == "2":
show_summary()
else:
print("Invalid choice.")
No comments:
Post a Comment