Ejemplo n.º 1
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
        /// <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);
            }
        }
Ejemplo n.º 4
0
        /// <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);
                }
            }
        }
Ejemplo n.º 5
0
        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);
                }
            }
        }
Ejemplo n.º 6
0
        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);
        }