├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── question.md │ ├── feature_request.md │ └── bug_report.md └── release.yml ├── source ├── icon.png ├── Models │ ├── ScreeshotsVisualizeCollection.cs │ ├── GameScreenshots.cs │ ├── GameSettings.cs │ └── StartPage │ │ └── SsvCarouselOptions.cs ├── extension.yaml ├── packages.config ├── Controls │ ├── PluginViewItem.xaml │ ├── PluginViewItem.xaml.cs │ ├── PluginSinglePicture.xaml │ ├── ZoomBorder.cs │ ├── PluginButton.xaml.cs │ ├── PluginListScreenshotsVertical.xaml.cs │ ├── PluginButton.xaml │ └── PluginScreenshots.xaml ├── Services │ ├── ScreenshotsVisualizerViewSidebar.cs │ └── ScreenshotsVisualizerTopPanelItem.cs ├── Properties │ └── AssemblyInfo.cs ├── Views │ ├── StartPage │ │ ├── SsvCarouselSettings.xaml.cs │ │ ├── SsvCarousel.xaml │ │ └── SsvCarouselSettings.xaml │ └── SsvSinglePictureView.xaml ├── ScreenshotsVisualizer.sln └── Localization │ ├── zh_CN.xaml │ ├── ar_SA.xaml │ ├── ja_JP.xaml │ ├── LocSource.xaml │ ├── en_US.xaml │ ├── bg_BG.xaml │ ├── ca_ES.xaml │ ├── cs_CZ.xaml │ ├── da_DK.xaml │ ├── el_GR.xaml │ ├── et_EE.xaml │ ├── fa_IR.xaml │ ├── fi_FI.xaml │ ├── gl_ES.xaml │ ├── he_IL.xaml │ ├── hr_HR.xaml │ ├── id_ID.xaml │ ├── ko_KR.xaml │ ├── lt_LT.xaml │ └── nl_NL.xaml ├── forum ├── main_01.jpg ├── main_02.jpg ├── control_01.jpg ├── settings_01.jpg └── settings_02.jpg ├── crowdin.yml ├── screenshots ├── plugin_side.jpg ├── plugin_mainview.jpg ├── plugin_settings.jpg └── thumbs │ ├── plugin_side.jpg │ ├── plugin_mainview.jpg │ └── plugin_settings.jpg ├── .coderabbit.yaml ├── .gitmodules ├── LICENSE ├── README.md └── .gitignore /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | ko_fi: lacro59 2 | -------------------------------------------------------------------------------- /source/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lacro59/playnite-screenshotsvisualizer-plugin/HEAD/source/icon.png -------------------------------------------------------------------------------- /forum/main_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lacro59/playnite-screenshotsvisualizer-plugin/HEAD/forum/main_01.jpg -------------------------------------------------------------------------------- /forum/main_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lacro59/playnite-screenshotsvisualizer-plugin/HEAD/forum/main_02.jpg -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: LocSource.xaml 3 | translation: /%original_path%/%locale_with_underscore%.xaml 4 | -------------------------------------------------------------------------------- /forum/control_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lacro59/playnite-screenshotsvisualizer-plugin/HEAD/forum/control_01.jpg -------------------------------------------------------------------------------- /forum/settings_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lacro59/playnite-screenshotsvisualizer-plugin/HEAD/forum/settings_01.jpg -------------------------------------------------------------------------------- /forum/settings_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lacro59/playnite-screenshotsvisualizer-plugin/HEAD/forum/settings_02.jpg -------------------------------------------------------------------------------- /screenshots/plugin_side.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lacro59/playnite-screenshotsvisualizer-plugin/HEAD/screenshots/plugin_side.jpg -------------------------------------------------------------------------------- /screenshots/plugin_mainview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lacro59/playnite-screenshotsvisualizer-plugin/HEAD/screenshots/plugin_mainview.jpg -------------------------------------------------------------------------------- /screenshots/plugin_settings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lacro59/playnite-screenshotsvisualizer-plugin/HEAD/screenshots/plugin_settings.jpg -------------------------------------------------------------------------------- /.coderabbit.yaml: -------------------------------------------------------------------------------- 1 | # .coderabbit.yaml 2 | 3 | # Ignore pull requests coming from these branches. 4 | ignored_branch: "l10n_master,l10n_devel" 5 | -------------------------------------------------------------------------------- /screenshots/thumbs/plugin_side.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lacro59/playnite-screenshotsvisualizer-plugin/HEAD/screenshots/thumbs/plugin_side.jpg -------------------------------------------------------------------------------- /screenshots/thumbs/plugin_mainview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lacro59/playnite-screenshotsvisualizer-plugin/HEAD/screenshots/thumbs/plugin_mainview.jpg -------------------------------------------------------------------------------- /screenshots/thumbs/plugin_settings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lacro59/playnite-screenshotsvisualizer-plugin/HEAD/screenshots/thumbs/plugin_settings.jpg -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question 3 | about: Ask a question on project 4 | title: '' 5 | labels: question 6 | assignees: '' 7 | --- 8 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "source/playnite-plugincommon"] 2 | path = source/playnite-plugincommon 3 | url = https://github.com/Lacro59/playnite-plugincommon.git 4 | -------------------------------------------------------------------------------- /.github/release.yml: -------------------------------------------------------------------------------- 1 | # .github/release.yml 2 | 3 | changelog: 4 | categories: 5 | - title: 'Fixed:' 6 | labels: 7 | - bug 8 | - title: 'Added:' 9 | labels: 10 | - enhancement 11 | - title: 'Other Changes:' 12 | labels: 13 | - "*" 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the solution you'd like** 11 | A clear and concise description of what you want to happen or implemented. 12 | 13 | **Screenshots** 14 | If applicable, add screenshots to help explain your problem. 15 | -------------------------------------------------------------------------------- /source/Models/ScreeshotsVisualizeCollection.cs: -------------------------------------------------------------------------------- 1 | using CommonPluginsShared.Collections; 2 | using Playnite.SDK; 3 | using System; 4 | using System.Linq; 5 | using System.Text; 6 | 7 | namespace ScreenshotsVisualizer.Models 8 | { 9 | public class ScreeshotsVisualizeCollection : PluginItemCollection 10 | { 11 | public ScreeshotsVisualizeCollection(string path, GameDatabaseCollection type = GameDatabaseCollection.Uknown) : base(path, type) 12 | { 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /source/extension.yaml: -------------------------------------------------------------------------------- 1 | Id: playnite-screenshotsvisualizer-plugin 2 | Name: ScreenshotsVisualizer 3 | Author: Lacro59 4 | Version: 3.4.1 5 | Module: ScreenshotsVisualizer.dll 6 | Type: GenericPlugin 7 | Icon: icon.png 8 | Links: 9 | - Name: Github 10 | Url: https://github.com/Lacro59/playnite-screenshotsvisualizer-plugin 11 | - Name: Issues Tracker 12 | Url: https://github.com/Lacro59/playnite-screenshotsvisualizer-plugin/issues 13 | - Name: Translate 14 | Url: https://crowdin.com/project/playnite-extensions 15 | - Name: Ko-fi (Tips and Donations) 16 | Url: https://ko-fi.com/lacro59 -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 16 | **Expected behavior** 17 | A clear and concise description of what you expected to happen. 18 | 19 | **Screenshots** 20 | If applicable, add screenshots to help explain your problem. 21 | 22 | **Extensions log** 23 | Attach Playnite's `Extensions.log` file. It is located in Playnite's installation directory in the portable version or in `%AppData%\Playnite` (Can be pasted in Explorer) in the installed version 24 | -------------------------------------------------------------------------------- /source/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /source/Controls/PluginViewItem.xaml: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /source/Models/GameScreenshots.cs: -------------------------------------------------------------------------------- 1 | using CommonPluginsShared.Collections; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.IO; 6 | using Playnite.SDK.Data; 7 | 8 | namespace ScreenshotsVisualizer.Models 9 | { 10 | public class GameScreenshots : PluginDataBaseGame 11 | { 12 | private List items = new List(); 13 | public override List Items { get => items; set => SetValue(ref items, value); } 14 | 15 | public List ScreenshotsFolders { get; set; } 16 | 17 | [DontSerialize] 18 | public bool FoldersExist 19 | { 20 | get 21 | { 22 | foreach(string Folder in ScreenshotsFolders) 23 | { 24 | if (Directory.Exists(Folder)) 25 | { 26 | return true; 27 | } 28 | } 29 | 30 | return false; 31 | } 32 | } 33 | 34 | [DontSerialize] 35 | public bool InSettings { get; set; } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Lacro59 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /source/Models/GameSettings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using CommonPluginsStores; 6 | using Playnite.SDK; 7 | 8 | namespace ScreenshotsVisualizer.Models 9 | { 10 | public class GameSettings 11 | { 12 | public Guid Id { get; set; } 13 | public List ScreenshotsFolders { get; set; } 14 | 15 | // TODO TEMP 16 | public bool ScanSubFolders { get; set; } 17 | public bool UsedFilePattern { get; set; } 18 | public string FilePattern { get; set; } 19 | public string ScreenshotsFolder { get; set; } 20 | 21 | public List GetScreenshotsFolders() 22 | { 23 | return ScreenshotsFolders 24 | .Select(x => PlayniteTools.StringExpandWithStores(API.Instance.Database.Games.Get(Id), x.ScreenshotsFolder)) 25 | .ToList(); 26 | } 27 | } 28 | 29 | 30 | public class FolderSettings 31 | { 32 | public bool ScanSubFolders { get; set; } 33 | public bool UsedFilePattern { get; set; } 34 | public string FilePattern { get; set; } 35 | public string ScreenshotsFolder { get; set; } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /source/Services/ScreenshotsVisualizerViewSidebar.cs: -------------------------------------------------------------------------------- 1 | using CommonPluginsShared.Controls; 2 | using Playnite.SDK; 3 | using Playnite.SDK.Plugins; 4 | using ScreenshotsVisualizer.Views; 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Linq; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | using System.Windows.Controls; 11 | using System.Windows.Media; 12 | 13 | namespace ScreenshotsVisualizer.Services 14 | { 15 | public class ScreenshotsVisualizerViewSidebar : SidebarItem 16 | { 17 | public ScreenshotsVisualizerViewSidebar(ScreenshotsVisualizer plugin) 18 | { 19 | Type = SiderbarItemType.View; 20 | Title = ResourceProvider.GetString("LOCSsv"); 21 | Icon = new TextBlock 22 | { 23 | Text = "\uea38", 24 | FontFamily = ResourceProvider.GetResource("CommonFont") as FontFamily 25 | }; 26 | Opened = () => 27 | { 28 | if (plugin.SidebarItemControl == null) 29 | { 30 | plugin.SidebarItemControl = new SidebarItemControl(); 31 | plugin.SidebarItemControl.SetTitle(ResourceProvider.GetString("LOCSsv")); 32 | plugin.SidebarItemControl.AddContent(new SsvScreenshotsManager()); 33 | } 34 | 35 | return plugin.SidebarItemControl; 36 | }; 37 | Visible = plugin.PluginSettings.Settings.EnableIntegrationButtonSide; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /source/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("ScreenshotsVisualizer")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("ScreenshotsVisualizer")] 13 | [assembly: AssemblyCopyright("Copyright © 2019")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("c6c8276f-91bf-48e5-a1d1-4bee0b493488")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] -------------------------------------------------------------------------------- /source/Services/ScreenshotsVisualizerTopPanelItem.cs: -------------------------------------------------------------------------------- 1 | using CommonPluginsShared; 2 | using Playnite.SDK; 3 | using Playnite.SDK.Plugins; 4 | using ScreenshotsVisualizer.Views; 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Linq; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | using System.Windows; 11 | using System.Windows.Controls; 12 | using System.Windows.Media; 13 | 14 | namespace ScreenshotsVisualizer.Services 15 | { 16 | public class ScreenshotsVisualizerTopPanelItem : TopPanelItem 17 | { 18 | public ScreenshotsVisualizerTopPanelItem(ScreenshotsVisualizer plugin) 19 | { 20 | Icon = new TextBlock 21 | { 22 | Text = "\uea38", 23 | FontSize = 20, 24 | FontFamily = ResourceProvider.GetResource("CommonFont") as FontFamily 25 | }; 26 | Title = ResourceProvider.GetString("LOCSsv"); 27 | Activated = () => 28 | { 29 | WindowOptions windowOptions = new WindowOptions 30 | { 31 | ShowMinimizeButton = false, 32 | ShowMaximizeButton = true, 33 | ShowCloseButton = true, 34 | CanBeResizable = true, 35 | Width = 1280, 36 | Height = 740 37 | }; 38 | 39 | SsvScreenshotsManager ViewExtension = new SsvScreenshotsManager(); 40 | Window windowExtension = PlayniteUiHelper.CreateExtensionWindow(ResourceProvider.GetString("LOCSsv"), ViewExtension, windowOptions); 41 | _ = windowExtension.ShowDialog(); 42 | }; 43 | Visible = plugin.PluginSettings.Settings.EnableIntegrationButtonHeader; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /source/Models/StartPage/SsvCarouselOptions.cs: -------------------------------------------------------------------------------- 1 | using CommonPluginsShared.Models; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace ScreenshotsVisualizer.Models.StartPage 9 | { 10 | public class SsvCarouselOptions : ObservableObject 11 | { 12 | private double margin = 10; 13 | public double Margin { get => margin; set => SetValue(ref margin, value); } 14 | 15 | 16 | private bool enableAllRandom = true; 17 | public bool EnableAllRandom { get => enableAllRandom; set => SetValue(ref enableAllRandom, value); } 18 | 19 | private bool enableLowerRezolution = true; 20 | public bool EnableLowerRezolution { get => enableLowerRezolution; set => SetValue(ref enableLowerRezolution, value); } 21 | 22 | private bool enableAutoChange = true; 23 | public bool EnableAutoChange { get => enableAutoChange; set => SetValue(ref enableAutoChange, value); } 24 | 25 | private int time = 10; 26 | public int Time { get => time; set => SetValue(ref time, value); } 27 | 28 | private int limitPerGame = 10; 29 | public int LimitPerGame { get => limitPerGame; set => SetValue(ref limitPerGame, value); } 30 | 31 | private int limitGame = 0; 32 | public int LimitGame { get => limitGame; set => SetValue(ref limitGame, value); } 33 | 34 | private bool onlyMostRecent = true; 35 | public bool OnlyMostRecent { get => onlyMostRecent; set => SetValue(ref onlyMostRecent, value); } 36 | 37 | private bool onlyFavorite = false; 38 | public bool OnlyFavorite { get => onlyFavorite; set => SetValue(ref onlyFavorite, value); } 39 | 40 | private bool withVideo = false; 41 | public bool WithVideo { get => withVideo; set => SetValue(ref withVideo, value); } 42 | 43 | private bool addGameName = true; 44 | public bool AddGameName { get => addGameName; set => SetValue(ref addGameName, value); } 45 | 46 | private List sourcesList = new List(); 47 | public List SourcesList { get => sourcesList; set => SetValue(ref sourcesList, value); } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /source/Controls/PluginViewItem.xaml.cs: -------------------------------------------------------------------------------- 1 | using CommonPluginsShared.Collections; 2 | using CommonPluginsShared.Controls; 3 | using CommonPluginsShared.Interfaces; 4 | using Playnite.SDK; 5 | using Playnite.SDK.Models; 6 | using ScreenshotsVisualizer.Models; 7 | using ScreenshotsVisualizer.Services; 8 | using System; 9 | using System.Collections.Generic; 10 | using System.Text; 11 | using System.Threading.Tasks; 12 | using System.Windows; 13 | 14 | namespace ScreenshotsVisualizer.Controls 15 | { 16 | /// 17 | /// Logique d'interaction pour PluginViewItem.xaml 18 | /// 19 | public partial class PluginViewItem : PluginUserControlExtend 20 | { 21 | private ScreenshotsVisualizerDatabase PluginDatabase => ScreenshotsVisualizer.PluginDatabase; 22 | internal override IPluginDatabase pluginDatabase => PluginDatabase; 23 | 24 | private PluginViewItemDataContext ControlDataContext = new PluginViewItemDataContext(); 25 | internal override IDataContext controlDataContext 26 | { 27 | get => ControlDataContext; 28 | set => ControlDataContext = (PluginViewItemDataContext)controlDataContext; 29 | } 30 | 31 | 32 | public PluginViewItem() 33 | { 34 | InitializeComponent(); 35 | this.DataContext = ControlDataContext; 36 | 37 | _ = Task.Run(() => 38 | { 39 | // Wait extension database are loaded 40 | _ = System.Threading.SpinWait.SpinUntil(() => PluginDatabase.IsLoaded, -1); 41 | 42 | _ = Application.Current.Dispatcher.BeginInvoke((Action)delegate 43 | { 44 | PluginDatabase.PluginSettings.PropertyChanged += PluginSettings_PropertyChanged; 45 | PluginDatabase.Database.ItemUpdated += Database_ItemUpdated; 46 | PluginDatabase.Database.ItemCollectionChanged += Database_ItemCollectionChanged; 47 | API.Instance.Database.Games.ItemUpdated += Games_ItemUpdated; 48 | 49 | // Apply settings 50 | PluginSettings_PropertyChanged(null, null); 51 | }); 52 | }); 53 | } 54 | 55 | 56 | public override void SetDefaultDataContext() 57 | { 58 | ControlDataContext.IsActivated = PluginDatabase.PluginSettings.Settings.EnableIntegrationViewItem; 59 | ControlDataContext.Text = "\uea38"; 60 | } 61 | 62 | 63 | public override void SetData(Game newContext, PluginDataBaseGameBase PluginGameData) 64 | { 65 | GameScreenshots gameScreenshots = (GameScreenshots)PluginGameData; 66 | } 67 | } 68 | 69 | 70 | public class PluginViewItemDataContext : ObservableObject, IDataContext 71 | { 72 | private bool isActivated; 73 | public bool IsActivated { get => isActivated; set => SetValue(ref isActivated, value); } 74 | 75 | private string text = "\uea38"; 76 | public string Text { get => text; set => SetValue(ref text, value); } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /source/Views/StartPage/SsvCarouselSettings.xaml.cs: -------------------------------------------------------------------------------- 1 | using ScreenshotsVisualizer.Services; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using System.Windows.Controls; 9 | using System.Windows.Data; 10 | using System.Windows.Documents; 11 | using System.Windows.Input; 12 | using System.Windows.Media; 13 | using System.Windows.Media.Imaging; 14 | using System.Windows.Navigation; 15 | using System.Windows.Shapes; 16 | 17 | namespace ScreenshotsVisualizer.Views.StartPage 18 | { 19 | /// 20 | /// Logique d'interaction pour SsvCarouselSettings.xaml 21 | /// 22 | public partial class SsvCarouselSettings : UserControl 23 | { 24 | private ScreenshotsVisualizer plugin { get; } 25 | private ScreenshotsVisualizerDatabase PluginDatabase { get; set; } = ScreenshotsVisualizer.PluginDatabase; 26 | 27 | 28 | private List SearchSources = new List(); 29 | 30 | 31 | public SsvCarouselSettings(ScreenshotsVisualizer plugin) 32 | { 33 | InitializeComponent(); 34 | 35 | this.plugin = plugin; 36 | this.DataContext = PluginDatabase.PluginSettings; 37 | 38 | PluginDatabase.PluginSettings.Settings.ssvCarouselOptions.SourcesList.Where(x => x.IsCheck)?.ForEach(x => 39 | { 40 | SearchSources.Add(x.Name); 41 | }); 42 | 43 | if (SearchSources.Count != 0) 44 | { 45 | FilterSource.Text = string.Join(", ", SearchSources); 46 | } 47 | } 48 | 49 | private void Grid_Unloaded(object sender, RoutedEventArgs e) 50 | { 51 | plugin.SavePluginSettings(PluginDatabase.PluginSettings.Settings); 52 | PluginDatabase.PluginSettings.OnPropertyChanged(); 53 | } 54 | 55 | private void ChkSource_Checked(object sender, RoutedEventArgs e) 56 | { 57 | FilterCbSource((CheckBox)sender); 58 | } 59 | 60 | private void ChkSource_Unchecked(object sender, RoutedEventArgs e) 61 | { 62 | FilterCbSource((CheckBox)sender); 63 | } 64 | 65 | private void FilterCbSource(CheckBox sender) 66 | { 67 | FilterSource.Text = string.Empty; 68 | 69 | int idx = PluginDatabase.PluginSettings.Settings.ssvCarouselOptions.SourcesList.FindIndex(x => x.Name == (string)sender.Tag); 70 | if (idx > -1) 71 | { 72 | PluginDatabase.PluginSettings.Settings.ssvCarouselOptions.SourcesList[idx].IsCheck = (bool)sender.IsChecked; 73 | } 74 | 75 | if ((bool)sender.IsChecked) 76 | { 77 | SearchSources.Add((string)sender.Tag); 78 | } 79 | else 80 | { 81 | SearchSources.Remove((string)sender.Tag); 82 | } 83 | 84 | if (SearchSources.Count != 0) 85 | { 86 | FilterSource.Text = string.Join(", ", SearchSources); 87 | } 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /source/ScreenshotsVisualizer.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.32413.511 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScreenshotsVisualizer", "ScreenshotsVisualizer.csproj", "{4FDF1E89-5BC3-4C72-8FDA-0D580E7A5D5F}" 7 | EndProject 8 | Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "CommonPlayniteShared", "playnite-plugincommon\CommonPlayniteShared\CommonPlayniteShared.shproj", "{0D7DBC82-26AF-49AD-8ED5-0E11AA56BCE0}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommonPluginsResources", "playnite-plugincommon\CommonPluginsResources\CommonPluginsResources.csproj", "{4EFFE926-9C64-4750-A399-F344710EDC09}" 11 | EndProject 12 | Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "CommonPluginsShared", "playnite-plugincommon\CommonPluginsShared\CommonPluginsShared.shproj", "{27E5D35B-F3CE-4A3F-9705-4564674615A5}" 13 | EndProject 14 | Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "CommonPluginsStores", "playnite-plugincommon\CommonPluginsStores\CommonPluginsStores.shproj", "{C066F255-3BFA-4862-A490-09D7933647D4}" 15 | EndProject 16 | Global 17 | GlobalSection(SharedMSBuildProjectFiles) = preSolution 18 | playnite-plugincommon\CommonPlayniteShared\CommonPlayniteShared.projitems*{0d7dbc82-26af-49ad-8ed5-0e11aa56bce0}*SharedItemsImports = 13 19 | playnite-plugincommon\CommonPluginsShared\CommonPluginsShared.projitems*{27e5d35b-f3ce-4a3f-9705-4564674615a5}*SharedItemsImports = 13 20 | playnite-plugincommon\CommonPlayniteShared\CommonPlayniteShared.projitems*{4fdf1e89-5bc3-4c72-8fda-0d580e7a5d5f}*SharedItemsImports = 4 21 | playnite-plugincommon\CommonPluginsShared\CommonPluginsShared.projitems*{4fdf1e89-5bc3-4c72-8fda-0d580e7a5d5f}*SharedItemsImports = 4 22 | playnite-plugincommon\CommonPluginsStores\CommonPluginsStores.projitems*{4fdf1e89-5bc3-4c72-8fda-0d580e7a5d5f}*SharedItemsImports = 4 23 | playnite-plugincommon\CommonPluginsStores\CommonPluginsStores.projitems*{c066f255-3bfa-4862-a490-09d7933647d4}*SharedItemsImports = 13 24 | EndGlobalSection 25 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 26 | Debug|Any CPU = Debug|Any CPU 27 | Debug-Release|Any CPU = Debug-Release|Any CPU 28 | Release|Any CPU = Release|Any CPU 29 | EndGlobalSection 30 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 31 | {4FDF1E89-5BC3-4C72-8FDA-0D580E7A5D5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 32 | {4FDF1E89-5BC3-4C72-8FDA-0D580E7A5D5F}.Debug|Any CPU.Build.0 = Debug|Any CPU 33 | {4FDF1E89-5BC3-4C72-8FDA-0D580E7A5D5F}.Debug-Release|Any CPU.ActiveCfg = Debug-Release|Any CPU 34 | {4FDF1E89-5BC3-4C72-8FDA-0D580E7A5D5F}.Debug-Release|Any CPU.Build.0 = Debug-Release|Any CPU 35 | {4FDF1E89-5BC3-4C72-8FDA-0D580E7A5D5F}.Release|Any CPU.ActiveCfg = Release|Any CPU 36 | {4FDF1E89-5BC3-4C72-8FDA-0D580E7A5D5F}.Release|Any CPU.Build.0 = Release|Any CPU 37 | {4EFFE926-9C64-4750-A399-F344710EDC09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 38 | {4EFFE926-9C64-4750-A399-F344710EDC09}.Debug|Any CPU.Build.0 = Debug|Any CPU 39 | {4EFFE926-9C64-4750-A399-F344710EDC09}.Debug-Release|Any CPU.ActiveCfg = Debug-Release|Any CPU 40 | {4EFFE926-9C64-4750-A399-F344710EDC09}.Debug-Release|Any CPU.Build.0 = Debug-Release|Any CPU 41 | {4EFFE926-9C64-4750-A399-F344710EDC09}.Release|Any CPU.ActiveCfg = Release|Any CPU 42 | {4EFFE926-9C64-4750-A399-F344710EDC09}.Release|Any CPU.Build.0 = Release|Any CPU 43 | EndGlobalSection 44 | GlobalSection(SolutionProperties) = preSolution 45 | HideSolutionNode = FALSE 46 | EndGlobalSection 47 | GlobalSection(ExtensibilityGlobals) = postSolution 48 | SolutionGuid = {BF21D3A6-F61C-4C54-9FD9-0C59C570036C} 49 | EndGlobalSection 50 | EndGlobal 51 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Crowdin](https://badges.crowdin.net/playnite-extensions/localized.svg)](https://crowdin.com/project/playnite-extensions) 2 | [![GitHub release (latest by date)](https://img.shields.io/github/v/release/Lacro59/playnite-screenshotsvisualizer-plugin?cacheSeconds=5000&logo=github)](https://github.com/Lacro59/playnite-screenshotsvisualizer-plugin/releases/latest) 3 | [![GitHub Release Date](https://img.shields.io/github/release-date/Lacro59/playnite-screenshotsvisualizer-plugin?cacheSeconds=5000)](https://github.com/Lacro59/playnite-screenshotsvisualizer-plugin/releases/latest) 4 | [![Github Lastest Releases](https://img.shields.io/github/downloads/Lacro59/playnite-screenshotsvisualizer-plugin/latest/total.svg)]() 5 | [![GitHub commit activity](https://img.shields.io/github/commit-activity/m/Lacro59/playnite-screenshotsvisualizer-plugin)](https://github.com/Lacro59/playnite-screenshotsvisualizer-plugin/graphs/commit-activity) 6 | [![GitHub contributors](https://img.shields.io/github/contributors/Lacro59/playnite-screenshotsvisualizer-plugin?cacheSeconds=5000)](https://github.com/Lacro59/playnite-screenshotsvisualizer-plugin/graphs/contributors) 7 | [![GitHub](https://img.shields.io/github/license/Lacro59/playnite-screenshotsvisualizer-plugin?cacheSeconds=50000)](https://github.com/Lacro59/playnite-screenshotsvisualizer-plugin/blob/master/LICENSE) 8 | 9 | # playnite-screenshotsvisualizer-plugin 10 | Extension for [Playnite](https://playnite.link). 11 | 12 | ## Informations 13 | The plugin shows your screenshots and video capture.. 14 | 15 | 16 | 17 | main_01 18 | 19 | 20 | 21 | 22 | main_01 23 | 24 | 25 | 26 | 27 | steamgriddb_01 28 | 29 | 30 | 31 | 32 | settings_01 33 | 34 | 35 | 36 | 37 | settings_01 38 | 39 | 40 | 41 | With this plugin you can 42 | * scan multi folders to show screenshoots and video capture 43 | * move screenshots and video capture on other folders (ex cloud folder) 44 | 45 | If the theme support function, you can: 46 | * add plugin data in game list in "Details View" & "Grid View" 47 | * add plugin data in game details 48 | 49 | ## Translations 50 | You can help to translate the extensions do different languages via the project [Crowdin](https://crowdin.com/project/playnite-extensions) page. 51 | 52 | ## Custom theme integration 53 | The extension contains elements that can fit into a custom theme. 54 | [More informations](https://github.com/Lacro59/playnite-screenshotsvisualizer-plugin/wiki/Addition-in-a-custom-theme) 55 | 56 | ## More 57 | Remember to support [Playnite](https://www.patreon.com/playnite). 58 | -------------------------------------------------------------------------------- /source/Views/SsvSinglePictureView.xaml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 38 | 39 | 95 | 96 | -------------------------------------------------------------------------------- /source/Localization/zh_CN.xaml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {0} 张截图 5 | {0} 张截图 6 | {0} 个视频 7 | {0} 个视频 8 | 9 | 10 | ffmpeg executable was not found 11 | ffprobe executable was not found 12 | 13 | 14 | 15 | 16 | 截图可视化-ScreenshotsVisualizer 17 | 截图 18 | 19 | 最新 20 | 21 | 查看游戏截图 22 | 打开截图目录 23 | 将截图移动至保存目录 24 | Convert images to JPG 25 | Convert images to JPG for all games screenshots 26 | 27 | 移动截图... 28 | 29 | 您确定要移动所有屏幕截图吗 30 | 31 | 32 | 33 | 34 | 您确定要删除 {0} 吗 35 | 36 | 37 | 38 | 39 | 上一张截图 40 | 41 | 42 | 43 | 44 | Carousel 45 | Show the game name 46 | Randomize all screenshots list 47 | Used thumbnails 48 | Show only the most recent screenshots for each game 49 | Number of screenshots per game 50 | Number of games 51 | Enable auto change 52 | Time (seconds) 53 | Show only favorites games 54 | Only certain sources 55 | Include videos 56 | 57 | 58 | 59 | 60 | ffmpeg path: 61 | ffprobe path: 62 | Download ffmpeg package 63 | 64 | 生成缩略图以改善加载性能 65 | 66 | 全局截图 67 | 68 | 扫描子文件夹 69 | 70 | 若游戏有截图则添加标签 71 | 添加 Steam 游戏 72 | 73 | 将数字转换为 {digit} 74 | 75 | 显示具有一个单截图的控制 76 | 显示具有一个列表的截图的控制 77 | 显示具有一个列表的纵向截图的控制 78 | Display a control with a large list of screenshoots 79 | 添加边 80 | 添加圆角 81 | 82 | 单截图选项 83 | 84 | 列表截图选项 85 | 86 | 隐藏截图信 87 | 88 | 在图片选择时打 89 | 将所选的链接到单截图视图 90 | 91 | 已使用的文件模式 92 | 启用截图在特殊文件夹的移 93 | 文件模式 94 | 95 | 转换为绝对路径 96 | 转换为相对 97 | 98 | JPG 质量 99 | 100 | 另外,您可使用(y=年,M=月,d=日,H=时,m=分,s=秒): 101 | - {DateModified} yyyy-MM-dd 102 | - {DateTimeModified} yyyy-MM-dd HH_mm_ss 103 | - {digit} 数字 104 | 105 | 例子: 106 | GameName_20200107-1 => {Name}_{digit}-{digit} 107 | GameName_2020-01-07 => {Name}_{DateModified} 108 | 109 | 为所有游戏添加该文件夹。 110 | 111 | 例子: 112 | {PlayniteDir}\ExtraMetadata\{GameId}\Screenshots 113 | 114 | 此选项添加一个游戏菜单,其将所有截图文件移动到单个文件夹。 115 | 如果 {Name} 没有包含在“文件夹”中,它会自动添加。 116 | 117 | 示例: 118 | 某游戏有两个截图文件夹: 119 | - {Public}\Screenshots 120 | - {SteamScreenshotsDir}\435790\screenshots 121 | 122 | 如果您有特殊的文件夹 {DropboxFolder}\Screenshots\{Name},在游戏菜单中选择选项后,所有屏幕截图将根据“文件模式”移动到唯一的文件夹,且链接将被更新到插件数据中。 123 | 124 | 125 | 126 | 缺失用于移动截图的设置 127 | 128 | 129 | -------------------------------------------------------------------------------- /source/Views/StartPage/SsvCarouselSettings.xaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 44 | 45 | 105 | 106 | -------------------------------------------------------------------------------- /source/Controls/PluginScreenshots.xaml: -------------------------------------------------------------------------------- 1 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 42 | 43 | 44 | 46 | 47 | 58 | 59 | 60 | 61 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |