diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 033df5fb..00000000
--- a/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.venv
-__pycache__
diff --git a/generate_data.py b/generate_data.py
deleted file mode 100644
index fdbbfd1a..00000000
--- a/generate_data.py
+++ /dev/null
@@ -1,45 +0,0 @@
-import httpx
-from datetime import datetime, timedelta, timezone
-from time import sleep
-from main import TelemetrySnapshot
-
-
-def main() -> None:
- wait = 10
- online_time = 24 * 3600 # start at 1 day
- ew = 0
- ns = 0
- while True:
- snapshot = TelemetrySnapshot(
- character_name="Test name",
- char_tag="test_tag",
- session_id="test_session_id",
- timestamp=datetime.now(tz=timezone.utc),
- ew=ew,
- ns=ns,
- z=0,
- kills=0,
- kills_per_hour="kph_str",
- onlinetime=str(timedelta(seconds=online_time)),
- deaths=0,
- rares_found=0,
- prismatic_taper_count=0,
- vt_state="test state",
- )
- resp = httpx.post(
- "http://localhost:8000/position/",
- data=snapshot.model_dump_json(),
- headers={
- "Content-Type": "application/json",
- "X-PLUGIN-SECRET": "your_shared_secret",
- },
- )
- print(resp)
- sleep(wait)
- ew += 0.1
- ns += 0.1
- online_time += wait
-
-
-if __name__ == "__main__":
- main()
diff --git a/main.py b/main.py
index fdb48928..0892dcd8 100644
--- a/main.py
+++ b/main.py
@@ -3,7 +3,7 @@ import json
import sqlite3
from typing import Dict
-from fastapi import FastAPI, Header, HTTPException, Query, WebSocket, WebSocketDisconnect
+from fastapi import FastAPI, Header, HTTPException, Query
from fastapi.responses import JSONResponse
from fastapi.routing import APIRoute
from fastapi.staticfiles import StaticFiles
@@ -11,8 +11,6 @@ from pydantic import BaseModel
from typing import Optional
from db import init_db, save_snapshot, DB_FILE
-import asyncio
-from starlette.concurrency import run_in_threadpool
# ------------------------------------------------------------------
app = FastAPI()
@@ -196,42 +194,6 @@ def get_trails(
]
return JSONResponse(content={"trails": trails})
-# -------------------- WebSocket endpoints -----------------------
-browser_conns: set[WebSocket] = set()
-
-async def _broadcast_to_browser_clients(snapshot: dict):
- for ws in list(browser_conns):
- try:
- await ws.send_json(snapshot)
- except WebSocketDisconnect:
- browser_conns.remove(ws)
-
-@app.websocket("/ws/position")
-async def ws_receive_snapshots(websocket: WebSocket, secret: str = Query(...)):
- await websocket.accept()
- if secret != SHARED_SECRET:
- await websocket.close(code=1008)
- return
- try:
- while True:
- data = await websocket.receive_json()
- snap = TelemetrySnapshot.parse_obj(data)
- live_snapshots[snap.character_name] = snap.dict()
- await run_in_threadpool(save_snapshot, snap.dict())
- await _broadcast_to_browser_clients(snap.dict())
- except WebSocketDisconnect:
- pass
-
-@app.websocket("/ws/live")
-async def ws_live_updates(websocket: WebSocket):
- await websocket.accept()
- browser_conns.add(websocket)
- try:
- while True:
- await asyncio.sleep(3600)
- except WebSocketDisconnect:
- browser_conns.remove(websocket)
-
# -------------------- static frontend ---------------------------
app.mount("/", StaticFiles(directory="static", html=True), name="static")
diff --git a/static/script.js b/static/script.js
index bfe94b72..0b6b9aff 100644
--- a/static/script.js
+++ b/static/script.js
@@ -209,8 +209,6 @@ function render(players) {
${p.kills_per_hour}
${p.rares_found}
${p.vt_state}
- ${p.onlinetime}
- ${p.deaths}
`;
li.addEventListener('click', () => selectPlayer(p, x, y));
diff --git a/static/style.css b/static/style.css
index b6a7286d..031a41be 100644
--- a/static/style.css
+++ b/static/style.css
@@ -156,12 +156,11 @@ body {
#playerList li {
display: grid;
grid-template-columns: 1fr auto;
- grid-template-rows: auto auto auto auto;
+ grid-template-rows: auto auto auto;
grid-template-areas:
"name loc"
"kills kph"
- "rares meta"
- "onlinetime deaths";
+ "rares meta";
gap: 4px 8px;
margin: 6px 0;
padding: 8px 10px;
@@ -179,8 +178,6 @@ body {
.stat.kph { grid-area: kph; }
.stat.rares { grid-area: rares; }
.stat.meta { grid-area: meta; }
-.stat.onlinetime { grid-area: onlinetime; }
-.stat.deaths { grid-area: deaths; }
/* pill styling */
#playerList li .stat {
@@ -201,8 +198,6 @@ body {
background: var(--accent);
color: #111;
}
-.stat.onlinetime::before { content: "🕑 "}
-.stat.deaths::before { content: "💀 "}
/* hover & selected states */
#playerList li:hover { background: var(--card-hov); }