From 3dcdda27abb6f78bcd2c5fece085be2f04232de5 Mon Sep 17 00:00:00 2001 From: Simon <9295182+grimsi@users.noreply.github.com> Date: Fri, 3 Nov 2023 13:43:48 +0100 Subject: [PATCH] Release 1.4.4 Fix library scanning by disabling multi-threading (#174) --- .../grimsi/gameyfin/service/ImageService.java | 63 +++++++++---------- .../gameyfin/service/LibraryService.java | 2 +- frontend/package-lock.json | 4 +- frontend/package.json | 2 +- 4 files changed, 35 insertions(+), 36 deletions(-) diff --git a/backend/src/main/java/de/grimsi/gameyfin/service/ImageService.java b/backend/src/main/java/de/grimsi/gameyfin/service/ImageService.java index 367891f..86696c6 100644 --- a/backend/src/main/java/de/grimsi/gameyfin/service/ImageService.java +++ b/backend/src/main/java/de/grimsi/gameyfin/service/ImageService.java @@ -96,44 +96,43 @@ public class ImageService { private int saveImagesIntoCache(MultiValueMap entityToImageIds, String imageSize, String imageType, String entityType) { AtomicInteger downloadCounter = new AtomicInteger(); - entityToImageIds.entrySet().parallelStream().forEach(entry -> - entry.getValue().forEach(imageId -> { + entityToImageIds.forEach((key, value) -> value.forEach(imageId -> { - if (!StringUtils.hasText(imageId)) return; + if (!StringUtils.hasText(imageId)) return; - String imgFileName = "%s.png".formatted(imageId); - String imgUrl = "t_%s/%s".formatted(imageSize, imgFileName); + String imgFileName = "%s.png".formatted(imageId); + String imgUrl = "t_%s/%s".formatted(imageSize, imgFileName); - if (filesystemService.doesCachedFileExist(imgFileName)) { - if (filesystemService.isCachedFileCorrupt(imgFileName)) { - log.info("File '{}' is corrupt, retrying download...", imgFileName); - filesystemService.deleteFileFromCache(imgFileName); - } else { - log.debug("{} for {} '{}' already downloaded ({}), skipping.", - imageType.substring(0, 1).toUpperCase() + imageType.substring(1).toLowerCase(), - entityType, - entry.getKey(), - imgFileName); - return; - } - } + if (filesystemService.doesCachedFileExist(imgFileName)) { + if (filesystemService.isCachedFileCorrupt(imgFileName)) { + log.info("File '{}' is corrupt, retrying download...", imgFileName); + filesystemService.deleteFileFromCache(imgFileName); + } else { + log.debug("{} for {} '{}' already downloaded ({}), skipping.", + imageType.substring(0, 1).toUpperCase() + imageType.substring(1).toLowerCase(), + entityType, + key, + imgFileName); + return; + } + } - Flux dataBuffer = igdbImageClient.get() - .uri(imgUrl) - .retrieve() - .bodyToFlux(DataBuffer.class); + Flux dataBuffer = igdbImageClient.get() + .uri(imgUrl) + .retrieve() + .bodyToFlux(DataBuffer.class); - try { - filesystemService.saveFileToCache(dataBuffer, imgFileName); - } catch (WebClientResponseException e) { - if (e.getStatusCode().is4xxClientError()) { - log.error("Could not download {} for {} '{}' from {}: {}", imageType, entityType, entry.getKey(), IgdbApiProperties.IMAGES_BASE_URL + imgUrl, e.getStatusCode()); - } - } + try { + filesystemService.saveFileToCache(dataBuffer, imgFileName); + } catch (WebClientResponseException e) { + if (e.getStatusCode().is4xxClientError()) { + log.error("Could not download {} for {} '{}' from {}: {}", imageType, entityType, key, IgdbApiProperties.IMAGES_BASE_URL + imgUrl, e.getStatusCode()); + } + } - downloadCounter.getAndIncrement(); - log.info("Downloaded {} for {} '{}' from {}", imageType, entityType, entry.getKey(), IgdbApiProperties.IMAGES_BASE_URL + imgUrl); - })); + downloadCounter.getAndIncrement(); + log.info("Downloaded {} for {} '{}' from {}", imageType, entityType, key, IgdbApiProperties.IMAGES_BASE_URL + imgUrl); + })); return downloadCounter.get(); } diff --git a/backend/src/main/java/de/grimsi/gameyfin/service/LibraryService.java b/backend/src/main/java/de/grimsi/gameyfin/service/LibraryService.java index 4f9f3c6..6134e18 100644 --- a/backend/src/main/java/de/grimsi/gameyfin/service/LibraryService.java +++ b/backend/src/main/java/de/grimsi/gameyfin/service/LibraryService.java @@ -136,7 +136,7 @@ public class LibraryService { // For each new game, load the info from IGDB // If a game is not found on IGDB, add it to the list of unmapped files, so we won't query the API later on for the same path // If a game is not found on IGDB, blacklist the path, so we won't query the API later for the same path - List newDetectedGames = gameFiles.parallelStream() + List newDetectedGames = gameFiles.stream() .map(p -> { Optional optionalGame = igdbWrapper.searchForGameByTitle(getFilenameWithoutAdditions(p), platformsFilter); diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 3986953..31c58e0 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "frontend", - "version": "1.4.2-SNAPSHOT", + "version": "1.4.4-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "frontend", - "version": "1.4.2-SNAPSHOT", + "version": "1.4.4-SNAPSHOT", "dependencies": { "@angular/animations": "^16.2.8", "@angular/cdk": "^16.2.7", diff --git a/frontend/package.json b/frontend/package.json index be29add..00bb2e3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "frontend", - "version": "1.4.2-SNAPSHOT", + "version": "1.4.4-SNAPSHOT", "scripts": { "ng": "ng", "start": "ng serve",