feat: implement phases 3-5 of Arma 3 UX enhancement plan
Phase 3 - Mod display names + split-pane selector:
- Parse mod.cpp/meta.cpp for display_name and workshop_id
- Rewrite ModList as two-pane available/selected interface
Phase 4 - Player kick/ban from Players tab:
- Add get_by_slot() to PlayerRepository
- Add get_rcon_client() class method to ThreadRegistry
- Add /players/{slot_id}/kick and /ban endpoints
- Rewrite PlayerTable with kick/ban modals and ban presets
Phase 5 - Historical log file browser:
- Add list_log_files() and get_log_file_path() to RPTParser
- Add logfiles_router with GET/download/DELETE endpoints
- Update LogViewer with collapsible log files section (download + delete)
This commit is contained in:
@@ -43,6 +43,12 @@ class PlayerRepository(BaseRepository):
|
||||
},
|
||||
)
|
||||
|
||||
def get_by_slot(self, server_id: int, slot_id: int) -> dict | None:
|
||||
return self._fetchone(
|
||||
"SELECT * FROM players WHERE server_id = :sid AND slot_id = :slot",
|
||||
{"sid": server_id, "slot": str(slot_id)},
|
||||
)
|
||||
|
||||
def clear(self, server_id: int) -> None:
|
||||
self._execute("DELETE FROM players WHERE server_id = :sid", {"sid": server_id})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user