mirror of
https://github.com/BrenBroZAYT/gameyfin.git
synced 2026-06-13 16:40:01 +00:00
Add "originalIds" to Game entity
Add "userRatings" to Game entity Add "criticRatings" to Game entity
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user