private void GetIgdbMetadata() { if (IgdbData != null) { return; } if (gameId != 0) { IgdbData = plugin.Client.GetIGDBGameParsed(gameId); return; } if (!options.IsBackgroundDownload) { var item = plugin.PlayniteApi.Dialogs.ChooseItemWithSearch(null, (a) => { if (a.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { try { var gameId = GetGameInfoFromUrl(a); var data = plugin.Client.GetIGDBGameParsed(ulong.Parse(gameId)); return(new List <GenericItemOption> { new SearchResult(gameId, data.name) }); } catch (Exception e) { logger.Error(e, $"Failed to get game data from {a}"); return(new List <GenericItemOption>()); } } else { var res = plugin.GetSearchResults(a); return(res.Select(b => b as GenericItemOption).ToList()); } }, options.GameData.Name); if (item != null) { var searchItem = item as SearchResult; IgdbData = plugin.Client.GetIGDBGameParsed(ulong.Parse(searchItem.Id)); } else { IgdbData = new IgdbServerModels.ExpandedGame() { id = 0 }; } } else { var game = options.GameData; if (BuiltinExtensions.GetExtensionFromId(game.PluginId) == BuiltinExtension.SteamLibrary) { var igdbId = plugin.Client.GetIGDBGameBySteamId(game.GameId); if (igdbId != 0) { IgdbData = plugin.Client.GetIGDBGameParsed(igdbId); return; } } if (game.Name.IsNullOrEmpty()) { IgdbData = new IgdbServerModels.ExpandedGame() { id = 0 }; return; } var copyGame = game.GetClone(); copyGame.Name = StringExtensions.NormalizeGameName(game.Name); var name = copyGame.Name .Replace(" RHCP", "", StringComparison.OrdinalIgnoreCase) .Replace(" RU", "", StringComparison.OrdinalIgnoreCase); var results = plugin.GetSearchResults(plugin.GetIgdbSearchString(name)).ToList(); results.ForEach(a => a.Name = StringExtensions.NormalizeGameName(a.Name)); string testName = string.Empty; // Direct comparison IgdbData = matchFun(game, name, results); if (IgdbData != null) { return; } // Try replacing roman numerals: 3 => III testName = Regex.Replace(name, @"\d+", ReplaceNumsForRomans); IgdbData = matchFun(game, testName, results); if (IgdbData != null) { return; } // Try adding The testName = "The " + name; IgdbData = matchFun(game, testName, results); if (IgdbData != null) { return; } // Try chaning & / and testName = Regex.Replace(name, @"\s+and\s+", " & ", RegexOptions.IgnoreCase); IgdbData = matchFun(game, testName, results); if (IgdbData != null) { return; } // Try removing apostrophes var resCopy = results.GetClone(); resCopy.ForEach(a => a.Name = a.Name.Replace("'", "")); IgdbData = matchFun(game, name, resCopy); if (IgdbData != null) { return; } // Try removing all ":" and "-" testName = Regex.Replace(name, @"\s*(:|-)\s*", " "); resCopy = results.GetClone(); resCopy.ForEach(a => a.Name = Regex.Replace(a.Name, @"\s*(:|-)\s*", " ")); IgdbData = matchFun(game, testName, resCopy); if (IgdbData != null) { return; } // Try without subtitle var testResult = results.OrderBy(a => a.ReleaseDate).FirstOrDefault(a => { if (a.ReleaseDate == null) { return(false); } if (!string.IsNullOrEmpty(a.Name) && a.Name.Contains(":")) { return(string.Equals(name, a.Name.Split(':')[0], StringComparison.InvariantCultureIgnoreCase)); } return(false); }); if (testResult != null) { IgdbData = plugin.Client.GetIGDBGameParsed(ulong.Parse(testResult.Id)); return; } // No match found IgdbData = new IgdbServerModels.ExpandedGame() { id = 0 }; } }
private void GetIgdbMetadata() { if (IgdbData != null) { return; } if (!options.IsBackgroundDownload) { var item = plugin.PlayniteApi.Dialogs.ChooseItemWithSearch(null, (a) => { if (a.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { try { var gameId = GetGameInfoFromUrl(a); var data = plugin.Client.GetIGDBGameExpanded(ulong.Parse(gameId)); return(new List <GenericItemOption> { new SearchResult(gameId, data.name) }); } catch (Exception e) { logger.Error(e, $"Failed to get game data from {a}"); return(new List <GenericItemOption>()); } } else { var res = plugin.GetSearchResults(a); return(res.Select(b => b as GenericItemOption).ToList()); } }, options.GameData.Name); if (item != null) { var searchItem = item as SearchResult; IgdbData = plugin.Client.GetIGDBGameExpanded(ulong.Parse(searchItem.Id)); } else { IgdbData = new IgdbServerModels.ExpandedGame() { id = 0 }; } } else { try { var metadata = plugin.Client.GetMetadata(options.GameData); if (metadata.id > 0) { IgdbData = metadata; } else { IgdbData = new IgdbServerModels.ExpandedGame() { id = 0 }; } } catch (Exception e) { logger.Error(e, "Failed to get IGDB metadata."); IgdbData = new IgdbServerModels.ExpandedGame() { id = 0 }; } } }