Add "originalIds" to Game entity

Add "userRatings" to Game entity
Add "criticRatings" to Game entity
This commit is contained in:
grimsi
2025-03-30 22:23:23 +02:00
parent a589b9dbfb
commit 7fdeeedad3
8 changed files with 40 additions and 5 deletions
@@ -1,6 +1,7 @@
package de.grimsi.gameyfin.games
import de.grimsi.gameyfin.core.filterValuesNotNull
import de.grimsi.gameyfin.core.plugins.management.PluginManagementEntry
import de.grimsi.gameyfin.core.plugins.management.PluginManagementService
import de.grimsi.gameyfin.games.dto.GameDto
import de.grimsi.gameyfin.games.dto.GameMetadataDto
@@ -131,6 +132,7 @@ class GameService(
private fun mergeResults(results: List<Map.Entry<GameMetadataProvider, GameMetadata?>>, path: Path): Game {
val mergedGame = Game(path = path.toString())
val metadataMap = mutableMapOf<String, FieldMetadata>()
val originalIdsMap = mutableMapOf<PluginManagementEntry, String>()
// Sort results by plugin priority
val sortedResults = results.sortedByDescending {
@@ -139,7 +141,10 @@ class GameService(
sortedResults.forEach { (provider, metadata) ->
val sourcePlugin = pluginManagementService.getPluginManagementEntry(provider.javaClass)
metadata?.let {
originalIdsMap[sourcePlugin] = metadata.originalId
it.title.takeIf { it.isNotBlank() }?.let { title ->
if (!metadataMap.containsKey("title")) {
mergedGame.title = title
@@ -164,6 +169,18 @@ class GameService(
metadataMap["release"] = FieldMetadata(sourcePlugin)
}
}
it.userRating?.let { userRating ->
if (!metadataMap.containsKey("userRating")) {
mergedGame.userRating = userRating
metadataMap["userRating"] = FieldMetadata(sourcePlugin)
}
}
it.criticRating?.let { criticRating ->
if (!metadataMap.containsKey("criticRating")) {
mergedGame.criticRating = criticRating
metadataMap["criticRating"] = FieldMetadata(sourcePlugin)
}
}
it.publishedBy?.takeIf { it.isNotEmpty() }?.let { publishedBy ->
if (!metadataMap.containsKey("publishers")) {
mergedGame.publishers =
@@ -225,6 +242,7 @@ class GameService(
}
mergedGame.metadata = metadataMap
mergedGame.originalIds = originalIdsMap
return mergedGame
}
@@ -238,6 +256,8 @@ class GameService(
comment = game.comment,
summary = game.summary,
release = game.release,
userRating = game.userRating,
criticRating = game.criticRating,
publishers = game.publishers?.map { it.name },
developers = game.developers?.map { it.name },
genres = game.genres?.map { it.name },
@@ -248,7 +268,8 @@ class GameService(
imageIds = game.images?.mapNotNull { it.id },
videoUrls = game.videoUrls?.map { it.toString() },
path = game.path,
metadata = toDto(game.metadata)
metadata = toDto(game.metadata),
originalIds = game.originalIds.mapKeys { it.key.pluginId }
)
}
@@ -9,6 +9,8 @@ class GameDto(
val comment: String?,
val summary: String?,
val release: Instant?,
val userRating: Int?,
val criticRating: Int?,
val publishers: List<String>?,
val developers: List<String>?,
val genres: List<String>?,
@@ -19,5 +21,6 @@ class GameDto(
val imageIds: List<Long>?,
val videoUrls: List<String>?,
val path: String,
val metadata: Map<String, GameMetadataDto>
val metadata: Map<String, GameMetadataDto>,
val originalIds: Map<String, String>
)
@@ -1,5 +1,6 @@
package de.grimsi.gameyfin.games.entities
import de.grimsi.gameyfin.core.plugins.management.PluginManagementEntry
import de.grimsi.gameyfin.pluginapi.gamemetadata.GameFeature
import de.grimsi.gameyfin.pluginapi.gamemetadata.Genre
import de.grimsi.gameyfin.pluginapi.gamemetadata.PlayerPerspective
@@ -29,6 +30,10 @@ class Game(
var release: Instant? = null,
var userRating: Int? = null,
var criticRating: Int? = null,
@ManyToMany(cascade = [CascadeType.MERGE])
var publishers: Set<Company>? = null,
@@ -60,5 +65,8 @@ class Game(
val path: String,
@OneToMany(cascade = [CascadeType.ALL], orphanRemoval = true)
var metadata: Map<String, FieldMetadata> = emptyMap()
var metadata: Map<String, FieldMetadata> = emptyMap(),
@ElementCollection
var originalIds: Map<PluginManagementEntry, String> = emptyMap()
)
@@ -4,6 +4,7 @@ import java.net.URI
import java.time.Instant
class GameMetadata(
val originalId: String,
val title: String,
val description: String? = null,
val coverUrl: URI? = null,
@@ -120,6 +120,7 @@ class IgdbPlugin(wrapper: PluginWrapper) : GameyfinPlugin(wrapper) {
}
return GameMetadata(
originalId = game.slug,
title = game.name,
description = game.summary,
coverUrl = Mapper.cover(game.cover),
+1 -1
View File
@@ -2,5 +2,5 @@ Manifest-Version: 1.0
Plugin-Class: de.grimsi.gameyfin.plugins.igdb.IgdbPlugin
Plugin-Id: igdb
Plugin-Description: IGDB Metadata
Plugin-Version: 1.0.0-alpha2
Plugin-Version: 1.0.0-alpha3
Plugin-Provider: grimsi
@@ -102,6 +102,7 @@ class SteamPlugin(wrapper: PluginWrapper) : GameyfinPlugin(wrapper) {
// This is as much as I can get from the Steam Store API
val metadata = GameMetadata(
originalId = id.toString(),
title = game.name,
description = game.detailedDescription,
coverUrl = URI(game.headerImage),
+1 -1
View File
@@ -2,5 +2,5 @@ Manifest-Version: 1.0
Plugin-Class: de.grimsi.gameyfin.plugins.steam.SteamPlugin
Plugin-Id: steam
Plugin-Description: Steam Metadata
Plugin-Version: 1.0.0-alpha3
Plugin-Version: 1.0.0-alpha4
Plugin-Provider: grimsi