mirror of
https://github.com/BrenBroZAYT/gameyfin.git
synced 2026-06-15 16:20:03 +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
|
package de.grimsi.gameyfin.games
|
||||||
|
|
||||||
import de.grimsi.gameyfin.core.filterValuesNotNull
|
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.core.plugins.management.PluginManagementService
|
||||||
import de.grimsi.gameyfin.games.dto.GameDto
|
import de.grimsi.gameyfin.games.dto.GameDto
|
||||||
import de.grimsi.gameyfin.games.dto.GameMetadataDto
|
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 {
|
private fun mergeResults(results: List<Map.Entry<GameMetadataProvider, GameMetadata?>>, path: Path): Game {
|
||||||
val mergedGame = Game(path = path.toString())
|
val mergedGame = Game(path = path.toString())
|
||||||
val metadataMap = mutableMapOf<String, FieldMetadata>()
|
val metadataMap = mutableMapOf<String, FieldMetadata>()
|
||||||
|
val originalIdsMap = mutableMapOf<PluginManagementEntry, String>()
|
||||||
|
|
||||||
// Sort results by plugin priority
|
// Sort results by plugin priority
|
||||||
val sortedResults = results.sortedByDescending {
|
val sortedResults = results.sortedByDescending {
|
||||||
@@ -139,7 +141,10 @@ class GameService(
|
|||||||
|
|
||||||
sortedResults.forEach { (provider, metadata) ->
|
sortedResults.forEach { (provider, metadata) ->
|
||||||
val sourcePlugin = pluginManagementService.getPluginManagementEntry(provider.javaClass)
|
val sourcePlugin = pluginManagementService.getPluginManagementEntry(provider.javaClass)
|
||||||
|
|
||||||
metadata?.let {
|
metadata?.let {
|
||||||
|
originalIdsMap[sourcePlugin] = metadata.originalId
|
||||||
|
|
||||||
it.title.takeIf { it.isNotBlank() }?.let { title ->
|
it.title.takeIf { it.isNotBlank() }?.let { title ->
|
||||||
if (!metadataMap.containsKey("title")) {
|
if (!metadataMap.containsKey("title")) {
|
||||||
mergedGame.title = title
|
mergedGame.title = title
|
||||||
@@ -164,6 +169,18 @@ class GameService(
|
|||||||
metadataMap["release"] = FieldMetadata(sourcePlugin)
|
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 ->
|
it.publishedBy?.takeIf { it.isNotEmpty() }?.let { publishedBy ->
|
||||||
if (!metadataMap.containsKey("publishers")) {
|
if (!metadataMap.containsKey("publishers")) {
|
||||||
mergedGame.publishers =
|
mergedGame.publishers =
|
||||||
@@ -225,6 +242,7 @@ class GameService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
mergedGame.metadata = metadataMap
|
mergedGame.metadata = metadataMap
|
||||||
|
mergedGame.originalIds = originalIdsMap
|
||||||
return mergedGame
|
return mergedGame
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,6 +256,8 @@ class GameService(
|
|||||||
comment = game.comment,
|
comment = game.comment,
|
||||||
summary = game.summary,
|
summary = game.summary,
|
||||||
release = game.release,
|
release = game.release,
|
||||||
|
userRating = game.userRating,
|
||||||
|
criticRating = game.criticRating,
|
||||||
publishers = game.publishers?.map { it.name },
|
publishers = game.publishers?.map { it.name },
|
||||||
developers = game.developers?.map { it.name },
|
developers = game.developers?.map { it.name },
|
||||||
genres = game.genres?.map { it.name },
|
genres = game.genres?.map { it.name },
|
||||||
@@ -248,7 +268,8 @@ class GameService(
|
|||||||
imageIds = game.images?.mapNotNull { it.id },
|
imageIds = game.images?.mapNotNull { it.id },
|
||||||
videoUrls = game.videoUrls?.map { it.toString() },
|
videoUrls = game.videoUrls?.map { it.toString() },
|
||||||
path = game.path,
|
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 comment: String?,
|
||||||
val summary: String?,
|
val summary: String?,
|
||||||
val release: Instant?,
|
val release: Instant?,
|
||||||
|
val userRating: Int?,
|
||||||
|
val criticRating: Int?,
|
||||||
val publishers: List<String>?,
|
val publishers: List<String>?,
|
||||||
val developers: List<String>?,
|
val developers: List<String>?,
|
||||||
val genres: List<String>?,
|
val genres: List<String>?,
|
||||||
@@ -19,5 +21,6 @@ class GameDto(
|
|||||||
val imageIds: List<Long>?,
|
val imageIds: List<Long>?,
|
||||||
val videoUrls: List<String>?,
|
val videoUrls: List<String>?,
|
||||||
val path: 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
|
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.GameFeature
|
||||||
import de.grimsi.gameyfin.pluginapi.gamemetadata.Genre
|
import de.grimsi.gameyfin.pluginapi.gamemetadata.Genre
|
||||||
import de.grimsi.gameyfin.pluginapi.gamemetadata.PlayerPerspective
|
import de.grimsi.gameyfin.pluginapi.gamemetadata.PlayerPerspective
|
||||||
@@ -29,6 +30,10 @@ class Game(
|
|||||||
|
|
||||||
var release: Instant? = null,
|
var release: Instant? = null,
|
||||||
|
|
||||||
|
var userRating: Int? = null,
|
||||||
|
|
||||||
|
var criticRating: Int? = null,
|
||||||
|
|
||||||
@ManyToMany(cascade = [CascadeType.MERGE])
|
@ManyToMany(cascade = [CascadeType.MERGE])
|
||||||
var publishers: Set<Company>? = null,
|
var publishers: Set<Company>? = null,
|
||||||
|
|
||||||
@@ -60,5 +65,8 @@ class Game(
|
|||||||
val path: String,
|
val path: String,
|
||||||
|
|
||||||
@OneToMany(cascade = [CascadeType.ALL], orphanRemoval = true)
|
@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
|
import java.time.Instant
|
||||||
|
|
||||||
class GameMetadata(
|
class GameMetadata(
|
||||||
|
val originalId: String,
|
||||||
val title: String,
|
val title: String,
|
||||||
val description: String? = null,
|
val description: String? = null,
|
||||||
val coverUrl: URI? = null,
|
val coverUrl: URI? = null,
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ class IgdbPlugin(wrapper: PluginWrapper) : GameyfinPlugin(wrapper) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return GameMetadata(
|
return GameMetadata(
|
||||||
|
originalId = game.slug,
|
||||||
title = game.name,
|
title = game.name,
|
||||||
description = game.summary,
|
description = game.summary,
|
||||||
coverUrl = Mapper.cover(game.cover),
|
coverUrl = Mapper.cover(game.cover),
|
||||||
|
|||||||
@@ -2,5 +2,5 @@ Manifest-Version: 1.0
|
|||||||
Plugin-Class: de.grimsi.gameyfin.plugins.igdb.IgdbPlugin
|
Plugin-Class: de.grimsi.gameyfin.plugins.igdb.IgdbPlugin
|
||||||
Plugin-Id: igdb
|
Plugin-Id: igdb
|
||||||
Plugin-Description: IGDB Metadata
|
Plugin-Description: IGDB Metadata
|
||||||
Plugin-Version: 1.0.0-alpha2
|
Plugin-Version: 1.0.0-alpha3
|
||||||
Plugin-Provider: grimsi
|
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
|
// This is as much as I can get from the Steam Store API
|
||||||
val metadata = GameMetadata(
|
val metadata = GameMetadata(
|
||||||
|
originalId = id.toString(),
|
||||||
title = game.name,
|
title = game.name,
|
||||||
description = game.detailedDescription,
|
description = game.detailedDescription,
|
||||||
coverUrl = URI(game.headerImage),
|
coverUrl = URI(game.headerImage),
|
||||||
|
|||||||
@@ -2,5 +2,5 @@ Manifest-Version: 1.0
|
|||||||
Plugin-Class: de.grimsi.gameyfin.plugins.steam.SteamPlugin
|
Plugin-Class: de.grimsi.gameyfin.plugins.steam.SteamPlugin
|
||||||
Plugin-Id: steam
|
Plugin-Id: steam
|
||||||
Plugin-Description: Steam Metadata
|
Plugin-Description: Steam Metadata
|
||||||
Plugin-Version: 1.0.0-alpha3
|
Plugin-Version: 1.0.0-alpha4
|
||||||
Plugin-Provider: grimsi
|
Plugin-Provider: grimsi
|
||||||
|
|||||||
Reference in New Issue
Block a user