public ProgressionAchievements ProgessionLaunched()
        {
            ProgressionAchievements Result = new ProgressionAchievements();
            int Total    = 0;
            int Locked   = 0;
            int Unlocked = 0;

            try
            {
                foreach (var item in PluginDatabase)
                {
                    GameAchievements GameAchievements = item.Value;

                    if (GameAchievements.HaveAchivements && _PlayniteApi.Database.Games.Get(item.Key).Playtime > 0)
                    {
                        Total    += GameAchievements.Total;
                        Locked   += GameAchievements.Locked;
                        Unlocked += GameAchievements.Unlocked;
                    }
                }
            }
            catch (Exception ex)
            {
                Common.LogError(ex, "SuccessStroy", $"Error on ProgessionLaunched()");
            }

            Result.Total       = Total;
            Result.Locked      = Locked;
            Result.Unlocked    = Unlocked;
            Result.Progression = (Total != 0) ? (int)Math.Round((double)(Unlocked * 100 / Total)) : 0;

            return(Result);
        }
        public ProgressionAchievements ProgessionSource(Guid GameSourceId)
        {
            ProgressionAchievements Result = new ProgressionAchievements();
            int Total    = 0;
            int Locked   = 0;
            int Unlocked = 0;

            foreach (var item in PluginDatabase)
            {
                Guid             Id               = item.Key;
                Game             Game             = PlayniteApi.Database.Games.Get(Id);
                GameAchievements GameAchievements = item.Value;

                if (GameAchievements.HaveAchivements && Game.SourceId == GameSourceId)
                {
                    Total    += GameAchievements.Total;
                    Locked   += GameAchievements.Locked;
                    Unlocked += GameAchievements.Unlocked;
                }
            }

            Result.Total       = Total;
            Result.Locked      = Locked;
            Result.Unlocked    = Unlocked;
            Result.Progression = (Total != 0) ? (int)Math.Ceiling((double)(Unlocked * 100 / Total)) : 0;

            return(Result);
        }
        public ProgressionAchievements ProgessionSource(Guid GameSourceId)
        {
            ProgressionAchievements Result = new ProgressionAchievements();
            int Total    = 0;
            int Locked   = 0;
            int Unlocked = 0;

            try {
                foreach (var item in PluginDatabase)
                {
                    Guid             Id               = item.Key;
                    Game             Game             = _PlayniteApi.Database.Games.Get(Id);
                    GameAchievements GameAchievements = item.Value;

                    if (GameAchievements.HaveAchivements && Game.SourceId == GameSourceId)
                    {
                        Total    += GameAchievements.Total;
                        Locked   += GameAchievements.Locked;
                        Unlocked += GameAchievements.Unlocked;
                    }
                }
            }
            catch (Exception ex)
            {
                Common.LogError(ex, "SuccessStroy", $"Error on ProgessionSource()");
            }

            Result.Total       = Total;
            Result.Locked      = Locked;
            Result.Unlocked    = Unlocked;
            Result.Progression = (Total != 0) ? (int)Math.Ceiling((double)(Unlocked * 100 / Total)) : 0;

            return(Result);
        }
        public ProgressionAchievements ProgessionLaunched()
        {
            ProgressionAchievements Result = new ProgressionAchievements();
            int Total    = 0;
            int Locked   = 0;
            int Unlocked = 0;

            foreach (var item in PluginDatabase)
            {
                GameAchievements GameAchievements = item.Value;

                if (GameAchievements.HaveAchivements && PlayniteApi.Database.Games.Get(item.Key).Playtime > 0)
                {
                    Total    += GameAchievements.Total;
                    Locked   += GameAchievements.Locked;
                    Unlocked += GameAchievements.Unlocked;
                }
            }

            Result.Total       = Total;
            Result.Locked      = Locked;
            Result.Unlocked    = Unlocked;
            Result.Progression = (Total != 0) ? (int)Math.Round((double)(Unlocked * 100 / Total)) : 0;

            return(Result);
        }
        /// <summary>
        /// Initialize database / create directory.
        /// </summary>
        /// <param name="PlayniteApi"></param>
        /// <param name="PluginUserDataPath"></param>
        public void Initialize()
        {
            ListErrors = new CumulErrors();

            Parallel.ForEach(Directory.EnumerateFiles(PluginDatabasePath, "*.json"), (objectFile) =>
            {
                try
                {
                    // Get game achievements.
                    Guid gameId = Guid.Parse(objectFile.Replace(PluginDatabasePath, "").Replace(".json", ""));

                    bool IncludeGame = true;
                    if (!Settings.IncludeHiddenGames)
                    {
                        Game tempGame = PlayniteApi.Database.Games.Get(gameId);

                        if (tempGame != null)
                        {
                            IncludeGame = !tempGame.Hidden;
                        }
                        else
                        {
                            IncludeGame = false;
                            logger.Info($"SuccessStory - {gameId} is null");
                        }
                    }

                    if (IncludeGame)
                    {
                        GameAchievements objGameAchievements = JsonConvert.DeserializeObject <GameAchievements>(File.ReadAllText(objectFile));

                        // Set game achievements in database.
                        PluginDatabase.TryAdd(gameId, objGameAchievements);
                    }
                }
                catch (Exception ex)
                {
                    Common.LogError(ex, "SuccessStory", $"Failed to load item from { objectFile}");
                    ListErrors.Add($"SuccessStory - Failed to load item from {objectFile}");
                }
            });

            if (ListErrors.Get() != "")
            {
                PlayniteApi.Dialogs.ShowErrorMessage(ListErrors.Get(), "SuccessStory errors");
            }

            ListErrors = new CumulErrors();
        }
Example #6
0
        /// <summary>
        /// Initialize database / create directory.
        /// </summary>
        /// <param name="PlayniteApi"></param>
        /// <param name="PluginUserDataPath"></param>
        public void Initialize()
        {
            PluginDatabase = new ConcurrentDictionary <Guid, GameAchievements>();

            Parallel.ForEach(Directory.EnumerateFiles(PluginDatabasePath, "*.json"), (objectFile) =>
            {
                try
                {
                    // Get game achievements.
                    Guid gameId = Guid.Parse(objectFile.Replace(PluginDatabasePath, "").Replace(".json", ""));
                    GameAchievements objGameAchievements = JsonConvert.DeserializeObject <GameAchievements>(File.ReadAllText(objectFile));

                    // Set game achievements in database.
                    PluginDatabase.TryAdd(gameId, objGameAchievements);
                }
                catch (Exception ex)
                {
                    var LineNumber  = new StackTrace(ex, true).GetFrame(0).GetFileLineNumber();
                    string FileName = new StackTrace(ex, true).GetFrame(0).GetFileName();
                    PlayniteApi.Dialogs.ShowErrorMessage(ex.Message, $"SuccessStory error [{LineNumber}]");
                    logger.Error(ex, $"SuccessStory [{FileName} {LineNumber}] - Failed to load item from {objectFile}. ");
                }
            });
        }
        // Add code to be executed when Playnite is initialized.
        public override void OnApplicationStarted()
        {
            successStoryUI.AddBtHeader();

            // Cache images
            if (settings.EnableImageCache)
            {
                CancellationToken ct = tokenSource.Token;
                var TaskCacheImage   = Task.Run(() =>
                {
                    // Wait Playnite & extension database are loaded
                    Thread.Sleep(50000);
#if DEBUG
                    logger.Debug($"SuccessStory [Ignored] - TaskCacheImage - {PlayniteApi.Database.Games.Count} - Start");
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
#endif
                    foreach (Game game in PlayniteApi.Database.Games)
                    {
                        try
                        {
                            Models.GameAchievements successStories = PluginDatabase.GetOnlyCache(game.Id);
                            if (successStories != null && successStories.HaveAchivements)
                            {
#if DEBUG
                                logger.Debug($"SuccessStory [Ignored] - TaskCacheImage - {game.Name} - {successStories.Items.Count}");
#endif
                                foreach (var achievement in successStories.Items)
                                {
                                    if (!achievement.UrlLocked.IsNullOrEmpty() && PlayniteTools.GetCacheFile(achievement.CacheLocked, "SuccessStory").IsNullOrEmpty())
                                    {
#if DEBUG
                                        logger.Debug($"SuccessStory [Ignored] - TaskCacheImage.DownloadFileImage - {game.Name} - GetCacheFile({achievement.Name}" + "_Locked)");
#endif
                                        Web.DownloadFileImage(achievement.CacheLocked, achievement.UrlLocked, PlaynitePaths.ImagesCachePath, "SuccessStory").GetAwaiter().GetResult();
                                    }

                                    if (ct.IsCancellationRequested)
                                    {
                                        logger.Info($"IsCancellationRequested for TaskCacheImage()");
                                        break;
                                    }

                                    if (PlayniteTools.GetCacheFile(achievement.CacheUnlocked, "SuccessStory").IsNullOrEmpty())
                                    {
#if DEBUG
                                        logger.Debug($"SuccessStory [Ignored] - TaskCacheImage.DownloadFileImage - {game.Name} - GetCacheFile({achievement.Name}" + "_Unlocked)");
#endif
                                        Web.DownloadFileImage(achievement.CacheUnlocked, achievement.UrlUnlocked, PlaynitePaths.ImagesCachePath, "SuccessStory").GetAwaiter().GetResult();
                                    }

                                    if (ct.IsCancellationRequested)
                                    {
                                        logger.Info($"IsCancellationRequested for TaskCacheImage()");
                                        break;
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
#if DEBUG
                            Common.LogError(ex, "SuccessStory [Ignored]", $"Error on TaskCacheImage");
#endif
                        }
                    }

#if DEBUG
                    stopwatch.Stop();
                    TimeSpan ts = stopwatch.Elapsed;
                    logger.Debug($"SuccessStory [Ignored] - TaskCacheImage() - End - {String.Format("{0:00}:{1:00}.{2:00}", ts.Minutes, ts.Seconds, ts.Milliseconds / 10)}");
#endif
                }, tokenSource.Token);
            }
        }
        /// <summary>
        /// Initialize database / create directory.
        /// </summary>
        /// <param name="PlayniteApi"></param>
        /// <param name="PluginUserDataPath"></param>
        public void Initialize(bool ignore = true)
        {
            ListErrors = new CumulErrors();

            PluginDatabase = new ConcurrentDictionary <Guid, GameAchievements>();

            Parallel.ForEach(Directory.EnumerateFiles(PluginDatabasePath, "*.json"), (objectFile) =>
            {
                try
                {
                    // Get game achievements.
                    Guid gameId = Guid.Parse(objectFile.Replace(PluginDatabasePath, string.Empty).Replace(".json", string.Empty));

                    bool IncludeGame = true;
                    if (!_settings.IncludeHiddenGames)
                    {
                        Game tempGame = _PlayniteApi.Database.Games.Get(gameId);

                        if (tempGame != null)
                        {
                            IncludeGame = !tempGame.Hidden;
                        }
                        else
                        {
                            IncludeGame = false;
#if DEBUG
                            logger.Debug($"SuccessStory - {gameId} is null");
#endif
                        }
                    }

                    if (IncludeGame)
                    {
                        GameAchievements objGameAchievements = JsonConvert.DeserializeObject <GameAchievements>(File.ReadAllText(objectFile));

                        // Set game achievements in database.
                        PluginDatabase.TryAdd(gameId, objGameAchievements);
                    }
                }
                catch (Exception ex)
                {
                    Common.LogError(ex, "SuccessStory", $"Failed to load item from { objectFile}");
                    ListErrors.Add($"SuccessStory - Failed to load item from {objectFile}");
                }
            });

            // Filters
            if (_settings.EnableRetroAchievementsView && !ignore)
            {
                if (_isRetroachievements)
                {
                    var a = PluginDatabase.Where(x => IsEmulatedGame(x));
                    var b = a.ToDictionary(x => x.Key, x => x.Value);
                    PluginDatabase = ToConcurrent(b);
                }
                else
                {
                    var a = PluginDatabase.Where(x => !IsEmulatedGame(x));
                    var b = a.ToDictionary(x => x.Key, x => x.Value);
                    PluginDatabase = ToConcurrent(b);
                }
            }

            if (ListErrors.Get() != string.Empty)
            {
                _PlayniteApi.Dialogs.ShowErrorMessage(ListErrors.Get(), "SuccessStory errors");
            }

            ListErrors = new CumulErrors();
        }
        /// <summary>
        /// Generate database achivements for the game if achievement exist and game not exist in database.
        /// </summary>
        /// <param name="GameAdded"></param>
        public void Add(Game GameAdded, SuccessStorySettings settings)
        {
            GameAchievements GameAchievements = new GameAchievements();

            Guid   GameId                 = GameAdded.Id;
            Guid   GameSourceId           = GameAdded.SourceId;
            string GameSourceName         = PlayniteTools.GetSourceName(GameAdded, _PlayniteApi);
            string PluginDatabaseGamePath = PluginDatabasePath + GameId.ToString() + ".json";

            List <Achievements> Achievements = new List <Achievements>();

            // Generate database only this source
            if (VerifToAddOrShow(_plugin, _PlayniteApi, GameSourceName, settings, _PluginUserDataPath))
            {
                // Generate only not exist
                if (!File.Exists(PluginDatabaseGamePath))
                {
#if DEBUG
                    logger.Debug($"SuccessStory - VerifToAddOrShow({GameAdded.Name}, {GameSourceName}) - OK");
#endif

                    // TODO one func
                    if (GameSourceName.ToLower() == "gog")
                    {
                        if (gogAPI == null)
                        {
                            gogAPI = new GogAchievements(_PlayniteApi, settings, _PluginUserDataPath);
                        }
                        GameAchievements = gogAPI.GetAchievements(GameAdded);
                    }

                    if (GameSourceName.ToLower() == "steam")
                    {
                        SteamAchievements steamAPI = new SteamAchievements(_PlayniteApi, settings, _PluginUserDataPath);
                        GameAchievements = steamAPI.GetAchievements(GameAdded);
                    }

                    if (GameSourceName.ToLower() == "origin")
                    {
                        if (originAPI == null)
                        {
                            originAPI = new OriginAchievements(_PlayniteApi, settings, _PluginUserDataPath);
                        }
                        GameAchievements = originAPI.GetAchievements(GameAdded);
                    }

                    if (GameSourceName.ToLower() == "xbox")
                    {
                        if (xboxAPI == null)
                        {
                            xboxAPI = new XboxAchievements(_PlayniteApi, settings, _PluginUserDataPath);
                        }
                        GameAchievements = xboxAPI.GetAchievements(GameAdded);
                    }

                    if (GameSourceName.ToLower() == "playnite")
                    {
                        SteamAchievements steamAPI = new SteamAchievements(_PlayniteApi, settings, _PluginUserDataPath);
                        steamAPI.SetLocal();
                        GameAchievements = steamAPI.GetAchievements(GameAdded);
                    }

                    if (GameSourceName.ToLower() == "retroachievements")
                    {
                        RetroAchievements retroAchievementsAPI = new RetroAchievements(_PlayniteApi, settings, _PluginUserDataPath);
                        GameAchievements = retroAchievementsAPI.GetAchievements(GameAdded);
                    }

#if DEBUG
                    logger.Debug($"SuccessStory - Achievements for {GameAdded.Name} - {GameSourceName} - {JsonConvert.SerializeObject(GameAchievements)}");
#endif

                    if (GameAchievements != null)
                    {
                        File.WriteAllText(PluginDatabaseGamePath, JsonConvert.SerializeObject(GameAchievements));
                    }
                }
            }
            else
            {
#if DEBUG
                logger.Debug($"SuccessStory - VerifToAddOrShow({GameAdded.Name}, {GameSourceName}) - KO");
#endif
            }
        }
        /// <summary>
        /// Generate database achivements for the game if achievement exist and game not exist in database.
        /// </summary>
        /// <param name="GameAdded"></param>
        public void Add(Game GameAdded, SuccessStorySettings settings)
        {
            GameAchievements GameAchievements = new GameAchievements();

            Guid   GameId         = GameAdded.Id;
            Guid   GameSourceId   = GameAdded.SourceId;
            string GameSourceName = "";

            List <Guid> ListEmulators = new List <Guid>();

            foreach (var item in PlayniteApi.Database.Emulators)
            {
                ListEmulators.Add(item.Id);
            }

            if (GameSourceId != Guid.Parse("00000000-0000-0000-0000-000000000000"))
            {
                GameSourceName = GameAdded.Source.Name;

                if (GameAdded.PlayAction != null && GameAdded.PlayAction.EmulatorId != null && ListEmulators.Contains(GameAdded.PlayAction.EmulatorId))
                {
                    GameSourceName = "RetroAchievements";
                }
            }
            else
            {
                if (GameAdded.PlayAction != null && GameAdded.PlayAction.EmulatorId != null && ListEmulators.Contains(GameAdded.PlayAction.EmulatorId))
                {
                    GameSourceName = "RetroAchievements";
                }
                else
                {
                    GameSourceName = "Playnite";
                }
            }


            string PluginDatabaseGamePath = PluginDatabasePath + GameId.ToString() + ".json";

            List <Achievements> Achievements = new List <Achievements>();

            // Generate database only this source
            if (VerifToAddOrShow(GameSourceName, settings, PluginUserDataPath))
            {
                // Generate only not exist
                if (!File.Exists(PluginDatabaseGamePath))
                {
                    // TODO one func
                    if (GameSourceName.ToLower() == "gog")
                    {
                        if (gogAPI == null)
                        {
                            gogAPI = new GogAchievements(PlayniteApi);
                        }
                        GameAchievements = gogAPI.GetAchievements(PlayniteApi, GameId);
                    }

                    if (GameSourceName.ToLower() == "steam")
                    {
                        SteamAchievements steamAPI = new SteamAchievements();
                        GameAchievements = steamAPI.GetAchievements(PlayniteApi, GameId, PluginUserDataPath);
                    }

                    if (GameSourceName.ToLower() == "origin")
                    {
                        if (originAPI == null)
                        {
                            originAPI = new OriginAchievements(PlayniteApi);
                        }
                        GameAchievements = originAPI.GetAchievements(PlayniteApi, GameId);
                    }

                    if (GameSourceName.ToLower() == "playnite")
                    {
                        SteamAchievements steamAPI = new SteamAchievements();
                        GameAchievements = steamAPI.GetAchievements(PlayniteApi, GameId, PluginUserDataPath, settings.EnableLocal);
                    }

                    if (GameSourceName.ToLower() == "retroachievements")
                    {
                        RetroAchievements retroAchievementsAPI = new RetroAchievements(settings);
                        GameAchievements = retroAchievementsAPI.GetAchievements(PlayniteApi, GameId, PluginUserDataPath);
                    }

                    if (GameAchievements != null)
                    {
                        File.WriteAllText(PluginDatabaseGamePath, JsonConvert.SerializeObject(GameAchievements));
                    }
                }
            }
        }
Example #11
0
        /// <summary>
        /// Generate database achivements for the game if achievement exist and game not exist in database.
        /// </summary>
        /// <param name="GameAdded"></param>
        public void Add(Game GameAdded, SuccessStorySettings settings)
        {
            GameAchievements GameAchievements = new GameAchievements();

            Guid   GameId         = GameAdded.Id;
            Guid   GameSourceId   = GameAdded.SourceId;
            string GameSourceName = "";

            if (GameSourceId != Guid.Parse("00000000-0000-0000-0000-000000000000"))
            {
                GameSourceName = GameAdded.Source.Name;
            }
            else
            {
                GameSourceName = "Playnite";
            }

            string PluginDatabaseGamePath = PluginDatabasePath + GameId.ToString() + ".json";

            List <Achievements> Achievements = new List <Achievements>();

            // Generate database only this source
            if (VerifToAddOrShow(GameSourceName, settings))
            {
                // Generate only not exist
                if (!File.Exists(PluginDatabaseGamePath))
                {
                    // TODO one func
                    if (GameSourceName.ToLower() == "gog")
                    {
                        if (gogAPI == null)
                        {
                            gogAPI = new GogAchievements(PlayniteApi);
                        }
                        GameAchievements = gogAPI.GetAchievements(PlayniteApi, GameId);
                    }

                    if (GameSourceName.ToLower() == "steam")
                    {
                        SteamAchievements steamAPI = new SteamAchievements();
                        GameAchievements = steamAPI.GetAchievements(PlayniteApi, GameId, PluginUserDataPath);
                    }

                    if (GameSourceName.ToLower() == "origin")
                    {
                        if (originAPI == null)
                        {
                            originAPI = new OriginAchievements(PlayniteApi);
                        }
                        GameAchievements = originAPI.GetAchievements(PlayniteApi, GameId);
                    }

                    if (GameSourceName.ToLower() == "playnite")
                    {
                        SteamAchievements steamAPI = new SteamAchievements();
                        GameAchievements = steamAPI.GetAchievements(PlayniteApi, GameId, PluginUserDataPath, settings.EnableLocal);
                    }

                    File.WriteAllText(PluginDatabaseGamePath, JsonConvert.SerializeObject(GameAchievements));
                }
            }
        }