diff --git a/pom.xml b/pom.xml
index 8930416..00d0948 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,6 +36,13 @@
spring-boot-starter-webflux
+
+
+ org.springdoc
+ springdoc-openapi-ui
+ 1.6.9
+
+
io.github.resilience4j
diff --git a/src/main/java/de/grimsi/gameyfin/rest/LibraryController.java b/src/main/java/de/grimsi/gameyfin/rest/LibraryController.java
index de788a6..ac1a41a 100644
--- a/src/main/java/de/grimsi/gameyfin/rest/LibraryController.java
+++ b/src/main/java/de/grimsi/gameyfin/rest/LibraryController.java
@@ -2,7 +2,6 @@ package de.grimsi.gameyfin.rest;
import de.grimsi.gameyfin.service.FilesystemService;
import lombok.RequiredArgsConstructor;
-import org.springframework.data.repository.query.Param;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -23,14 +22,14 @@ public class LibraryController {
private final FilesystemService filesystemService;
@GetMapping(value = "/scan", produces = MediaType.APPLICATION_JSON_VALUE)
- public void scanLibrary(@RequestParam("download_images") boolean downloadImages) {
+ public void scanLibrary(@RequestParam(value = "download_images", defaultValue = "true") boolean downloadImages) {
filesystemService.scanGameLibrary();
- if(downloadImages) populateCache();
+ if(downloadImages) downloadImages();
}
- @GetMapping(value = "/populate-cache")
- public void populateCache() {
+ @GetMapping(value = "/download_images")
+ public void downloadImages() {
filesystemService.downloadGameCovers();
filesystemService.downloadGameScreenshots();
filesystemService.downloadCompanyLogos();
diff --git a/src/main/java/de/grimsi/gameyfin/service/FilesystemService.java b/src/main/java/de/grimsi/gameyfin/service/FilesystemService.java
index 48be200..152de0a 100644
--- a/src/main/java/de/grimsi/gameyfin/service/FilesystemService.java
+++ b/src/main/java/de/grimsi/gameyfin/service/FilesystemService.java
@@ -7,7 +7,6 @@ import de.grimsi.gameyfin.entities.UnmappableFile;
import de.grimsi.gameyfin.igdb.IgdbApiProperties;
import de.grimsi.gameyfin.igdb.IgdbWrapper;
import de.grimsi.gameyfin.mapper.GameMapper;
-import de.grimsi.gameyfin.repositories.CompanyRepository;
import de.grimsi.gameyfin.repositories.DetectedGameRepository;
import de.grimsi.gameyfin.repositories.UnmappableFileRepository;
import lombok.extern.slf4j.Slf4j;
@@ -29,6 +28,7 @@ import org.springframework.web.reactive.function.client.WebClientResponseExcepti
import org.springframework.web.server.ResponseStatusException;
import reactor.core.publisher.Flux;
+import javax.annotation.PostConstruct;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -64,7 +64,14 @@ public class FilesystemService {
@Autowired
private UnmappableFileRepository unmappableFileRepository;
- private WebClient igdbImageClient = WebClient.create(IgdbApiProperties.IMAGES_BASE_URL);
+ @Autowired
+ private WebClient.Builder webclientBuilder;
+ private WebClient igdbImageClient;
+
+ @PostConstruct
+ public void init() {
+ igdbImageClient = webclientBuilder.baseUrl(IgdbApiProperties.IMAGES_BASE_URL).build();
+ }
public List getGameFiles() {
@@ -141,11 +148,11 @@ public class FilesystemService {
log.info("Starting game cover download...");
stopWatch.start();
- MultiValueMap multiValueMap = new LinkedMultiValueMap<>(
+ MultiValueMap gameToImageIds = new LinkedMultiValueMap<>(
detectedGameRepository.findAll().stream()
.collect(Collectors.toMap(DetectedGame::getTitle, g -> Collections.singletonList(g.getCoverId()))));
- int downloadCount = downloadImagesIntoCache(multiValueMap, IgdbApiProperties.COVER_IMAGE_SIZE, "cover", "game");
+ int downloadCount = downloadImagesIntoCache(gameToImageIds, IgdbApiProperties.COVER_IMAGE_SIZE, "cover", "game");
stopWatch.stop();
@@ -175,13 +182,13 @@ public class FilesystemService {
log.info("Starting company logo download...");
stopWatch.start();
- Map> test = detectedGameRepository.findAll().stream()
+ Map> companyToLogoIdMap = detectedGameRepository.findAll().stream()
.flatMap(g -> g.getCompanies().stream())
.collect(Collectors.toMap(Company::getName, c -> Collections.singletonList(c.getLogoId()), (c1, c2) -> c1));
- MultiValueMap gamesToImageIds = new LinkedMultiValueMap<>(test);
+ MultiValueMap companiesToLogoIds = new LinkedMultiValueMap<>(companyToLogoIdMap);
- int downloadCount = downloadImagesIntoCache(gamesToImageIds, IgdbApiProperties.LOGO_IMAGE_SIZE, "logo", "company");
+ int downloadCount = downloadImagesIntoCache(companiesToLogoIds, IgdbApiProperties.LOGO_IMAGE_SIZE, "logo", "company");
stopWatch.stop();
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 2026a71..610586d 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -1,5 +1,5 @@
gameyfin:
- root: \\NAS-Simon\Öffentlich\Spiele
+ root: C:\Projects\privat\gameyfin-library
cache: ${gameyfin.root}\.gameyfin\cache
db: ${gameyfin.root}\.gameyfin\db # Currently unused
igdb: