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(); }
/// <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)); } } } }
/// <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)); } } }