public void RemovePlatform(IEnumerable <Platform> platforms) { CheckDbState(); if (platforms == null || platforms.Count() == 0) { return; } lock (fileLock) { foreach (var platform in platforms) { PlatformsCollection.Delete(platform.Id); } } OnPlatformsCollectionChanged(new List <Platform>(), platforms.ToList()); lock (fileLock) { foreach (var platform in platforms) { foreach (var game in GamesCollection.Find(a => a.PlatformId == platform.Id)) { game.PlatformId = null; UpdateGameInDatabase(game); } } } }
public void UpdateOwnedGames(Provider provider) { List <IGame> importedGames = null; switch (provider) { case Provider.Custom: return; case Provider.GOG: importedGames = gogLibrary.GetLibraryGames(); break; case Provider.Origin: importedGames = originLibrary.GetLibraryGames(); break; case Provider.Steam: importedGames = steamLibrary.GetLibraryGames(SteamUserName); break; case Provider.Uplay: return; default: return; } foreach (var game in importedGames) { var existingGame = GamesCollection.FindOne(a => a.ProviderId == game.ProviderId && a.Provider == provider); if (existingGame == null) { logger.Info("Adding new game {0} into library from {1} provider", game.ProviderId, game.Provider); AssignPcPlatform(game); AddGame(game); } } // Delete games that are no longer in library foreach (IGame dbGame in GamesCollection.Find(a => a.Provider == provider)) { if (importedGames.FirstOrDefault(a => a.ProviderId == dbGame.ProviderId) == null) { // Except games that are installed, in case that game is part of free weekend, beta or similar events if (dbGame.IsInstalled) { continue; } logger.Info("Removing game {0} which is no longer in {1} library", dbGame.ProviderId, dbGame.Provider); DeleteGame(dbGame); } } }
/// <summary> /// Deletes image from database only if it's not used by any object. /// </summary> /// <param name="id"></param> /// <param name="game"></param> public void DeleteImageSafe(string id, IGame game) { if (string.IsNullOrEmpty(id)) { return; } CheckDbState(); GamesCollection = Database.GetCollection <IGame>("games"); var games = GamesCollection.Find(a => (a.Icon == id || a.Image == id || a.BackgroundImage == id) && a.Id != game.Id); if (games.Count() == 0) { Database.FileStorage.Delete(id); } }
/// <summary> /// Deletes image from database only if it's not used by any object. /// </summary> /// <param name="id"></param> /// <param name="game"></param> public void DeleteImageSafe(string id, IGame game) { if (string.IsNullOrEmpty(id)) { return; } CheckDbState(); using (Database.Engine.Locker.Reserved()) { var games = GamesCollection.Find(a => (a.Icon == id || a.Image == id || a.BackgroundImage == id) && a.Id != game.Id); if (games.Count() == 0) { Database.FileStorage.Delete(id); } } }
public void RemovePlatform(Platform platform) { CheckDbState(); lock (fileLock) { PlatformsCollection.Delete(platform.Id); } OnPlatformsCollectionChanged(new List <Platform>(), new List <Platform>() { platform }); lock (fileLock) { foreach (var game in GamesCollection.Find(a => a.PlatformId == platform.Id)) { game.PlatformId = null; UpdateGameInDatabase(game); } } }
public List <IGame> UpdateInstalledGames(Provider provider) { List <IGame> installedGames = null; List <IGame> newGames = new List <IGame>(); switch (provider) { case Provider.Custom: return(newGames); case Provider.GOG: var source = InstalledGamesSource.Registry; if (AppSettings.GOGSettings.RunViaGalaxy) { source = InstalledGamesSource.Galaxy; } installedGames = gogLibrary.GetInstalledGames(source); break; case Provider.Origin: installedGames = originLibrary.GetInstalledGames(true); break; case Provider.Steam: installedGames = steamLibrary.GetInstalledGames(); break; case Provider.Uplay: installedGames = uplayLibrary.GetInstalledGames(); break; case Provider.BattleNet: installedGames = battleNetLibrary.GetInstalledGames(); break; default: return(newGames); } foreach (var newGame in installedGames) { var existingGame = GamesCollection.FindOne(a => a.ProviderId == newGame.ProviderId && a.Provider == provider); if (existingGame == null) { logger.Info("Adding new installed game {0} from {1} provider", newGame.ProviderId, newGame.Provider); AssignPcPlatform(newGame); AddGame(newGame); newGames.Add(newGame); } else { existingGame.PlayTask = newGame.PlayTask; existingGame.InstallDirectory = newGame.InstallDirectory; // Don't import custom action if imported already (user may changed them manually and this would overwrite it) if (existingGame.OtherTasks?.FirstOrDefault(a => a.IsBuiltIn) == null && newGame.OtherTasks != null) { if (existingGame.OtherTasks == null) { existingGame.OtherTasks = new ObservableCollection <GameTask>(); } else { existingGame.OtherTasks = new ObservableCollection <GameTask>(existingGame.OtherTasks.Where(a => !a.IsBuiltIn)); } foreach (var task in newGame.OtherTasks.Reverse()) { existingGame.OtherTasks.Insert(0, task); } if (provider == Provider.Steam) { foreach (var task in existingGame.OtherTasks.Where(a => a.Type == GameTaskType.File && a.IsBuiltIn)) { task.WorkingDir = newGame.InstallDirectory; } } } UpdateGameInDatabase(existingGame); } } foreach (var game in GamesCollection.Find(a => a.Provider == provider)) { if (installedGames.FirstOrDefault(a => a.ProviderId == game.ProviderId) == null) { game.PlayTask = null; game.InstallDirectory = string.Empty; UpdateGameInDatabase(game); } } return(newGames); }