Add total library count to report stats
Show "Games in Library" stat alongside "Games Played" and "Total Playtime". Games with zero or null playtime are excluded from tables and charts but now counted in the library total. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -254,6 +254,10 @@ HTML_TEMPLATE = """<!DOCTYPE html>
|
|||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="stats">
|
<div class="stats">
|
||||||
|
<div class="stat">
|
||||||
|
<div class="stat-value" id="total-library">__TOTAL_LIBRARY__</div>
|
||||||
|
<div class="stat-label">Games in Library</div>
|
||||||
|
</div>
|
||||||
<div class="stat">
|
<div class="stat">
|
||||||
<div class="stat-value" id="total-games">0</div>
|
<div class="stat-value" id="total-games">0</div>
|
||||||
<div class="stat-label">Games Played</div>
|
<div class="stat-label">Games Played</div>
|
||||||
@@ -564,12 +568,16 @@ HTML_TEMPLATE = """<!DOCTYPE html>
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def get_all_games(db_path: str) -> list[dict]:
|
def get_all_games(db_path: str) -> tuple[list[dict], int]:
|
||||||
"""Query the database and return all games with playtime and categories."""
|
"""Query the database and return all games with playtime and categories, plus total library count."""
|
||||||
conn = sqlite3.connect(db_path)
|
conn = sqlite3.connect(db_path)
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
|
|
||||||
# Get games with playtime
|
# Get total games in library
|
||||||
|
cursor.execute("SELECT COUNT(*) FROM games")
|
||||||
|
total_library = cursor.fetchone()[0]
|
||||||
|
|
||||||
|
# Get games with playtime > 0
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
SELECT id, name, playtime, COALESCE(service, 'local') as service
|
SELECT id, name, playtime, COALESCE(service, 'local') as service
|
||||||
FROM games
|
FROM games
|
||||||
@@ -594,7 +602,7 @@ def get_all_games(db_path: str) -> list[dict]:
|
|||||||
game_categories[game_id] = []
|
game_categories[game_id] = []
|
||||||
game_categories[game_id].append(category)
|
game_categories[game_id].append(category)
|
||||||
|
|
||||||
return [
|
games = [
|
||||||
{
|
{
|
||||||
"name": row[1],
|
"name": row[1],
|
||||||
"playtime": row[2],
|
"playtime": row[2],
|
||||||
@@ -603,11 +611,12 @@ def get_all_games(db_path: str) -> list[dict]:
|
|||||||
}
|
}
|
||||||
for row in games_rows
|
for row in games_rows
|
||||||
]
|
]
|
||||||
|
return games, total_library
|
||||||
|
|
||||||
|
|
||||||
def generate_report(db_path: str, output_path: str, top_n: int, bg_image_path: str = None) -> None:
|
def generate_report(db_path: str, output_path: str, top_n: int, bg_image_path: str = None) -> None:
|
||||||
"""Generate the HTML report."""
|
"""Generate the HTML report."""
|
||||||
all_games = get_all_games(db_path)
|
all_games, total_library = get_all_games(db_path)
|
||||||
|
|
||||||
if not all_games:
|
if not all_games:
|
||||||
print("No games with playtime found in the database.")
|
print("No games with playtime found in the database.")
|
||||||
@@ -625,10 +634,12 @@ def generate_report(db_path: str, output_path: str, top_n: int, bg_image_path: s
|
|||||||
|
|
||||||
html = HTML_TEMPLATE.replace("__ALL_GAMES__", json.dumps(all_games))
|
html = HTML_TEMPLATE.replace("__ALL_GAMES__", json.dumps(all_games))
|
||||||
html = html.replace("__TOP_N__", str(top_n))
|
html = html.replace("__TOP_N__", str(top_n))
|
||||||
|
html = html.replace("__TOTAL_LIBRARY__", str(total_library))
|
||||||
html = html.replace("__BACKGROUND_IMAGE__", bg_data_url)
|
html = html.replace("__BACKGROUND_IMAGE__", bg_data_url)
|
||||||
|
|
||||||
Path(output_path).write_text(html, encoding="utf-8")
|
Path(output_path).write_text(html, encoding="utf-8")
|
||||||
print(f"Report generated: {output_path}")
|
print(f"Report generated: {output_path}")
|
||||||
|
print(f"Total games in library: {total_library}")
|
||||||
print(f"Total games with playtime: {total_games}")
|
print(f"Total games with playtime: {total_games}")
|
||||||
print(f"Total playtime: {total_playtime:.1f} hours")
|
print(f"Total playtime: {total_playtime:.1f} hours")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user