diff --git a/backend/handler/database/stats_handler.py b/backend/handler/database/stats_handler.py
index 18a2b8916..0276fa2e9 100644
--- a/backend/handler/database/stats_handler.py
+++ b/backend/handler/database/stats_handler.py
@@ -10,6 +10,20 @@ from models.rom import Rom, RomFile
from .base_handler import DBBaseHandler
+# Metadata source columns on the Rom model, keyed by source identifier.
+_METADATA_SOURCE_COLUMNS: dict[str, InstrumentedAttribute] = {
+ "igdb": Rom.igdb_id,
+ "ss": Rom.ss_id,
+ "moby": Rom.moby_id,
+ "launchbox": Rom.launchbox_id,
+ "ra": Rom.ra_id,
+ "hasheous": Rom.hasheous_id,
+ "tgdb": Rom.tgdb_id,
+ "flashpoint": Rom.flashpoint_id,
+ "hltb": Rom.hltb_id,
+ "gamelist": Rom.gamelist_id,
+}
+
class DBStatsHandler(DBBaseHandler):
@begin_session
@@ -83,20 +97,6 @@ class DBStatsHandler(DBBaseHandler):
or 0
)
- # Metadata source columns on the Rom model, keyed by source identifier.
- METADATA_SOURCE_COLUMNS: dict[str, "InstrumentedAttribute"] = {
- "igdb": Rom.igdb_id,
- "ss": Rom.ss_id,
- "moby": Rom.moby_id,
- "launchbox": Rom.launchbox_id,
- "ra": Rom.ra_id,
- "hasheous": Rom.hasheous_id,
- "tgdb": Rom.tgdb_id,
- "flashpoint": Rom.flashpoint_id,
- "hltb": Rom.hltb_id,
- "gamelist": Rom.gamelist_id,
- }
-
@begin_session
def get_metadata_coverage_by_platform(
self,
@@ -108,7 +108,7 @@ class DBStatsHandler(DBBaseHandler):
Rom.platform_id,
*(
func.count(col).label(key)
- for key, col in self.METADATA_SOURCE_COLUMNS.items()
+ for key, col in _METADATA_SOURCE_COLUMNS.items()
),
)
.select_from(Rom)
@@ -119,7 +119,7 @@ class DBStatsHandler(DBBaseHandler):
for row in rows:
result[row.platform_id] = [
{"source": key, "matched": getattr(row, key)}
- for key in self.METADATA_SOURCE_COLUMNS
+ for key in _METADATA_SOURCE_COLUMNS
if getattr(row, key) > 0
]
return result
diff --git a/frontend/src/components/Settings/ServerStats/PlatformsStats.vue b/frontend/src/components/Settings/ServerStats/PlatformsStats.vue
index b2bced2f4..8f5daf51a 100644
--- a/frontend/src/components/Settings/ServerStats/PlatformsStats.vue
+++ b/frontend/src/components/Settings/ServerStats/PlatformsStats.vue
@@ -23,14 +23,14 @@ const orderBy = ref<"name" | "size" | "count">("name");
const sortedPlatforms = computed(() => {
if (orderBy.value === "size") {
- return allPlatforms.value.sort(
+ return [...allPlatforms.value].sort(
(a, b) => Number(b.fs_size_bytes) - Number(a.fs_size_bytes),
);
}
if (orderBy.value === "count") {
- return allPlatforms.value.sort((a, b) => b.rom_count - a.rom_count);
+ return [...allPlatforms.value].sort((a, b) => b.rom_count - a.rom_count);
}
- return allPlatforms.value.sort((a, b) =>
+ return [...allPlatforms.value].sort((a, b) =>
a.display_name.localeCompare(b.display_name, undefined, {
sensitivity: "base",
}),
@@ -217,7 +217,7 @@ function getCoveragePercent(matched: number, total: number): string {
size="12"
rounded
>
-
+
{{ getCoveragePercent(item.matched, platform.rom_count) }}%