import sqlite3 from typing import Dict DB_FILE = "dereth.db" def init_db() -> None: """Create tables if they do not exist (extended with kills_per_hour and onlinetime).""" conn = sqlite3.connect(DB_FILE) c = conn.cursor() # History log c.execute( """ CREATE TABLE IF NOT EXISTS telemetry_log ( id INTEGER PRIMARY KEY AUTOINCREMENT, character_name TEXT NOT NULL, char_tag TEXT, session_id TEXT NOT NULL, timestamp TEXT NOT NULL, ew REAL, ns REAL, z REAL, kills INTEGER, kills_per_hour TEXT, onlinetime TEXT, deaths INTEGER, rares_found INTEGER, prismatic_taper_count INTEGER, vt_state TEXT ) """ ) # Live snapshot (upsert) c.execute( """ CREATE TABLE IF NOT EXISTS live_state ( character_name TEXT PRIMARY KEY, char_tag TEXT, session_id TEXT, timestamp TEXT, ew REAL, ns REAL, z REAL, kills INTEGER, kills_per_hour TEXT, onlinetime TEXT, deaths INTEGER, rares_found INTEGER, prismatic_taper_count INTEGER, vt_state TEXT ) """ ) conn.commit() conn.close() def save_snapshot(data: Dict) -> None: """Insert snapshot into history and upsert into live_state (with new fields).""" conn = sqlite3.connect(DB_FILE) c = conn.cursor() # Insert full history row c.execute( """ INSERT INTO telemetry_log ( character_name, char_tag, session_id, timestamp, ew, ns, z, kills, kills_per_hour, onlinetime, deaths, rares_found, prismatic_taper_count, vt_state ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """, ( data["character_name"], data.get("char_tag", ""), data["session_id"], data["timestamp"], data["ew"], data["ns"], data.get("z", 0.0), data["kills"], data.get("kills_per_hour", ""), data.get("onlinetime", ""), data.get("deaths", 0), data.get("rares_found", 0), data.get("prismatic_taper_count", 0), data.get("vt_state", "Unknown"), ), ) # Upsert into live_state c.execute( """ INSERT INTO live_state ( character_name, char_tag, session_id, timestamp, ew, ns, z, kills, kills_per_hour, onlinetime, deaths, rares_found, prismatic_taper_count, vt_state ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(character_name) DO UPDATE SET char_tag = excluded.char_tag, session_id = excluded.session_id, timestamp = excluded.timestamp, ew = excluded.ew, ns = excluded.ns, z = excluded.z, kills = excluded.kills, kills_per_hour = excluded.kills_per_hour, onlinetime = excluded.onlinetime, deaths = excluded.deaths, rares_found = excluded.rares_found, prismatic_taper_count = excluded.prismatic_taper_count, vt_state = excluded.vt_state """, ( data["character_name"], data.get("char_tag", ""), data["session_id"], data["timestamp"], data["ew"], data["ns"], data.get("z", 0.0), data["kills"], data.get("kills_per_hour", ""), data.get("onlinetime", ""), data.get("deaths", 0), data.get("rares_found", 0), data.get("prismatic_taper_count", 0), data.get("vt_state", "Unknown"), ), ) conn.commit() conn.close()