From f759b0c94777116ed0ef41ed6b19b1af2e255b71 Mon Sep 17 00:00:00 2001 From: Simon <9295182+grimsi@users.noreply.github.com> Date: Fri, 18 Jul 2025 16:42:23 +0200 Subject: [PATCH] Implement "full" scan type (#633) --- .../general/ScanProgressPopover.tsx | 7 +- .../general/cards/LibraryOverviewCard.tsx | 15 +- .../org/gameyfin/app/games/GameEndpoint.kt | 10 +- .../org/gameyfin/app/games/GameService.kt | 210 ++++++++- .../gameyfin/app/games/entities/Company.kt | 8 +- .../org/gameyfin/app/games/entities/Game.kt | 2 +- .../app/games/entities/GameMetadata.kt | 4 +- .../org/gameyfin/app/games/entities/Image.kt | 8 +- .../app/libraries/LibraryCoreService.kt | 89 ++++ .../gameyfin/app/libraries/LibraryEndpoint.kt | 7 +- .../app/libraries/LibraryScanResult.kt | 35 +- .../app/libraries/LibraryScanService.kt | 437 ++++++++++++++++++ .../gameyfin/app/libraries/LibraryService.kt | 300 +----------- .../app/libraries/dto/LibraryScanProgress.kt | 2 + .../scan/CalculateFilesizesResult.kt | 7 + .../libraries/scan/DownloadImagesResult.kt | 7 + .../app/libraries/scan/FinishScanResult.kt | 7 + .../app/libraries/scan/MatchNewGamesResult.kt | 8 + .../scan/UpdateExistingGamesResult.kt | 7 + .../app/libraries/scan/UpdateLibraryResult.kt | 7 + 20 files changed, 857 insertions(+), 320 deletions(-) create mode 100644 app/src/main/kotlin/org/gameyfin/app/libraries/LibraryCoreService.kt create mode 100644 app/src/main/kotlin/org/gameyfin/app/libraries/LibraryScanService.kt create mode 100644 app/src/main/kotlin/org/gameyfin/app/libraries/scan/CalculateFilesizesResult.kt create mode 100644 app/src/main/kotlin/org/gameyfin/app/libraries/scan/DownloadImagesResult.kt create mode 100644 app/src/main/kotlin/org/gameyfin/app/libraries/scan/FinishScanResult.kt create mode 100644 app/src/main/kotlin/org/gameyfin/app/libraries/scan/MatchNewGamesResult.kt create mode 100644 app/src/main/kotlin/org/gameyfin/app/libraries/scan/UpdateExistingGamesResult.kt create mode 100644 app/src/main/kotlin/org/gameyfin/app/libraries/scan/UpdateLibraryResult.kt diff --git a/app/src/main/frontend/components/general/ScanProgressPopover.tsx b/app/src/main/frontend/components/general/ScanProgressPopover.tsx index 449cb4c..368b289 100644 --- a/app/src/main/frontend/components/general/ScanProgressPopover.tsx +++ b/app/src/main/frontend/components/general/ScanProgressPopover.tsx @@ -14,7 +14,7 @@ import {scanState} from "Frontend/state/ScanState"; import LibraryScanProgress from "Frontend/generated/org/gameyfin/app/libraries/dto/LibraryScanProgress"; import {libraryState} from "Frontend/state/LibraryState"; import {Target} from "@phosphor-icons/react"; -import {timeBetween, timeUntil} from "Frontend/util/utils"; +import {timeBetween, timeUntil, toTitleCase} from "Frontend/util/utils"; import LibraryScanStatus from "Frontend/generated/org/gameyfin/app/libraries/dto/LibraryScanStatus"; import {useEffect, useState} from "react"; @@ -50,7 +50,7 @@ export default function ScanProgressPopover() { -
+
{scans.length === 0 ?

No scans in progress or in history. @@ -60,7 +60,7 @@ export default function ScanProgressPopover() {

-

Scan for library  +

{toTitleCase(scan.type)} scan for library  {scan.result?.new} new /  + {(scan as any).result?.updated != null && `${(scan as any).result.updated} updated / `} {scan.result?.removed} removed /  {scan.result?.unmatched} unmatched  (in {timeBetween(scan.startedAt, scan.finishedAt!)}) diff --git a/app/src/main/frontend/components/general/cards/LibraryOverviewCard.tsx b/app/src/main/frontend/components/general/cards/LibraryOverviewCard.tsx index a773b31..8d550f9 100644 --- a/app/src/main/frontend/components/general/cards/LibraryOverviewCard.tsx +++ b/app/src/main/frontend/components/general/cards/LibraryOverviewCard.tsx @@ -4,7 +4,7 @@ import GameDto from "Frontend/generated/org/gameyfin/app/games/dto/GameDto"; import React from "react"; import {LibraryEndpoint} from "Frontend/generated/endpoints"; import {GameCover} from "Frontend/components/general/covers/GameCover"; -import {MagnifyingGlass, SlidersHorizontal} from "@phosphor-icons/react"; +import {MagnifyingGlass, MagnifyingGlassPlus, SlidersHorizontal} from "@phosphor-icons/react"; import ScanType from "Frontend/generated/org/gameyfin/app/libraries/enums/ScanType"; import {useNavigate} from "react-router"; import {useSnapshot} from "valtio/react"; @@ -27,8 +27,8 @@ export function LibraryOverviewCard({library}: LibraryOverviewCardProps) { return games.slice(0, MAX_COVER_COUNT); } - async function triggerScan() { - await LibraryEndpoint.triggerScan(ScanType.QUICK, [library]); + async function triggerScan(scanType: ScanType) { + await LibraryEndpoint.triggerScan(scanType, [library]); } return ( @@ -48,11 +48,16 @@ export function LibraryOverviewCard({library}: LibraryOverviewCardProps) {

{library.name}

- - + + +