diff --git a/plugins/igdb/src/main/kotlin/de/grimsi/gameyfinplugins/igdb/IgdbPlugin.kt b/plugins/igdb/src/main/kotlin/de/grimsi/gameyfinplugins/igdb/IgdbPlugin.kt index e2e7cae..eb36085 100644 --- a/plugins/igdb/src/main/kotlin/de/grimsi/gameyfinplugins/igdb/IgdbPlugin.kt +++ b/plugins/igdb/src/main/kotlin/de/grimsi/gameyfinplugins/igdb/IgdbPlugin.kt @@ -142,7 +142,16 @@ class IgdbPlugin(wrapper: PluginWrapper) : ConfigurableGameyfinPlugin(wrapper) { // Use fuzzy search to find the best matching game name val bestMatchingTitles = FuzzySearch.extractTop(gameTitle, games.map { it.name }, maxResults) - games = bestMatchingTitles.mapNotNull { title -> games.find { it.name == title.string } } + val bestMatchingTitleStrings = bestMatchingTitles.map { it.string } + val bestMatchesMap = bestMatchingTitles.associateBy({ it.string }, { it.score }) + + // Filter the games to only include those that match the best matching titles + games = games.filter { it.name in bestMatchingTitleStrings } + + // If we have more than maxResults, sort by the best match score and take the top results + games = games.filter { it.name in bestMatchesMap.keys } + .sortedByDescending { bestMatchesMap[it.name] } + .take(maxResults) return games.map { toGameMetadata(it) } } diff --git a/plugins/igdb/src/main/resources/MANIFEST.MF b/plugins/igdb/src/main/resources/MANIFEST.MF index 9e0447e..d2046b8 100644 --- a/plugins/igdb/src/main/resources/MANIFEST.MF +++ b/plugins/igdb/src/main/resources/MANIFEST.MF @@ -1,4 +1,4 @@ -Plugin-Version: 1.0.0-alpha8 +Plugin-Version: 1.0.0-alpha9 Plugin-Class: de.grimsi.gameyfinplugins.igdb.IgdbPlugin Plugin-Id: de.grimsi.gameyfin.igdb Plugin-Name: IGDB Metadata diff --git a/plugins/steam/src/main/kotlin/de/grimsi/gameyfinplugins/steam/SteamPlugin.kt b/plugins/steam/src/main/kotlin/de/grimsi/gameyfinplugins/steam/SteamPlugin.kt index 25fc461..7e436fc 100644 --- a/plugins/steam/src/main/kotlin/de/grimsi/gameyfinplugins/steam/SteamPlugin.kt +++ b/plugins/steam/src/main/kotlin/de/grimsi/gameyfinplugins/steam/SteamPlugin.kt @@ -54,10 +54,21 @@ class SteamPlugin(wrapper: PluginWrapper) : GameyfinPlugin(wrapper) { val searchResult: List = runBlocking { searchStore(gameTitle) } if (searchResult.isEmpty()) return emptyList() + // Use fuzzy search to find the best matching game name val bestMatchingTitles = FuzzySearch.extractTop(gameTitle, searchResult.map { it.name }, maxResults) - val bestMatches = bestMatchingTitles.mapNotNull { title -> searchResult.find { it.name == title.string } } + val bestMatchingTitleStrings = bestMatchingTitles.map { it.string } + val bestMatchesMap = bestMatchingTitles.associateBy({ it.string }, { it.score }) - return runBlocking { bestMatches.map { getGameDetails(it.id) } }.filterNotNull() + // Filter the games to only include those that match the best matching titles + var bestMatches = searchResult.filter { it.name in bestMatchingTitleStrings } + + // If we have more than maxResults, sort by the best match score and take the top results + bestMatches = bestMatches.filter { it.name in bestMatchesMap.keys } + .sortedByDescending { bestMatchesMap[it.name] } + + return runBlocking { bestMatches.map { getGameDetails(it.id) } } + .filterNotNull() + .take(maxResults) } override fun fetchById(id: String): GameMetadata? { diff --git a/plugins/steam/src/main/resources/MANIFEST.MF b/plugins/steam/src/main/resources/MANIFEST.MF index 80bbe24..caafce5 100644 --- a/plugins/steam/src/main/resources/MANIFEST.MF +++ b/plugins/steam/src/main/resources/MANIFEST.MF @@ -1,4 +1,4 @@ -Plugin-Version: 1.0.0-alpha8 +Plugin-Version: 1.0.0-alpha9 Plugin-Class: de.grimsi.gameyfinplugins.steam.SteamPlugin Plugin-Id: de.grimsi.gameyfin.steam Plugin-Name: Steam Metadata diff --git a/plugins/steamgriddb/src/main/kotlin/de/grimsi/gameyfinplugins/steamgriddb/SteamGridDbPlugin.kt b/plugins/steamgriddb/src/main/kotlin/de/grimsi/gameyfinplugins/steamgriddb/SteamGridDbPlugin.kt index a324c0a..665cd4d 100644 --- a/plugins/steamgriddb/src/main/kotlin/de/grimsi/gameyfinplugins/steamgriddb/SteamGridDbPlugin.kt +++ b/plugins/steamgriddb/src/main/kotlin/de/grimsi/gameyfinplugins/steamgriddb/SteamGridDbPlugin.kt @@ -74,20 +74,25 @@ class SteamGridDbPlugin(wrapper: PluginWrapper) : ConfigurableGameyfinPlugin(wra override fun fetchByTitle(gameTitle: String, maxResults: Int): List { return runBlocking { - var searchResults = searchSteamGridDb(gameTitle) + val covers = mutableListOf() + val games = searchSteamGridDb(gameTitle) - if (searchResults.isEmpty()) return@runBlocking emptyList() - if (searchResults.size > maxResults) searchResults = searchResults.slice(0 until maxResults) - - return@runBlocking searchResults - .map { game -> - GameMetadata( - originalId = game.id.toString(), - title = game.name, - coverUrl = getGridForGame(game.id)?.let { grid -> URI(grid.url) } + for (game in games) { + val gameDetails = client?.grids(game.id) + val grids = gameDetails?.data.orEmpty() + for (grid in grids) { + covers.add( + GameMetadata( + originalId = game.id.toString(), + title = game.name, + coverUrl = URI(grid.url) + ) ) + if (covers.size >= maxResults) break } - .filter { it.coverUrl != null } + if (covers.size >= maxResults) break + } + covers } } diff --git a/plugins/steamgriddb/src/main/resources/MANIFEST.MF b/plugins/steamgriddb/src/main/resources/MANIFEST.MF index 45dfaa1..1710fb7 100644 --- a/plugins/steamgriddb/src/main/resources/MANIFEST.MF +++ b/plugins/steamgriddb/src/main/resources/MANIFEST.MF @@ -1,4 +1,4 @@ -Plugin-Version: 1.0.0-alpha5 +Plugin-Version: 1.0.0-alpha6 Plugin-Class: de.grimsi.gameyfinplugins.steamgriddb.SteamGridDbPlugin Plugin-Id: de.grimsi.gameyfin.steamgriddb Plugin-Name: SteamGridDB Covers