public static List <Game> ImportGames(ILibraryPlugin library, GameDatabase database, bool forcePlayTimeSync) { var addedGames = new List <Game>(); foreach (var newGame in library.GetGames()) { var existingGame = database.Games.FirstOrDefault(a => a.GameId == newGame.GameId && a.PluginId == library.Id); if (existingGame == null) { logger.Info(string.Format("Adding new game {0} from {1} plugin", newGame.GameId, library.Name)); if (!string.IsNullOrEmpty(newGame.Icon)) { newGame.Icon = AddNewGameFile(newGame.Icon, newGame.Id, database); } if (!string.IsNullOrEmpty(newGame.CoverImage)) { newGame.CoverImage = AddNewGameFile(newGame.CoverImage, newGame.Id, database); } if (!string.IsNullOrEmpty(newGame.BackgroundImage)) { if (!newGame.BackgroundImage.IsHttpUrl()) { newGame.BackgroundImage = AddNewGameFile(newGame.BackgroundImage, newGame.Id, database); } } database.AssignPcPlatform(newGame); database.Games.Add(newGame); addedGames.Add(newGame); } else { existingGame.IsInstalled = newGame.IsInstalled; existingGame.InstallDirectory = newGame.InstallDirectory; if (existingGame.PlayAction == null || existingGame.PlayAction.IsHandledByPlugin) { existingGame.PlayAction = newGame.PlayAction; } if ((existingGame.Playtime == 0 && newGame.Playtime > 0) || (newGame.Playtime > 0 && forcePlayTimeSync)) { existingGame.Playtime = newGame.Playtime; if (existingGame.CompletionStatus == CompletionStatus.NotPlayed) { existingGame.CompletionStatus = CompletionStatus.Played; } if (existingGame.LastActivity == null && newGame.LastActivity != null) { existingGame.LastActivity = newGame.LastActivity; } } if (existingGame.OtherActions?.Any() != true && newGame.OtherActions?.Any() == true) { existingGame.OtherActions = newGame.OtherActions; } database.Games.Update(existingGame); } } return(addedGames); }
public static IEnumerable <Game> ImportGames(ILibraryPlugin library, GameDatabase database) { foreach (var newGame in library.GetGames()) { var existingGame = database.GamesCollection.FindOne(a => a.GameId == newGame.GameId && a.PluginId == library.Id); if (existingGame == null) { logger.Info(string.Format("Adding new game {0} from {1} plugin", newGame.GameId, library.Name)); if (!string.IsNullOrEmpty(newGame.Icon)) { newGame.Icon = AddNewFile(newGame.Icon, library.Id, database); } if (!string.IsNullOrEmpty(newGame.CoverImage)) { newGame.CoverImage = AddNewFile(newGame.CoverImage, library.Id, database); } if (!string.IsNullOrEmpty(newGame.BackgroundImage)) { if (!newGame.BackgroundImage.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { newGame.BackgroundImage = AddNewFile(newGame.BackgroundImage, library.Id, database); } } database.AssignPcPlatform(newGame); database.AddGame(newGame); yield return(newGame); } else { existingGame.State.Installed = newGame.State.Installed; existingGame.InstallDirectory = newGame.InstallDirectory; if (existingGame.PlayAction == null || existingGame.PlayAction.IsHandledByPlugin) { existingGame.PlayAction = newGame.PlayAction; } if (existingGame.Playtime == 0 && newGame.Playtime > 0) { existingGame.Playtime = newGame.Playtime; if (existingGame.CompletionStatus == CompletionStatus.NotPlayed) { existingGame.CompletionStatus = CompletionStatus.Played; } if (existingGame.LastActivity == null && newGame.LastActivity != null) { existingGame.LastActivity = newGame.LastActivity; } } if (existingGame.OtherActions?.Any() != true && newGame.OtherActions?.Any() == true) { existingGame.OtherActions = newGame.OtherActions; } database.UpdateGameInDatabase(existingGame); } } }