private RA_Games GetGameList(int consoleID, string PluginUserDataPath)
        {
            string Target = "API_GetGameList.php";
            string url    = string.Format(BaseUrl + Target + @"?z={0}&y={1}&i={2}", User, Key, consoleID);

            RA_Games resultObj = new RA_Games();

            string fileConsoles = PluginUserDataPath + "\\RA_Games_" + consoleID + ".json";

            if (File.Exists(fileConsoles))
            {
                resultObj = JsonConvert.DeserializeObject <RA_Games>(File.ReadAllText(fileConsoles));
                return(resultObj);
            }

            string ResultWeb = string.Empty;

            try
            {
                ResultWeb = Web.DownloadStringData(url).GetAwaiter().GetResult();
            }
            catch (WebException ex)
            {
                Common.LogError(ex, "SuccessStory", $"Failed to load from {url}");
            }

            try
            {
                resultObj.ListGames = JsonConvert.DeserializeObject <List <RA_Game> >(ResultWeb);
                File.WriteAllText(fileConsoles, JsonConvert.SerializeObject(resultObj));
            }
            catch (Exception ex)
            {
                Common.LogError(ex, "SuccessStory", $"Failed to parse {ResultWeb}");
            }

            return(resultObj);
        }
        private int GetGameIdByName(Game game, RA_Consoles ra_Consoles)
        {
            string GameName = game.Name;

            // Search id console for the game
            string PlatformName = game.Platform.Name;
            int    consoleID    = 0;

            var FindConsole = ra_Consoles.ListConsoles.Find(x => PlatformName.ToLower().Contains(x.Name.ToLower()));

            if (FindConsole != null)
            {
                consoleID = FindConsole.ID;
            }

            if (consoleID != 0)
            {
                foreach (RA_Console ra_Console in ra_Consoles.ListConsoles)
                {
                    string NameConsole = ra_Console.Name.ToLower();
                    if (NameConsole == "snes")
                    {
                        NameConsole = "super nintendo";
                    }
                    if (NameConsole == "nes")
                    {
                        NameConsole = "nintendo";
                    }
                    if (NameConsole == "mega drive")
                    {
                        NameConsole = "sega genesis";
                    }

                    if (PlatformName.ToLower().IndexOf(NameConsole) > -1)
                    {
                        consoleID = ra_Console.ID;
                        break;
                    }
                }
            }

            // Search game id
            int gameID = 0;

            if (consoleID != 0)
            {
                RA_Games ra_Games = GetGameList(consoleID, _PluginUserDataPath);
                ra_Games.ListGames.Sort((x, y) => (y.Title).CompareTo(x.Title));
                foreach (RA_Game ra_Game in ra_Games.ListGames)
                {
                    string Title = ra_Game.Title.Trim().ToLower();
                    if (GameName.Trim().ToLower() == Title && gameID == 0)
                    {
                        logger.Info($"SuccessStory - Find for {GameName.Trim().ToLower()} / {Title} with {PlatformName} in {consoleID}");
                        gameID = ra_Game.ID;
                        break;
                    }

                    string[] TitleSplits = Title.Split('|');
                    if (TitleSplits.Length > 1)
                    {
                        foreach (string TitleSplit in TitleSplits)
                        {
                            if (GameName.Trim().ToLower() == TitleSplit.Trim() && gameID == 0)
                            {
                                logger.Info($"SuccessStory - Find for {GameName.Trim().ToLower()} / {TitleSplit.Trim()} with {PlatformName} in {consoleID}");
                                gameID = ra_Game.ID;
                                break;
                            }
                        }
                    }

                    TitleSplits = Title.Split('-');
                    if (TitleSplits.Length > 1)
                    {
                        foreach (string TitleSplit in TitleSplits)
                        {
                            if (GameName.Trim().ToLower() == TitleSplit.Trim() && gameID == 0)
                            {
                                logger.Info($"SuccessStory - Find for {GameName.Trim().ToLower()} / {TitleSplit.Trim()} with {PlatformName} in {consoleID}");
                                gameID = ra_Game.ID;
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                logger.Warn($"SuccessStory - No console find for {GameName} with {PlatformName}");
            }

            if (gameID == 0)
            {
                logger.Warn($"SuccessStory - No game find for {GameName} with {PlatformName} in {consoleID}");
            }

            return(gameID);
        }
Beispiel #3
0
        public GameAchievements GetAchievements(IPlayniteAPI PlayniteApi, Guid Id, string PluginUserDataPath)
        {
            List <Achievements> Achievements = new List <Achievements>();
            Game   game            = PlayniteApi.Database.Games.Get(Id);
            string GameName        = game.Name;
            string ClientId        = game.PlayAction.EmulatorId.ToString();
            bool   HaveAchivements = false;
            int    Total           = 0;
            int    Unlocked        = 0;
            int    Locked          = 0;

            GameAchievements Result = new GameAchievements
            {
                Name            = GameName,
                HaveAchivements = HaveAchivements,
                IsEmulators     = true,
                Total           = Total,
                Unlocked        = Unlocked,
                Locked          = Locked,
                Progression     = 0,
                Achievements    = Achievements
            };


            if (User == "" || Key == "")
            {
                logger.Error($"SuccessStory - No RetroAchievement configuration.");
                AchievementsDatabase.ListErrors.Add($"Error on RetroAchievement: no RetroAchievement configuration in settings menu of plugin.");
                return(null);
            }

            // Load list console
            RA_Consoles ra_Consoles = GetConsoleIDs(PluginUserDataPath);

            ra_Consoles.ListConsoles.Sort((x, y) => (y.Name).CompareTo(x.Name));

            // Search id console for the game
            string PlatformName = game.Platform.Name;
            int    consoleID    = 0;

            foreach (RA_Console ra_Console in ra_Consoles.ListConsoles)
            {
                string NameConsole = ra_Console.Name.ToLower();
                if (NameConsole == "snes")
                {
                    NameConsole = "super nintendo";
                }
                if (NameConsole == "nes")
                {
                    NameConsole = "nintendo";
                }
                if (NameConsole == "mega drive")
                {
                    NameConsole = "sega genesis";
                }

                if (PlatformName.ToLower().IndexOf(NameConsole) > -1)
                {
                    consoleID = ra_Console.ID;
                    break;
                }
            }

            // Search game id
            int gameID = 0;

            if (consoleID != 0)
            {
                RA_Games ra_Games = GetGameList(consoleID, PluginUserDataPath);
                ra_Games.ListGames.Sort((x, y) => (y.Title).CompareTo(x.Title));
                foreach (RA_Game ra_Game in ra_Games.ListGames)
                {
                    string Title = ra_Game.Title.Trim().ToLower();
                    //logger.Debug($"SuccessStory - {GameName.Trim().ToLower()} / {Title} / {gameID}");
                    if (GameName.Trim().ToLower() == Title && gameID == 0)
                    {
                        logger.Info($"SuccessStory - Find for {GameName.Trim().ToLower()} / {Title} with {PlatformName} in {consoleID}");
                        gameID = ra_Game.ID;
                        break;
                    }

                    string[] TitleSplits = Title.Split('|');
                    if (TitleSplits.Length > 1)
                    {
                        foreach (string TitleSplit in TitleSplits)
                        {
                            //logger.Debug($"SuccessStory - {GameName.Trim().ToLower()} / {TitleSplit.Trim()} / {gameID}");
                            if (GameName.Trim().ToLower() == TitleSplit.Trim() && gameID == 0)
                            {
                                logger.Info($"SuccessStory - Find for {GameName.Trim().ToLower()} / {TitleSplit.Trim()} with {PlatformName} in {consoleID}");
                                gameID = ra_Game.ID;
                                break;
                            }
                        }
                    }

                    TitleSplits = Title.Split('-');
                    if (TitleSplits.Length > 1)
                    {
                        foreach (string TitleSplit in TitleSplits)
                        {
                            //logger.Debug($"SuccessStory - {GameName.Trim().ToLower()} / {TitleSplit.Trim()} / {gameID}");
                            if (GameName.Trim().ToLower() == TitleSplit.Trim() && gameID == 0)
                            {
                                logger.Info($"SuccessStory - Find for {GameName.Trim().ToLower()} / {TitleSplit.Trim()} with {PlatformName} in {consoleID}");
                                gameID = ra_Game.ID;
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                logger.Info($"SuccessStory - No console find for {GameName} with {PlatformName}");
                return(Result);
            }

            // Get achievements
            if (gameID != 0)
            {
                Achievements = GetGameInfoAndUserProgress(gameID);
            }
            else
            {
                logger.Info($"SuccessStory - No game find for {GameName} with {PlatformName} in {consoleID}");
                return(Result);
            }

            Result.HaveAchivements = (Achievements.Count > 0);
            Result.Achievements    = Achievements;
            Result.Total           = Achievements.Count;
            Result.Unlocked        = Achievements.FindAll(x => x.DateUnlocked != default(DateTime)).Count;
            Result.Locked          = Result.Total - Result.Unlocked;
            Result.Progression     = (Result.Total != 0) ? (int)Math.Ceiling((double)(Result.Unlocked * 100 / Result.Total)) : 0;


            return(Result);
        }