public bool DownloadSteamLogo(Game game, bool overwrite, bool isBackgroundDownload) { logger.Debug($"DownloadSteamLogo starting for game {game.Name}"); var logoPath = extraMetadataHelper.GetGameLogoPath(game, true); if (File.Exists(logoPath) && !overwrite) { logger.Debug("Logo exists and overwrite is set to false, skipping"); return(true); } var steamId = string.Empty; if (SteamCommon.IsGameSteamGame(game)) { logger.Debug("Steam id found for Steam game"); steamId = game.GameId; } else if (!settings.SteamDlOnlyProcessPcGames || extraMetadataHelper.IsGamePcGame(game)) { steamId = extraMetadataHelper.GetSteamIdFromSearch(game, isBackgroundDownload); } else { logger.Debug("Game is not a PC game and execution is only allowed for PC games"); return(false); } if (steamId.IsNullOrEmpty()) { logger.Debug("Steam id not found"); return(false); } var steamUri = string.Format(steamLogoUriTemplate, steamId); var success = HttpDownloader.DownloadFileAsync(steamUri, logoPath).GetAwaiter().GetResult(); if (success && settings.ProcessLogosOnDownload) { ProcessLogoImage(logoPath); } return(success); }
public override IEnumerable <GameMenuItem> GetGameMenuItems(GetGameMenuItemsArgs args) { var logosSection = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemSectionLogos"); var videosSection = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemSectionVideos"); var videosMicroSection = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemSectionMicrovideos"); //TODO Move each action to separate methods? var gameMenuItems = new List <GameMenuItem> { new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionDownloadSteamLogosSelectedGames"), MenuSection = $"Extra Metadata|{logosSection}", Action = _ => { var overwrite = GetBoolFromYesNoDialog(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageOverwriteLogosChoice")); var progressOptions = new GlobalProgressOptions(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDownloadingLogosSteam"), true); progressOptions.IsIndeterminate = false; PlayniteApi.Dialogs.ActivateGlobalProgress((a) => { var games = args.Games.Distinct(); a.ProgressMaxValue = games.Count(); foreach (var game in games) { if (a.CancelToken.IsCancellationRequested) { break; } logosDownloader.DownloadSteamLogo(game, overwrite, false); a.CurrentProgressValue++; } ; }, progressOptions); PlayniteApi.Dialogs.ShowMessage(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDone"), "Extra Metadata Loader"); } }, new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionDownloadSgdbLogosSelectedGames"), MenuSection = $"Extra Metadata|{logosSection}", Action = _ => { var overwrite = GetBoolFromYesNoDialog(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageOverwriteLogosChoice")); var progressOptions = new GlobalProgressOptions(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDownloadingLogosSgdb"), true); progressOptions.IsIndeterminate = false; PlayniteApi.Dialogs.ActivateGlobalProgress((a) => { var games = args.Games.Distinct(); a.ProgressMaxValue = games.Count(); foreach (var game in games) { if (a.CancelToken.IsCancellationRequested) { break; } logosDownloader.DownloadSgdbLogo(game, overwrite, false); a.CurrentProgressValue++; } ; }, progressOptions); PlayniteApi.Dialogs.ShowMessage(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDone"), "Extra Metadata Loader"); } }, new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionDownloadGoogleLogoSelectedGame"), MenuSection = $"Extra Metadata|{logosSection}", Action = _ => { CreateGoogleWindow(); } }, new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionSetLogoFromFile"), MenuSection = $"Extra Metadata|{logosSection}", Action = _ => { var game = args.Games.Last(); var filePath = PlayniteApi.Dialogs.SelectFile("Logo|*.png"); if (!filePath.IsNullOrEmpty()) { var logoPath = extraMetadataHelper.GetGameLogoPath(game, true); var fileCopied = IoHelper.MoveFile(filePath, logoPath, true); if (settings.Settings.ProcessLogosOnDownload && fileCopied) { logosDownloader.ProcessLogoImage(logoPath); } PlayniteApi.Dialogs.ShowMessage(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDone"), "Extra Metadata Loader"); } } }, new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionDeleteLogosSelectedGames"), MenuSection = $"Extra Metadata|{logosSection}", Action = _ => { foreach (var game in args.Games.Distinct()) { extraMetadataHelper.DeleteGameLogo(game); } ; PlayniteApi.Dialogs.ShowMessage(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDone"), "Extra Metadata Loader"); } }, new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionDownloadSteamVideosSelectedGames"), MenuSection = $"Extra Metadata|{videosSection}|{videosSection}", Action = _ => { if (!ValidateExecutablesSettings(true, false)) { return; } var overwrite = GetBoolFromYesNoDialog(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageOverwriteVideosChoice")); var progressOptions = new GlobalProgressOptions(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDownloadingVideosSteam"), true); progressOptions.IsIndeterminate = false; ClearVideoSources(); PlayniteApi.Dialogs.ActivateGlobalProgress((a) => { var games = args.Games.Distinct(); a.ProgressMaxValue = games.Count(); foreach (var game in games) { if (a.CancelToken.IsCancellationRequested) { break; } videosDownloader.DownloadSteamVideo(game, overwrite, false, true, false); a.CurrentProgressValue++; } ; }, progressOptions); UpdatePlayersData(); PlayniteApi.Dialogs.ShowMessage(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDone"), "Extra Metadata Loader"); } }, new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionDownloadVideoFromYoutube"), MenuSection = $"Extra Metadata|{videosSection}|{videosSection}", Action = _ => { ClearVideoSources(); if (!ValidateExecutablesSettings(true, true)) { return; } CreateYoutubeWindow(); UpdatePlayersData(); } }, new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionDownloadSteamVideosMicroSelectedGames"), MenuSection = $"Extra Metadata|{videosSection}|{videosMicroSection}", Action = _ => { if (!ValidateExecutablesSettings(true, false)) { return; } ClearVideoSources(); var overwrite = GetBoolFromYesNoDialog(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageOverwriteVideosChoice")); var progressOptions = new GlobalProgressOptions(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDownloadingVideosMicroSteam"), true); progressOptions.IsIndeterminate = false; PlayniteApi.Dialogs.ActivateGlobalProgress((a) => { var games = args.Games.Distinct(); a.ProgressMaxValue = games.Count(); foreach (var game in games) { if (a.CancelToken.IsCancellationRequested) { break; } videosDownloader.DownloadSteamVideo(game, overwrite, false, false, true); a.CurrentProgressValue++; } ; }, progressOptions); UpdatePlayersData(); PlayniteApi.Dialogs.ShowMessage(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDone"), "Extra Metadata Loader"); } }, new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionOpenExtraMetadataDirectory"), MenuSection = $"Extra Metadata", Action = _ => { foreach (var game in args.Games.Distinct()) { Process.Start(extraMetadataHelper.GetExtraMetadataDirectory(game, true)); } ; } }, new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionGenerateMicroFromVideo"), MenuSection = $"Extra Metadata|{videosSection}|{videosMicroSection}", Action = _ => { if (!ValidateExecutablesSettings(true, false)) { return; } ClearVideoSources(); var overwrite = GetBoolFromYesNoDialog(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageOverwriteVideosChoice")); var progressOptions = new GlobalProgressOptions(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageGeneratingMicroVideosFromVideos"), true); progressOptions.IsIndeterminate = false; PlayniteApi.Dialogs.ActivateGlobalProgress((a) => { var games = args.Games.Distinct(); a.ProgressMaxValue = games.Count(); foreach (var game in games) { if (a.CancelToken.IsCancellationRequested) { break; } videosDownloader.ConvertVideoToMicro(game, overwrite); a.CurrentProgressValue++; } ; }, progressOptions); UpdatePlayersData(); PlayniteApi.Dialogs.ShowMessage(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDone"), "Extra Metadata Loader"); } }, new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionSetVideoFromSelectionToSelGame"), MenuSection = $"Extra Metadata|{videosSection}|{videosSection}", Action = _ => { if (!ValidateExecutablesSettings(true, false)) { return; } ClearVideoSources(); PlayniteApi.Dialogs.ActivateGlobalProgress((a) => { videosDownloader.SelectedDialogFileToVideo(args.Games[0]); }, new GlobalProgressOptions(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogProcessSettingVideoFromSelFile"))); UpdatePlayersData(); PlayniteApi.Dialogs.ShowMessage(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDone"), "Extra Metadata Loader"); } }, new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionDeleteVideosSelectedGames"), MenuSection = $"Extra Metadata|{videosSection}|{videosSection}", Action = _ => { ClearVideoSources(); foreach (var game in args.Games.Distinct()) { extraMetadataHelper.DeleteGameVideo(game); } ; UpdatePlayersData(); PlayniteApi.Dialogs.ShowMessage(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDone"), "Extra Metadata Loader"); } }, new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemDescriptionDeleteVideosMicroSelectedGames"), MenuSection = $"Extra Metadata|{videosSection}|{videosMicroSection}", Action = _ => { ClearVideoSources(); foreach (var game in args.Games.Distinct()) { extraMetadataHelper.DeleteGameVideoMicro(game); } ; UpdatePlayersData(); PlayniteApi.Dialogs.ShowMessage(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageDone"), "Extra Metadata Loader"); } } }; if (settings.Settings.EnableYoutubeSearch) { gameMenuItems.Add(new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemViewYoutubeReview"), MenuSection = $"{videosSection}", Action = _ => { ClearVideoSources(); var game = args.Games.Last(); var searchTerm = $"{game.Name} review"; var searchItems = YoutubeCommon.GetYoutubeSearchResults(searchTerm, false); if (searchItems.Count > 0) { ViewYoutubeVideo(searchItems.First().VideoId); } else { PlayniteApi.Dialogs.ShowMessage(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageVideoNotFound")); } UpdatePlayersData(); } }); gameMenuItems.Add(new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemViewYoutubeGameplay"), MenuSection = $"{videosSection}", Action = _ => { ClearVideoSources(); var game = args.Games.Last(); var searchTerm = $"{game.Name} gameplay"; var searchItems = YoutubeCommon.GetYoutubeSearchResults(searchTerm, false); if (searchItems.Count > 0) { ViewYoutubeVideo(searchItems.First().VideoId); } else { PlayniteApi.Dialogs.ShowMessage(ResourceProvider.GetString("LOCExtra_Metadata_Loader_DialogMessageVideoNotFound")); } UpdatePlayersData(); } }); gameMenuItems.Add(new GameMenuItem { Description = ResourceProvider.GetString("LOCExtra_Metadata_Loader_MenuItemViewYoutubeSearch"), MenuSection = $"{videosSection}", Action = _ => { ClearVideoSources(); var game = args.Games.Last(); var searchTerm = $"{game.Name}"; CreateYoutubeWindow(false, false, searchTerm); UpdatePlayersData(); } }); } return(gameMenuItems); }