mirror of
https://github.com/BrenBroZAYT/gameyfin.git
synced 2026-06-16 16:20:04 +00:00
Added OpenAPI UI
Refactored some REST Endpoints
This commit is contained in:
@@ -36,6 +36,13 @@
|
|||||||
<artifactId>spring-boot-starter-webflux</artifactId>
|
<artifactId>spring-boot-starter-webflux</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- OpenAPI -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springdoc</groupId>
|
||||||
|
<artifactId>springdoc-openapi-ui</artifactId>
|
||||||
|
<version>1.6.9</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- Webclient Rate limiter -->
|
<!-- Webclient Rate limiter -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.github.resilience4j</groupId>
|
<groupId>io.github.resilience4j</groupId>
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package de.grimsi.gameyfin.rest;
|
|||||||
|
|
||||||
import de.grimsi.gameyfin.service.FilesystemService;
|
import de.grimsi.gameyfin.service.FilesystemService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.data.repository.query.Param;
|
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
@@ -23,14 +22,14 @@ public class LibraryController {
|
|||||||
private final FilesystemService filesystemService;
|
private final FilesystemService filesystemService;
|
||||||
|
|
||||||
@GetMapping(value = "/scan", produces = MediaType.APPLICATION_JSON_VALUE)
|
@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();
|
filesystemService.scanGameLibrary();
|
||||||
|
|
||||||
if(downloadImages) populateCache();
|
if(downloadImages) downloadImages();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping(value = "/populate-cache")
|
@GetMapping(value = "/download_images")
|
||||||
public void populateCache() {
|
public void downloadImages() {
|
||||||
filesystemService.downloadGameCovers();
|
filesystemService.downloadGameCovers();
|
||||||
filesystemService.downloadGameScreenshots();
|
filesystemService.downloadGameScreenshots();
|
||||||
filesystemService.downloadCompanyLogos();
|
filesystemService.downloadCompanyLogos();
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import de.grimsi.gameyfin.entities.UnmappableFile;
|
|||||||
import de.grimsi.gameyfin.igdb.IgdbApiProperties;
|
import de.grimsi.gameyfin.igdb.IgdbApiProperties;
|
||||||
import de.grimsi.gameyfin.igdb.IgdbWrapper;
|
import de.grimsi.gameyfin.igdb.IgdbWrapper;
|
||||||
import de.grimsi.gameyfin.mapper.GameMapper;
|
import de.grimsi.gameyfin.mapper.GameMapper;
|
||||||
import de.grimsi.gameyfin.repositories.CompanyRepository;
|
|
||||||
import de.grimsi.gameyfin.repositories.DetectedGameRepository;
|
import de.grimsi.gameyfin.repositories.DetectedGameRepository;
|
||||||
import de.grimsi.gameyfin.repositories.UnmappableFileRepository;
|
import de.grimsi.gameyfin.repositories.UnmappableFileRepository;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -29,6 +28,7 @@ import org.springframework.web.reactive.function.client.WebClientResponseExcepti
|
|||||||
import org.springframework.web.server.ResponseStatusException;
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
@@ -64,7 +64,14 @@ public class FilesystemService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private UnmappableFileRepository unmappableFileRepository;
|
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<Path> getGameFiles() {
|
public List<Path> getGameFiles() {
|
||||||
|
|
||||||
@@ -141,11 +148,11 @@ public class FilesystemService {
|
|||||||
log.info("Starting game cover download...");
|
log.info("Starting game cover download...");
|
||||||
stopWatch.start();
|
stopWatch.start();
|
||||||
|
|
||||||
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>(
|
MultiValueMap<String, String> gameToImageIds = new LinkedMultiValueMap<>(
|
||||||
detectedGameRepository.findAll().stream()
|
detectedGameRepository.findAll().stream()
|
||||||
.collect(Collectors.toMap(DetectedGame::getTitle, g -> Collections.singletonList(g.getCoverId()))));
|
.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();
|
stopWatch.stop();
|
||||||
|
|
||||||
@@ -175,13 +182,13 @@ public class FilesystemService {
|
|||||||
log.info("Starting company logo download...");
|
log.info("Starting company logo download...");
|
||||||
stopWatch.start();
|
stopWatch.start();
|
||||||
|
|
||||||
Map<String, List<String>> test = detectedGameRepository.findAll().stream()
|
Map<String, List<String>> companyToLogoIdMap = detectedGameRepository.findAll().stream()
|
||||||
.flatMap(g -> g.getCompanies().stream())
|
.flatMap(g -> g.getCompanies().stream())
|
||||||
.collect(Collectors.toMap(Company::getName, c -> Collections.singletonList(c.getLogoId()), (c1, c2) -> c1));
|
.collect(Collectors.toMap(Company::getName, c -> Collections.singletonList(c.getLogoId()), (c1, c2) -> c1));
|
||||||
|
|
||||||
MultiValueMap<String, String> gamesToImageIds = new LinkedMultiValueMap<>(test);
|
MultiValueMap<String, String> 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();
|
stopWatch.stop();
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
gameyfin:
|
gameyfin:
|
||||||
root: \\NAS-Simon\Öffentlich\Spiele
|
root: C:\Projects\privat\gameyfin-library
|
||||||
cache: ${gameyfin.root}\.gameyfin\cache
|
cache: ${gameyfin.root}\.gameyfin\cache
|
||||||
db: ${gameyfin.root}\.gameyfin\db # Currently unused
|
db: ${gameyfin.root}\.gameyfin\db # Currently unused
|
||||||
igdb:
|
igdb:
|
||||||
|
|||||||
Reference in New Issue
Block a user