Copy disabled (too large)
Download .txt
Showing preview only (12,350K chars total). Download the full file to get everything.
Repository: JosefNemec/Playnite
Branch: master
Commit: ab2eed4d09ea
Files: 1302
Total size: 11.5 MB
Directory structure:
gitextract__t5v_oi7/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ ├── custom.md
│ │ └── feature_request.yml
│ └── pull_request_template.md
├── .gitignore
├── LICENSE.md
├── README.md
├── appveyor.yml
├── build/
│ ├── ExtensionsRefIgnoreList.txt
│ ├── PlayniteSDK.nuspec
│ ├── VerifyLanguageFiles.ps1
│ ├── applyEnglishProofing.ps1
│ ├── build.ps1
│ ├── build.xml
│ ├── buildLocConstants.ps1
│ ├── buildSdkNuget.ps1
│ ├── common.ps1
│ ├── generateRetroArchProfile.ps1
│ └── updateLocalizations.ps1
├── crowdin.yml
├── media/
│ └── SplashScreen.xcf
├── references/
│ └── Windows.winmd
├── source/
│ ├── .editorconfig
│ ├── Playnite/
│ │ ├── API/
│ │ │ ├── AddonsAPI.cs
│ │ │ ├── DatabaseAPI.cs
│ │ │ ├── DesignData/
│ │ │ │ ├── DesignNotificationsAPI.cs
│ │ │ │ └── DesignPlayniteAPI.cs
│ │ │ ├── NotificationsAPI.cs
│ │ │ ├── PlayniteAPI.cs
│ │ │ ├── PlayniteInfoAPI.cs
│ │ │ ├── PlaynitePathsAPI.cs
│ │ │ └── PlayniteSettingsAPI.cs
│ │ ├── Addons/
│ │ │ └── Addons.cs
│ │ ├── App/
│ │ │ ├── CmdLineOptions.cs
│ │ │ ├── IPlayniteApplication.cs
│ │ │ ├── PlayniteApplication.cs
│ │ │ ├── UpdateManifest.cs
│ │ │ └── Updater.cs
│ │ ├── App.config
│ │ ├── Archive.cs
│ │ ├── Audio.cs
│ │ ├── Backup.cs
│ │ ├── Behaviors/
│ │ │ ├── AnimatedVisibility.cs
│ │ │ ├── ExpanderBehaviors.cs
│ │ │ ├── FocusBahaviors.cs
│ │ │ ├── LeftClickContextMenuBehavior.cs
│ │ │ ├── MediaElementBehaviors.cs
│ │ │ ├── ScrollToSelectedBehavior.cs
│ │ │ ├── ScrollViewerBehaviours.cs
│ │ │ └── SelectorBehaviors.cs
│ │ ├── BindingProxy.cs
│ │ ├── CefTools.cs
│ │ ├── CmdlineCommands.cs
│ │ ├── Commands/
│ │ │ ├── GenericCommands.cs
│ │ │ └── GlobalCommands.cs
│ │ ├── Common/
│ │ │ ├── BindingTools.cs
│ │ │ ├── Computer.cs
│ │ │ ├── Constants.cs
│ │ │ ├── CueSheet.cs
│ │ │ ├── DesignerTools.cs
│ │ │ ├── Exceptions.cs
│ │ │ ├── Explorer.cs
│ │ │ ├── Extensions/
│ │ │ │ ├── BitmapExtensions.cs
│ │ │ │ ├── BitmapIconExtensions.cs
│ │ │ │ ├── CloneObject.cs
│ │ │ │ ├── Dictionary.cs
│ │ │ │ ├── Enums.cs
│ │ │ │ ├── IconExtension.cs
│ │ │ │ ├── ItemsControlExtensions.cs
│ │ │ │ ├── KeyExtensions.cs
│ │ │ │ ├── LongExtensions.cs
│ │ │ │ ├── NetExtensions.cs
│ │ │ │ ├── ObjectExtensions.cs
│ │ │ │ ├── ProcessExtensions.cs
│ │ │ │ ├── StringExtensions.cs
│ │ │ │ └── WindowExtensions.cs
│ │ │ ├── FileSystem.cs
│ │ │ ├── FileSystem_Checksum.cs
│ │ │ ├── GdiFile.cs
│ │ │ ├── GlobalRandom.cs
│ │ │ ├── Images.cs
│ │ │ ├── IniParser.cs
│ │ │ ├── ItemsSource.cs
│ │ │ ├── M3U.cs
│ │ │ ├── MarkupConverter.cs
│ │ │ ├── Media/
│ │ │ │ └── Icons/
│ │ │ │ ├── IconExtractor.cs
│ │ │ │ └── IconUtil.cs
│ │ │ ├── MemoryCache.cs
│ │ │ ├── NLogLogProvider.cs
│ │ │ ├── Network.cs
│ │ │ ├── Paths.cs
│ │ │ ├── ProcessMonitor.cs
│ │ │ ├── ProcessStarter.cs
│ │ │ ├── Programs.cs
│ │ │ ├── Programs2.cs
│ │ │ ├── Resources.cs
│ │ │ ├── Roman.cs
│ │ │ ├── SafeFileEnumerator.cs
│ │ │ ├── Serialization.cs
│ │ │ ├── SigningTools.cs
│ │ │ ├── Sizes.cs
│ │ │ ├── Sqlite.cs
│ │ │ ├── SystemDialogs.cs
│ │ │ ├── TGASharpLib.cs
│ │ │ ├── TempDirectory.cs
│ │ │ ├── Timer.cs
│ │ │ ├── Units.cs
│ │ │ ├── Web/
│ │ │ │ ├── Downloader.cs
│ │ │ │ └── HttpDownloader.cs
│ │ │ ├── Xaml.cs
│ │ │ └── Xml.cs
│ │ ├── Common.config
│ │ ├── ControlTemplateTools.cs
│ │ ├── Controllers/
│ │ │ ├── GameControllerFactory.cs
│ │ │ └── GenericGameController.cs
│ │ ├── Controls/
│ │ │ ├── ExtendedDataGrid.cs
│ │ │ ├── ExtendedListBox.cs
│ │ │ ├── ExtendedListView.cs
│ │ │ ├── FadeImage.xaml
│ │ │ ├── FadeImage.xaml.cs
│ │ │ ├── GridEx.cs
│ │ │ ├── HotKeyBox.cs
│ │ │ ├── HtmlTextView.cs
│ │ │ └── WindowBase.cs
│ │ ├── Converters/
│ │ │ ├── BidirectionalEnumAndNumberConverter.cs
│ │ │ ├── BoolToAutoWidthConverter.cs
│ │ │ ├── BoolToYesNoConverter.cs
│ │ │ ├── BooleanToHiddenConverter.cs
│ │ │ ├── BooleanToVisibilityConverter.cs
│ │ │ ├── CoversZoomToPercentageConverter.cs
│ │ │ ├── DateTimeToLastPlayedConverter.cs
│ │ │ ├── DockToStringConverter.cs
│ │ │ ├── EnumToBooleanConverter.cs
│ │ │ ├── EnumToVisibilityConverter.cs
│ │ │ ├── GenericTypeConverter.cs
│ │ │ ├── ICollectionNullOrEmptyToVisibilityConverter.cs
│ │ │ ├── IconToImageSourceConverter.cs
│ │ │ ├── ImageStringToImageConverter.cs
│ │ │ ├── IntToVisibilityConverter.cs
│ │ │ ├── InvertableBooleanToVisibilityConverter.cs
│ │ │ ├── InvertedBoolenConverter.cs
│ │ │ ├── ListToStringConverter.cs
│ │ │ ├── NegateConverter.cs
│ │ │ ├── NotificationIconConverter.cs
│ │ │ ├── NullToBoolConverter.cs
│ │ │ ├── NullToDependencyPropertyUnsetConverter.cs
│ │ │ ├── NullToVisibilityConverter.cs
│ │ │ ├── NullableDateToStringConverter.cs
│ │ │ ├── NullableUlongBytesSizeToStringConverter.cs
│ │ │ ├── NumericConverters.cs
│ │ │ ├── ObjectEqualityToBoolConverter.cs
│ │ │ ├── ObjectToStringConverter.cs
│ │ │ ├── OpacityBoolConverter.cs
│ │ │ ├── PlayTimeToStringConverter.cs
│ │ │ ├── SortingOrderToStringConverter.cs
│ │ │ ├── StrechToStringConverter.cs
│ │ │ ├── StringNullOrEmptyToBoolConverter.cs
│ │ │ ├── StringNullOrEmptyToVisibilityConverter.cs
│ │ │ ├── StringToUpperCaseConverter.cs
│ │ │ ├── TicksToTimeSpanConverter.cs
│ │ │ ├── ValueConverterGroup.cs
│ │ │ └── WidthToFontSizeConverter.cs
│ │ ├── Database/
│ │ │ ├── Collections/
│ │ │ │ ├── AgeRatingsCollection.cs
│ │ │ │ ├── AppSoftwareCollection.cs
│ │ │ │ ├── CategoriesCollection.cs
│ │ │ │ ├── CompaniesCollection.cs
│ │ │ │ ├── CompletionStatusesCollection.cs
│ │ │ │ ├── EmulatorsCollection.cs
│ │ │ │ ├── FeaturesCollection.cs
│ │ │ │ ├── FilterPresetsCollection.cs
│ │ │ │ ├── GameScannersCollection.cs
│ │ │ │ ├── GamesCollection.cs
│ │ │ │ ├── GamesSourcesCollection.cs
│ │ │ │ ├── GenresCollection.cs
│ │ │ │ ├── ImportExclusionsCollection.cs
│ │ │ │ ├── ItemCollection.cs
│ │ │ │ ├── LiteDBFileReaderV7.cs
│ │ │ │ ├── PlatformsCollection.cs
│ │ │ │ ├── RegionsCollection.cs
│ │ │ │ ├── SeriesCollection.cs
│ │ │ │ └── TagsCollection.cs
│ │ │ ├── DatabaseExplorer.cs
│ │ │ ├── DatabaseFileEvent.cs
│ │ │ ├── DatabaseFilter.cs
│ │ │ ├── DatabaseSettings.cs
│ │ │ ├── DatabaseStats.cs
│ │ │ ├── EventBufferHandler.cs
│ │ │ ├── GameDatabase.cs
│ │ │ ├── GameDatabaseMigration.cs
│ │ │ ├── GameDatabase_Filters.cs
│ │ │ ├── GameFieldComparer.cs
│ │ │ ├── InMemoryGameDatabase.cs
│ │ │ └── OldModels/
│ │ │ ├── NewVer1/
│ │ │ │ ├── OldCompletionStatus.cs
│ │ │ │ ├── OldDatabaseObject.cs
│ │ │ │ ├── OldGame.cs
│ │ │ │ ├── OldGameAction.cs
│ │ │ │ └── OldLink.cs
│ │ │ └── Ver2.cs
│ │ ├── DateTimes.cs
│ │ ├── Diagnostic.cs
│ │ ├── DiagnosticPackageInfo.cs
│ │ ├── DialogsFactory.cs
│ │ ├── DiscordManager.cs
│ │ ├── EasyAntiCheat.cs
│ │ ├── ElementTreeHelper.cs
│ │ ├── Emulation/
│ │ │ ├── Emulators/
│ │ │ │ ├── 4DO/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Altirra/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Atari800/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── BGB/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── BigPEmu/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── BizHawk/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── BlastEm/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Cemu/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Citra/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Cxbx-Reloaded/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── DOSBox/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── DeSmuME/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Dolphin/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── DuckStation/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── FCEUX/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── FS-UAE/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── FlashPlayerProjector/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Flycast/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Fuse/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── GBE+/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Gambatte/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── KegaFusion/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Lime3DS/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── LocaleEmulator/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── M64Py/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Mednafen/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Mesen/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Mesen-S/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── NanoboyAdvance/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Nestopia/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── NullDC/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── PCSX2/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── PCSXR-PGXP/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── PCem/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── PPSSPP/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Project64/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── RPCS3/
│ │ │ │ │ ├── emulator.yaml
│ │ │ │ │ └── importGames.ps1
│ │ │ │ ├── Reicast/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── RetroArch/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── RosaliesMupenGui/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Ruffle/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Ryujinx/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── SameBoy/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── ScummVM/
│ │ │ │ │ ├── emulator.yaml
│ │ │ │ │ └── importGames.ps1
│ │ │ │ ├── Snes9X/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Stella/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── VirtualJaguar/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── VisualBoyAdvance/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── VisualBoyAdvance-M/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Vita3K/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── WinUAE/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── WinVice/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Xemu/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Xenia/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Yabuse/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Ymir/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── ZSNES/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── ares/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── blueMSX/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── bsnes/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── bsnes-hd/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── bsnes-mt/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── decaf-emu/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── ePSXe/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── gopher64/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── higan/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── jgenesis/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── m64p/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── mGBA/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── melonDS/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── puNES/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── redream/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── shadPS4/
│ │ │ │ │ ├── emulator.yaml
│ │ │ │ │ └── importGames.ps1
│ │ │ │ ├── simple64/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ └── yuzu/
│ │ │ │ └── emulator.yaml
│ │ │ ├── Platforms.yaml
│ │ │ └── Regions.yaml
│ │ ├── Emulators/
│ │ │ ├── DatModels.cs
│ │ │ ├── Emulation.cs
│ │ │ ├── EmulationDatabase.cs
│ │ │ └── Scanner.cs
│ │ ├── Exceptions.cs
│ │ ├── Extensions/
│ │ │ ├── ControlExtensions.cs
│ │ │ ├── GameExtensions.cs
│ │ │ ├── IProvideValueTarget.cs
│ │ │ ├── Markup/
│ │ │ │ ├── Api.cs
│ │ │ │ ├── BindingExtension.cs
│ │ │ │ ├── MainViewModel.cs
│ │ │ │ ├── PluginConverter.cs
│ │ │ │ ├── PluginSettings.cs
│ │ │ │ ├── PluginStatus.cs
│ │ │ │ ├── Settings.cs
│ │ │ │ ├── ThemeFile.cs
│ │ │ │ └── ThemeFileBinding.cs
│ │ │ └── ServiceProvider.cs
│ │ ├── FakePlayniteLibraryPlugin.cs
│ │ ├── GameTools.cs
│ │ ├── GamesCollectionView.cs
│ │ ├── GamesCollectionViewEntry.cs
│ │ ├── GamesEditor.cs
│ │ ├── GlobalTaskHandler.cs
│ │ ├── GoogleImageDownloader.cs
│ │ ├── HdrUtilities.cs
│ │ ├── HotKey.cs
│ │ ├── HttpFileCache.cs
│ │ ├── ImageSourceManager.cs
│ │ ├── Input/
│ │ │ ├── GameController.cs
│ │ │ └── MouseWheelGesture.cs
│ │ ├── ItemSelector.cs
│ │ ├── Localization/
│ │ │ ├── LocSource.xaml
│ │ │ ├── LocalizationKeys.cs
│ │ │ ├── af_ZA.xaml
│ │ │ ├── ar_SA.xaml
│ │ │ ├── bg_BG.xaml
│ │ │ ├── ca_ES.xaml
│ │ │ ├── cs_CZ.xaml
│ │ │ ├── cy_GB.xaml
│ │ │ ├── da_DK.xaml
│ │ │ ├── de_DE.xaml
│ │ │ ├── el_GR.xaml
│ │ │ ├── en_US.xaml
│ │ │ ├── eo_UY.xaml
│ │ │ ├── es_ES.xaml
│ │ │ ├── et_EE.xaml
│ │ │ ├── fa_IR.xaml
│ │ │ ├── fi_FI.xaml
│ │ │ ├── fr_FR.xaml
│ │ │ ├── ga_IE.xaml
│ │ │ ├── gl_ES.xaml
│ │ │ ├── he_IL.xaml
│ │ │ ├── hr_HR.xaml
│ │ │ ├── hu_HU.xaml
│ │ │ ├── id_ID.xaml
│ │ │ ├── it_IT.xaml
│ │ │ ├── ja_JP.xaml
│ │ │ ├── ko_KR.xaml
│ │ │ ├── locstatus.json
│ │ │ ├── lt_LT.xaml
│ │ │ ├── mr_IN.xaml
│ │ │ ├── nl_NL.xaml
│ │ │ ├── no_NO.xaml
│ │ │ ├── pl_PL.xaml
│ │ │ ├── pt_BR.xaml
│ │ │ ├── pt_PT.xaml
│ │ │ ├── ro_RO.xaml
│ │ │ ├── ru_RU.xaml
│ │ │ ├── si_LK.xaml
│ │ │ ├── sk_SK.xaml
│ │ │ ├── sl_SI.xaml
│ │ │ ├── sr_SP.xaml
│ │ │ ├── sv_SE.xaml
│ │ │ ├── tr_TR.xaml
│ │ │ ├── uk_UA.xaml
│ │ │ ├── vi_VN.xaml
│ │ │ ├── zh_CN.xaml
│ │ │ └── zh_TW.xaml
│ │ ├── Localization.cs
│ │ ├── Manifests/
│ │ │ ├── AddonManifestBase.cs
│ │ │ ├── AddonManifests.cs
│ │ │ ├── ExtensionManifest.cs
│ │ │ └── ThemeManifest.cs
│ │ ├── MenuHelpers.cs
│ │ ├── MenuItems.cs
│ │ ├── Metadata/
│ │ │ ├── MetadataDownloader.cs
│ │ │ ├── MetadataDownloaderSettings.cs
│ │ │ └── MetadataFileExtensions.cs
│ │ ├── Native/
│ │ │ ├── Fileapi.cs
│ │ │ ├── Gdi32.cs
│ │ │ ├── Kernel32.cs
│ │ │ ├── Ntdll.cs
│ │ │ ├── Powrprof.cs
│ │ │ ├── Processthreadsapi.cs
│ │ │ ├── Psapi.cs
│ │ │ ├── Shell32.cs
│ │ │ ├── Shlwapi.cs
│ │ │ ├── User32.cs
│ │ │ ├── WinError.cs
│ │ │ ├── Winbase.cs
│ │ │ ├── Windef.cs
│ │ │ ├── Wingdi.cs
│ │ │ ├── Winnt.cs
│ │ │ ├── Wintrust.cs
│ │ │ └── winuser.cs
│ │ ├── ObservablePowerStatus.cs
│ │ ├── ObservableTime.cs
│ │ ├── PipeServer.cs
│ │ ├── Playnite.csproj
│ │ ├── PlayniteEnvironment.cs
│ │ ├── PlayniteProcess.cs
│ │ ├── PlayniteUriHandler.cs
│ │ ├── Plugins/
│ │ │ ├── ExtensionFactory.cs
│ │ │ └── ExtensionInstaller.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── SDL2.cs
│ │ ├── SDL2_mixer.cs
│ │ ├── Safe Mode.bat
│ │ ├── Scripting/
│ │ │ ├── PlayniteScript.cs
│ │ │ └── PowerShell/
│ │ │ ├── PowerShell.cs
│ │ │ └── PowerShellScript.cs
│ │ ├── SdkHelpers.cs
│ │ ├── SelectableItem.cs
│ │ ├── Services/
│ │ │ ├── BaseServicesClient.cs
│ │ │ ├── GenericResponse.cs
│ │ │ └── ServicesClient.cs
│ │ ├── Settings/
│ │ │ ├── AutoClientShutdownSettings.cs
│ │ │ ├── DetailsVisibilitySettings.cs
│ │ │ ├── FilterSettings.cs
│ │ │ ├── FullscreenSettings.cs
│ │ │ ├── OldSettings/
│ │ │ │ └── Plugins.cs
│ │ │ ├── PlaynitePaths.cs
│ │ │ ├── PlayniteSettings.cs
│ │ │ ├── SearchWindowVisibilitySettings.cs
│ │ │ ├── SettingsAttributes.cs
│ │ │ ├── ViewProperties.cs
│ │ │ └── WindowPositions.cs
│ │ ├── SortableNameConverter.cs
│ │ ├── SystemIntegration.cs
│ │ ├── Themes.cs
│ │ ├── ThirdPartyClients/
│ │ │ └── ThirdPartyToolsList.cs
│ │ ├── UrlConstants.cs
│ │ ├── ViewModels/
│ │ │ ├── AddonsViewModelBase_Online.cs
│ │ │ ├── CrashHandlerViewModel.cs
│ │ │ ├── ItemSelectionViewModel.cs
│ │ │ ├── LicenseAgreementViewModel.cs
│ │ │ ├── MainViewModelBase.cs
│ │ │ ├── ProgressViewViewModel.cs
│ │ │ ├── RandomGameSelectViewModel.cs
│ │ │ ├── SearchViewModel.cs
│ │ │ └── UpdateViewModel.cs
│ │ ├── WebView/
│ │ │ ├── CookieDestroyer.cs
│ │ │ ├── OffscreenWebView.cs
│ │ │ ├── WebView.cs
│ │ │ ├── WebViewBase.cs
│ │ │ └── WebViewFactory.cs
│ │ ├── Windows/
│ │ │ ├── CrashHandlerWindowFactory.cs
│ │ │ ├── ExtensionCrashHandlerWindowFactory.cs
│ │ │ ├── ItemSelectorWindowFactory.cs
│ │ │ ├── LicenseAgreementWindowFactory.cs
│ │ │ ├── ProgressWindowFactory.cs
│ │ │ ├── UpdateWindowFactory.cs
│ │ │ ├── WebViewWindow.xaml
│ │ │ ├── WebViewWindow.xaml.cs
│ │ │ ├── WindowFactory.cs
│ │ │ ├── WindowManager.cs
│ │ │ └── WindowPositionHandler.cs
│ │ ├── WindowsNotifyIconManager.cs
│ │ ├── crash_reporter.cfg
│ │ ├── gamecontrollerdb.txt
│ │ ├── license.txt
│ │ └── packages.config
│ ├── Playnite.DesktopApp/
│ │ ├── Api/
│ │ │ └── MainViewAPI.cs
│ │ ├── App.config
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── ControlGalleryView.xaml
│ │ ├── Controls/
│ │ │ ├── AddonsSections/
│ │ │ │ ├── AddonUpdates.xaml
│ │ │ │ ├── AddonUpdates.xaml.cs
│ │ │ │ ├── BrowseAddons.xaml
│ │ │ │ ├── BrowseAddons.xaml.cs
│ │ │ │ ├── InstalledExtensions.xaml
│ │ │ │ ├── InstalledExtensions.xaml.cs
│ │ │ │ ├── InstalledThemes.xaml
│ │ │ │ └── InstalledThemes.xaml.cs
│ │ │ ├── ComboBoxList.cs
│ │ │ ├── ComboBoxListBase.cs
│ │ │ ├── DdItemListSelectionBox.cs
│ │ │ ├── ExpanderEx.cs
│ │ │ ├── FilterEnumSelectionBox.cs
│ │ │ ├── FilterSelectionBox.cs
│ │ │ ├── FilterStringSelectionBox.cs
│ │ │ ├── GameListItem.cs
│ │ │ ├── GameTaskView.xaml
│ │ │ ├── GameTaskView.xaml.cs
│ │ │ ├── GamesGridView.xaml
│ │ │ ├── GamesGridView.xaml.cs
│ │ │ ├── GridViewPanel.cs
│ │ │ ├── LibraryStatistics.xaml
│ │ │ ├── LibraryStatistics.xaml.cs
│ │ │ ├── LongNumericBox.cs
│ │ │ ├── Menus/
│ │ │ │ ├── FilterPresetsMenu.cs
│ │ │ │ ├── GameGroupMenu.cs
│ │ │ │ ├── GameMenu.cs
│ │ │ │ ├── GroupSettingsMenu.cs
│ │ │ │ ├── MainMenu.cs
│ │ │ │ ├── SortSettingsMenu.cs
│ │ │ │ ├── TrayContextMenu.cs
│ │ │ │ ├── ViewSelectionMenu.cs
│ │ │ │ └── ViewSettingsMenu.cs
│ │ │ ├── MetadataDownloadSettings.xaml
│ │ │ ├── MetadataDownloadSettings.xaml.cs
│ │ │ ├── NullableIntBox.cs
│ │ │ ├── NumericDoubleBox.cs
│ │ │ ├── PathSelectionBox.cs
│ │ │ ├── SearchBox.cs
│ │ │ ├── SettingsSections/
│ │ │ │ ├── AppearanceAdvanced.xaml
│ │ │ │ ├── AppearanceAdvanced.xaml.cs
│ │ │ │ ├── AppearanceDetailsView.xaml
│ │ │ │ ├── AppearanceDetailsView.xaml.cs
│ │ │ │ ├── AppearanceGeneral.xaml
│ │ │ │ ├── AppearanceGeneral.xaml.cs
│ │ │ │ ├── AppearanceGridView.xaml
│ │ │ │ ├── AppearanceGridView.xaml.cs
│ │ │ │ ├── AppearanceLayout.xaml
│ │ │ │ ├── AppearanceLayout.xaml.cs
│ │ │ │ ├── AppearanceListView.xaml
│ │ │ │ ├── AppearanceListView.xaml.cs
│ │ │ │ ├── AppearanceTopPanel.xaml
│ │ │ │ ├── AppearanceTopPanel.xaml.cs
│ │ │ │ ├── Backup.xaml
│ │ │ │ ├── Backup.xaml.cs
│ │ │ │ ├── ClientShutdown.xaml
│ │ │ │ ├── ClientShutdown.xaml.cs
│ │ │ │ ├── Development.xaml
│ │ │ │ ├── Development.xaml.cs
│ │ │ │ ├── EmptyParent.xaml
│ │ │ │ ├── EmptyParent.xaml.cs
│ │ │ │ ├── ErrorLoading.xaml
│ │ │ │ ├── ErrorLoading.xaml.cs
│ │ │ │ ├── General.xaml
│ │ │ │ ├── General.xaml.cs
│ │ │ │ ├── GeneralAdvanced.xaml
│ │ │ │ ├── GeneralAdvanced.xaml.cs
│ │ │ │ ├── ImportExlusionList.xaml
│ │ │ │ ├── ImportExlusionList.xaml.cs
│ │ │ │ ├── Input.xaml
│ │ │ │ ├── Input.xaml.cs
│ │ │ │ ├── LibrariesConfigWindowInfo.xaml
│ │ │ │ ├── LibrariesConfigWindowInfo.xaml.cs
│ │ │ │ ├── Metadata.xaml
│ │ │ │ ├── Metadata.xaml.cs
│ │ │ │ ├── NoSettingsAvailable.xaml
│ │ │ │ ├── NoSettingsAvailable.xaml.cs
│ │ │ │ ├── Performance.xaml
│ │ │ │ ├── Performance.xaml.cs
│ │ │ │ ├── Scripting.xaml
│ │ │ │ ├── Scripting.xaml.cs
│ │ │ │ ├── Search.xaml
│ │ │ │ ├── Search.xaml.cs
│ │ │ │ ├── Sorting.xaml
│ │ │ │ ├── Sorting.xaml.cs
│ │ │ │ ├── Updates.xaml
│ │ │ │ └── Updates.xaml.cs
│ │ │ ├── SidebarItem.cs
│ │ │ ├── SliderEx.cs
│ │ │ ├── SliderWithPopup.xaml
│ │ │ ├── SliderWithPopup.xaml.cs
│ │ │ ├── TopPanelItem.cs
│ │ │ └── Views/
│ │ │ ├── BaseGamesView.cs
│ │ │ ├── DetailsViewGameOverview.cs
│ │ │ ├── ExplorerPanel.cs
│ │ │ ├── FilterPanel.cs
│ │ │ ├── GameOverview.cs
│ │ │ ├── GridViewGameOverview.cs
│ │ │ ├── Library.cs
│ │ │ ├── LibraryDetailsView.cs
│ │ │ ├── LibraryGridView.cs
│ │ │ ├── LibraryListView.cs
│ │ │ ├── MainWindow.cs
│ │ │ ├── NotificationPanel.cs
│ │ │ ├── SearchWindow.cs
│ │ │ ├── Sidebar.cs
│ │ │ └── TopPanel.cs
│ │ ├── DesktopActionSelector.cs
│ │ ├── DesktopApplication.cs
│ │ ├── DesktopCollectionView.cs
│ │ ├── DesktopDialogs.cs
│ │ ├── DesktopGamesEditor.cs
│ │ ├── GlobalResources.xaml
│ │ ├── Markups.cs
│ │ ├── Playnite.DesktopApp.csproj
│ │ ├── PluginSettingsHelper.cs
│ │ ├── ProgramEntry.cs
│ │ ├── Properties/
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── Resources.Designer.cs
│ │ │ ├── Resources.resx
│ │ │ ├── Settings.Designer.cs
│ │ │ └── Settings.settings
│ │ ├── Resources/
│ │ │ └── contributors.txt
│ │ ├── Themes/
│ │ │ ├── Desktop/
│ │ │ │ └── Default/
│ │ │ │ ├── Common.xaml
│ │ │ │ ├── Constants.xaml
│ │ │ │ ├── CustomControls/
│ │ │ │ │ ├── ComboBoxList.xaml
│ │ │ │ │ ├── ExpanderEx.xaml
│ │ │ │ │ ├── ExtendedDataGrid.xaml
│ │ │ │ │ ├── ExtendedListBox.xaml
│ │ │ │ │ ├── ExtendedListView.xaml
│ │ │ │ │ ├── FilterSelectionBox.xaml
│ │ │ │ │ ├── GameGroupMenu.xaml
│ │ │ │ │ ├── GameMenu.xaml
│ │ │ │ │ ├── HotKeyBox.xaml
│ │ │ │ │ ├── HtmlTextView.xaml
│ │ │ │ │ ├── NumericBoxes.xaml
│ │ │ │ │ ├── PathSelectionBox.xaml
│ │ │ │ │ ├── SearchBox.xaml
│ │ │ │ │ ├── SidebarItem.xaml
│ │ │ │ │ ├── SliderEx.xaml
│ │ │ │ │ ├── TopPanelItem.xaml
│ │ │ │ │ ├── TrayContextMenu.xaml
│ │ │ │ │ └── WindowBase.xaml
│ │ │ │ ├── DefaultControls/
│ │ │ │ │ ├── Border.xaml
│ │ │ │ │ ├── Button.xaml
│ │ │ │ │ ├── CheckBox.xaml
│ │ │ │ │ ├── ComboBox.xaml
│ │ │ │ │ ├── ContextMenu.xaml
│ │ │ │ │ ├── DataGrid.xaml
│ │ │ │ │ ├── DatePicker.xaml
│ │ │ │ │ ├── Expander.xaml
│ │ │ │ │ ├── GridSplitter.xaml
│ │ │ │ │ ├── GroupBox.xaml
│ │ │ │ │ ├── Hyperlink.xaml
│ │ │ │ │ ├── Label.xaml
│ │ │ │ │ ├── ListBox.xaml
│ │ │ │ │ ├── ListView.xaml
│ │ │ │ │ ├── Menu.xaml
│ │ │ │ │ ├── PasswordBox.xaml
│ │ │ │ │ ├── Popup.xaml
│ │ │ │ │ ├── ProgressBar.xaml
│ │ │ │ │ ├── RadioButton.xaml
│ │ │ │ │ ├── RepeatButton.xaml
│ │ │ │ │ ├── RichTextBox.xaml
│ │ │ │ │ ├── ScrollViewer.xaml
│ │ │ │ │ ├── Slider.xaml
│ │ │ │ │ ├── TabControl.xaml
│ │ │ │ │ ├── TextBlock.xaml
│ │ │ │ │ ├── TextBox.xaml
│ │ │ │ │ ├── Thumb.xaml
│ │ │ │ │ ├── ToggleButton.xaml
│ │ │ │ │ ├── ToolTip.xaml
│ │ │ │ │ └── TreeView.xaml
│ │ │ │ ├── DerivedStyles/
│ │ │ │ │ ├── BottomButton.xaml
│ │ │ │ │ ├── DetailsHyperlink.xaml
│ │ │ │ │ ├── DetailsScrollViewer.xaml
│ │ │ │ │ ├── DetailsViewGroupStyle.xaml
│ │ │ │ │ ├── DetailsViewItemStyle.xaml
│ │ │ │ │ ├── DetailsViewItemTemplate.xaml
│ │ │ │ │ ├── GridViewGroupStyle.xaml
│ │ │ │ │ ├── GridViewItemStyle.xaml
│ │ │ │ │ ├── GridViewItemTemplate.xaml
│ │ │ │ │ ├── HighlightBorder.xaml
│ │ │ │ │ ├── ImageHighlightButton.xaml
│ │ │ │ │ ├── ListViewGroupStyle.xaml
│ │ │ │ │ ├── MainWindowStyle.xaml
│ │ │ │ │ ├── NotificationMessage.xaml
│ │ │ │ │ ├── PlayButton.xaml
│ │ │ │ │ ├── PropertyItemButton.xaml
│ │ │ │ │ ├── SimpleButton.xaml
│ │ │ │ │ ├── StandardWindowStyle.xaml
│ │ │ │ │ ├── TextBlockGameScore.xaml
│ │ │ │ │ └── WindowBarButton.xaml
│ │ │ │ ├── DescriptionView.html
│ │ │ │ ├── Media.xaml
│ │ │ │ ├── Views/
│ │ │ │ │ ├── DetailsViewGameOverview.xaml
│ │ │ │ │ ├── ExplorerPanel.xaml
│ │ │ │ │ ├── FilterPanelView.xaml
│ │ │ │ │ ├── GridViewGameOverview.xaml
│ │ │ │ │ ├── Library.xaml
│ │ │ │ │ ├── LibraryDetailsView.xaml
│ │ │ │ │ ├── LibraryGridView.xaml
│ │ │ │ │ ├── LibraryListView.xaml
│ │ │ │ │ ├── MainWindow.xaml
│ │ │ │ │ ├── NotificationPanel.xaml
│ │ │ │ │ ├── SearchView.xaml
│ │ │ │ │ ├── Sidebar.xaml
│ │ │ │ │ └── TopPanel.xaml
│ │ │ │ └── theme.yaml
│ │ │ └── Generic.xaml
│ │ ├── ViewModels/
│ │ │ ├── AboutViewModel.cs
│ │ │ ├── ActionSelectionViewModel.cs
│ │ │ ├── AddonsViewModel.cs
│ │ │ ├── AddonsViewModel_Installed.cs
│ │ │ ├── AddonsViewModel_Online.cs
│ │ │ ├── CategoryConfigViewModel.cs
│ │ │ ├── DatabaseFieldsManagerViewModel.cs
│ │ │ ├── DesignData/
│ │ │ │ └── DesignMainViewModel.cs
│ │ │ ├── DesktopAppViewModel.cs
│ │ │ ├── DesktopAppViewModel_Commands.cs
│ │ │ ├── DesktopAppViewModel_Sidebar.cs
│ │ │ ├── DesktopAppViewModel_TopPanel.cs
│ │ │ ├── EmulatedGamesImportViewModel.cs
│ │ │ ├── EmulatorImportViewModel.cs
│ │ │ ├── EmulatorsViewModel.cs
│ │ │ ├── FirstTimeStartupViewModel.cs
│ │ │ ├── GameDetailsViewModel.cs
│ │ │ ├── GameEditViewModel.cs
│ │ │ ├── GameEditViewModelCommands.cs
│ │ │ ├── GameEditViewModelFieldChecks.cs
│ │ │ ├── GameEditViewModelMetadata.cs
│ │ │ ├── GoogleImageDownloadViewModel.cs
│ │ │ ├── ImageSelectionViewModel.cs
│ │ │ ├── InstalledGamesViewModel.cs
│ │ │ ├── ItemSelectionWithSearchViewModel.cs
│ │ │ ├── LibraryIntegrationsViewModel.cs
│ │ │ ├── MetadataComparisonViewModel.cs
│ │ │ ├── MetadataDownloadViewModel.cs
│ │ │ ├── PluginSettingsViewModel.cs
│ │ │ ├── SettingsViewModel.cs
│ │ │ ├── StatisticsViewModel.cs
│ │ │ └── ToolsConfigViewModel.cs
│ │ ├── Windows/
│ │ │ ├── AboutWindow.xaml
│ │ │ ├── AboutWindow.xaml.cs
│ │ │ ├── ActionSelectionWindow.xaml
│ │ │ ├── ActionSelectionWindow.xaml.cs
│ │ │ ├── AddonsWindow.xaml
│ │ │ ├── AddonsWindow.xaml.cs
│ │ │ ├── CategoryConfigWindow.xaml
│ │ │ ├── CategoryConfigWindow.xaml.cs
│ │ │ ├── ControlGallery.xaml
│ │ │ ├── ControlGallery.xaml.cs
│ │ │ ├── CrashHandlerWindow.xaml
│ │ │ ├── CrashHandlerWindow.xaml.cs
│ │ │ ├── DatabaseFieldsManagerWindow.xaml
│ │ │ ├── DatabaseFieldsManagerWindow.xaml.cs
│ │ │ ├── EmulatedGameImportWindow.xaml
│ │ │ ├── EmulatedGameImportWindow.xaml.cs
│ │ │ ├── EmulatorDownloadWindow.xaml
│ │ │ ├── EmulatorDownloadWindow.xaml.cs
│ │ │ ├── EmulatorImportWindow.xaml
│ │ │ ├── EmulatorImportWindow.xaml.cs
│ │ │ ├── EmulatorsWindow.xaml
│ │ │ ├── EmulatorsWindow.xaml.cs
│ │ │ ├── ExtensionCrashHandlerWindow.xaml
│ │ │ ├── ExtensionCrashHandlerWindow.xaml.cs
│ │ │ ├── FirstTimeStartupWindow.xaml
│ │ │ ├── FirstTimeStartupWindow.xaml.cs
│ │ │ ├── GameEditWindow.xaml
│ │ │ ├── GameEditWindow.xaml.cs
│ │ │ ├── GoogleImageDownloadWindow.xaml
│ │ │ ├── GoogleImageDownloadWindow.xaml.cs
│ │ │ ├── ImageSelectionWindow.xaml
│ │ │ ├── ImageSelectionWindow.xaml.cs
│ │ │ ├── InstalledGamesWindow.xaml
│ │ │ ├── InstalledGamesWindow.xaml.cs
│ │ │ ├── ItemSelectionWithSearchWindow.xaml
│ │ │ ├── ItemSelectionWithSearchWindow.xaml.cs
│ │ │ ├── LibraryIntegrationsWindow.xaml
│ │ │ ├── LibraryIntegrationsWindow.xaml.cs
│ │ │ ├── LicenseAgreementWindow.xaml
│ │ │ ├── LicenseAgreementWindow.xaml.cs
│ │ │ ├── MainWindow.xaml
│ │ │ ├── MainWindow.xaml.cs
│ │ │ ├── MessageBoxWindow.xaml
│ │ │ ├── MessageBoxWindow.xaml.cs
│ │ │ ├── MetadataComparisonWindow.xaml
│ │ │ ├── MetadataComparisonWindow.xaml.cs
│ │ │ ├── MetadataDownloadWindow.xaml
│ │ │ ├── MetadataDownloadWindow.xaml.cs
│ │ │ ├── MultiItemSelectionWindow.xaml
│ │ │ ├── MultiItemSelectionWindow.xaml.cs
│ │ │ ├── PluginSettingsWindow.xaml
│ │ │ ├── PluginSettingsWindow.xaml.cs
│ │ │ ├── ProgressWindow.xaml
│ │ │ ├── ProgressWindow.xaml.cs
│ │ │ ├── RandomGameSelectWindow.xaml
│ │ │ ├── RandomGameSelectWindow.xaml.cs
│ │ │ ├── SearchWindow.xaml
│ │ │ ├── SearchWindow.xaml.cs
│ │ │ ├── SettingsWindow.xaml
│ │ │ ├── SettingsWindow.xaml.cs
│ │ │ ├── SingleItemSelectionWindow.xaml
│ │ │ ├── SingleItemSelectionWindow.xaml.cs
│ │ │ ├── ToolsConfigWindow.xaml
│ │ │ ├── ToolsConfigWindow.xaml.cs
│ │ │ ├── UpdateWindow.xaml
│ │ │ └── UpdateWindow.xaml.cs
│ │ ├── app.manifest
│ │ └── packages.config
│ ├── Playnite.FullscreenApp/
│ │ ├── Api/
│ │ │ └── MainViewAPI.cs
│ │ ├── App.config
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── Commands/
│ │ │ └── GlobalCommands.cs
│ │ ├── ControlGalleryView.xaml
│ │ ├── Controls/
│ │ │ ├── ButtonEx.cs
│ │ │ ├── CheckBoxEx.cs
│ │ │ ├── ComboBoxEx.cs
│ │ │ ├── FilterDbItemtSelection.cs
│ │ │ ├── FilterEnumListSelection.cs
│ │ │ ├── FilterPresetSelector.cs
│ │ │ ├── FilterStringListSelection.cs
│ │ │ ├── FullscreenTilePanel.cs
│ │ │ ├── GameListItem.cs
│ │ │ ├── ItemsControlEx.cs
│ │ │ ├── ListBoxEx.cs
│ │ │ ├── ScrollViewerEx.cs
│ │ │ ├── SettingsSections/
│ │ │ │ ├── Audio.xaml
│ │ │ │ ├── Audio.xaml.cs
│ │ │ │ ├── General.xaml
│ │ │ │ ├── General.xaml.cs
│ │ │ │ ├── Input.xaml
│ │ │ │ ├── Input.xaml.cs
│ │ │ │ ├── Layout.xaml
│ │ │ │ ├── Layout.xaml.cs
│ │ │ │ ├── Menus.xaml
│ │ │ │ ├── Menus.xaml.cs
│ │ │ │ ├── SettingsSectionControl.cs
│ │ │ │ ├── Visuals.xaml
│ │ │ │ └── Visuals.xaml.cs
│ │ │ ├── SliderEx.cs
│ │ │ ├── ToggleButtonEx.cs
│ │ │ └── Views/
│ │ │ ├── Filters.cs
│ │ │ ├── FiltersAdditional.cs
│ │ │ ├── GameDetails.cs
│ │ │ ├── GameStatus.cs
│ │ │ └── Main.cs
│ │ ├── FullscreenActionSelector.cs
│ │ ├── FullscreenApplication.cs
│ │ ├── FullscreenCollectionView.cs
│ │ ├── FullscreenDialogs.cs
│ │ ├── GlobalResources.xaml
│ │ ├── HiddenStyles.xaml
│ │ ├── Markup/
│ │ │ └── Markups.cs
│ │ ├── Playnite.FullscreenApp.csproj
│ │ ├── ProgramEntry.cs
│ │ ├── Properties/
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── Resources.Designer.cs
│ │ │ ├── Resources.resx
│ │ │ ├── Settings.Designer.cs
│ │ │ └── Settings.settings
│ │ ├── Themes/
│ │ │ ├── Fullscreen/
│ │ │ │ └── Default/
│ │ │ │ ├── Constants.xaml
│ │ │ │ ├── CustomControls/
│ │ │ │ │ ├── FilterDbItemtSelection.xaml
│ │ │ │ │ ├── FilterEnumListSelection.xaml
│ │ │ │ │ ├── FilterPresetSelector.xaml
│ │ │ │ │ └── FilterStringListSelection.xaml
│ │ │ │ ├── DefaultControls/
│ │ │ │ │ ├── Button.xaml
│ │ │ │ │ ├── CheckBox.xaml
│ │ │ │ │ ├── ComboBox.xaml
│ │ │ │ │ ├── ProgressBar.xaml
│ │ │ │ │ ├── ScrollViewer.xaml
│ │ │ │ │ ├── Slider.xaml
│ │ │ │ │ ├── TextBox.xaml
│ │ │ │ │ ├── ToggleButton.xaml
│ │ │ │ │ └── ToolTip.xaml
│ │ │ │ ├── DerivedStyles/
│ │ │ │ │ ├── ButtonBottomMenu.xaml
│ │ │ │ │ ├── ButtonTopMenu.xaml
│ │ │ │ │ ├── ListGameItemStyle.xaml
│ │ │ │ │ └── ListGameItemTemplate.xaml
│ │ │ │ ├── DescriptionView.html
│ │ │ │ ├── Images/
│ │ │ │ │ └── ButtonPrompts/
│ │ │ │ │ ├── PlayStation/
│ │ │ │ │ │ └── PlayStation.xaml
│ │ │ │ │ └── Xbox/
│ │ │ │ │ └── Xbox.xaml
│ │ │ │ ├── Media.xaml
│ │ │ │ ├── Views/
│ │ │ │ │ ├── CustomMenus.xaml
│ │ │ │ │ ├── FiltersAdditional.xaml
│ │ │ │ │ ├── FiltersView.xaml
│ │ │ │ │ ├── GameDetails.xaml
│ │ │ │ │ ├── GameMenu.xaml
│ │ │ │ │ ├── GameStatus.xaml
│ │ │ │ │ ├── HelpMenu.xaml
│ │ │ │ │ ├── ItemSelection.xaml
│ │ │ │ │ ├── Main.xaml
│ │ │ │ │ ├── MainMenu.xaml
│ │ │ │ │ ├── MessageBox.xaml
│ │ │ │ │ ├── NotificationsMenu.xaml
│ │ │ │ │ ├── SettingsMenus.xaml
│ │ │ │ │ └── TextInput.xaml
│ │ │ │ └── theme.yaml
│ │ │ └── Generic.xaml
│ │ ├── ViewModels/
│ │ │ ├── AddonsViewModel.cs
│ │ │ ├── DesignData/
│ │ │ │ └── DesignMainViewModel.cs
│ │ │ ├── ExtensionsMenuViewModels.cs
│ │ │ ├── FullscreenAppViewModel.cs
│ │ │ ├── FullscreenAppViewModel_Commands.cs
│ │ │ ├── GameClientsMenuViewModel.cs
│ │ │ ├── GameDetailsViewModel.cs
│ │ │ ├── GameMenuViewModel.cs
│ │ │ ├── GameStatusViewModel.cs
│ │ │ ├── HelpMenuViewModel.cs
│ │ │ ├── MainMenuViewModel.cs
│ │ │ ├── NotificationsViewModel.cs
│ │ │ ├── SettingsViewModel.cs
│ │ │ └── SoftwareToolsMenuViewModel.cs
│ │ ├── Windows/
│ │ │ ├── AddonsUpdateWindow.xaml
│ │ │ ├── AddonsUpdateWindow.xaml.cs
│ │ │ ├── CrashWindow.xaml
│ │ │ ├── CrashWindow.xaml.cs
│ │ │ ├── ExtensionCrashWindow.xaml
│ │ │ ├── ExtensionCrashWindow.xaml.cs
│ │ │ ├── ExtensionsMenuWindow.xaml
│ │ │ ├── ExtensionsMenuWindow.xaml.cs
│ │ │ ├── GameClientsMenuWindow.xaml
│ │ │ ├── GameClientsMenuWindow.xaml.cs
│ │ │ ├── GameMenuWindow.xaml
│ │ │ ├── GameMenuWindow.xaml.cs
│ │ │ ├── HelpMenuWindow.xaml
│ │ │ ├── HelpMenuWindow.xaml.cs
│ │ │ ├── LicenseAgreementWindow.xaml
│ │ │ ├── LicenseAgreementWindow.xaml.cs
│ │ │ ├── MainMenuWindow.xaml
│ │ │ ├── MainMenuWindow.xaml.cs
│ │ │ ├── MainWindow.xaml
│ │ │ ├── MainWindow.xaml.cs
│ │ │ ├── MessageBoxWindow.xaml
│ │ │ ├── MessageBoxWindow.xaml.cs
│ │ │ ├── MultiItemSelectionWindow.xaml
│ │ │ ├── MultiItemSelectionWindow.xaml.cs
│ │ │ ├── NotificationsWindow.xaml
│ │ │ ├── NotificationsWindow.xaml.cs
│ │ │ ├── ProgressWindow.xaml
│ │ │ ├── ProgressWindow.xaml.cs
│ │ │ ├── RandomGameSelectWindow.xaml
│ │ │ ├── RandomGameSelectWindow.xaml.cs
│ │ │ ├── SettingsWindow.xaml
│ │ │ ├── SettingsWindow.xaml.cs
│ │ │ ├── SingleItemSelectionWindow.xaml
│ │ │ ├── SingleItemSelectionWindow.xaml.cs
│ │ │ ├── SoftwareToolsMenuWindow.xaml
│ │ │ ├── SoftwareToolsMenuWindow.xaml.cs
│ │ │ ├── TextInputWindow.xaml
│ │ │ ├── TextInputWindow.xaml.cs
│ │ │ ├── UpdateWindow.xaml
│ │ │ ├── UpdateWindow.xaml.cs
│ │ │ └── WindowTools.cs
│ │ ├── app.manifest
│ │ └── packages.config
│ ├── Playnite.sln
│ ├── PlayniteSDK/
│ │ ├── ApplicationMode.cs
│ │ ├── BuiltInExtensions.cs
│ │ ├── Collections/
│ │ │ ├── ComparableList.cs
│ │ │ ├── ObservableConcurrentDictionary.cs
│ │ │ ├── ObservableObject.cs
│ │ │ └── RangeObservableCollection.cs
│ │ ├── Controls/
│ │ │ └── PluginUserControl.cs
│ │ ├── Data/
│ │ │ ├── DataSerialization.cs
│ │ │ ├── MarkupConverter.cs
│ │ │ └── SQLite.cs
│ │ ├── Database/
│ │ │ ├── IGameDatabase.cs
│ │ │ ├── IGameDatabaseAPI.cs
│ │ │ └── IItemCollection.cs
│ │ ├── Events/
│ │ │ ├── ApplicationEvents.cs
│ │ │ ├── PlayniteUriEventArgs.cs
│ │ │ └── WebViewEvents.cs
│ │ ├── Exceptions/
│ │ │ ├── LocalizedException.cs
│ │ │ ├── ReferenceException.cs
│ │ │ ├── ScriptRuntimeException.cs
│ │ │ └── TypeMismatchException.cs
│ │ ├── ExpandableVariables.cs
│ │ ├── ExtensionFunction.cs
│ │ ├── Extensions/
│ │ │ ├── ListExtensions.cs
│ │ │ └── StringExtensions.cs
│ │ ├── IAddons.cs
│ │ ├── IDialogsFactory.cs
│ │ ├── IEmulationAPI.cs
│ │ ├── ILogger.cs
│ │ ├── IMainViewAPI.cs
│ │ ├── INotificationsAPI.cs
│ │ ├── IPlayniteAPI.cs
│ │ ├── IPlayniteInfoAPI.cs
│ │ ├── IPlaynitePathsAPI.cs
│ │ ├── IPlayniteSettingsAPI.cs
│ │ ├── ISettings.cs
│ │ ├── IUriHandlerAPI.cs
│ │ ├── IWebView.cs
│ │ ├── LibraryClient.cs
│ │ ├── LogManager.cs
│ │ ├── MetadataProvider.cs
│ │ ├── Models/
│ │ │ ├── AgeRating.cs
│ │ │ ├── AgeRatingOrg.cs
│ │ │ ├── AppSoftware.cs
│ │ │ ├── Category.cs
│ │ │ ├── Company.cs
│ │ │ ├── CompletionStatus.cs
│ │ │ ├── DatabaseObject.cs
│ │ │ ├── Emulator.cs
│ │ │ ├── FilterPreset.cs
│ │ │ ├── Game.cs
│ │ │ ├── GameAction.cs
│ │ │ ├── GameFeature.cs
│ │ │ ├── GameMetadata.cs
│ │ │ ├── GameRom.cs
│ │ │ ├── GameScannerConfig.cs
│ │ │ ├── GameSource.cs
│ │ │ ├── Genre.cs
│ │ │ ├── IIdentifiable.cs
│ │ │ ├── ImportExclusionList.cs
│ │ │ ├── InstallSizeGroup.cs
│ │ │ ├── InstallationStatus.cs
│ │ │ ├── Link.cs
│ │ │ ├── PastTimeSegment.cs
│ │ │ ├── Platform.cs
│ │ │ ├── PlaytimeCategory.cs
│ │ │ ├── Region.cs
│ │ │ ├── ReleaseDate.cs
│ │ │ ├── ScoreGroup.cs
│ │ │ ├── Series.cs
│ │ │ └── Tag.cs
│ │ ├── Playnite.SDK.csproj
│ │ ├── Plugins/
│ │ │ ├── Actions.cs
│ │ │ ├── LibraryPlugin.cs
│ │ │ ├── MenuEntry.cs
│ │ │ ├── MetadataPlugin.cs
│ │ │ ├── Plugin.cs
│ │ │ ├── Search.cs
│ │ │ ├── SidebarItem.cs
│ │ │ └── TopPanelItem.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── RelayCommand.cs
│ │ ├── ResourceProvider.cs
│ │ ├── SdkVersions.cs
│ │ ├── WebViewModels.cs
│ │ └── readme.md
│ ├── Tests/
│ │ ├── Playnite.DesktopApp.Tests/
│ │ │ ├── GamesEditorTests.cs
│ │ │ ├── MainViewAPITests.cs
│ │ │ ├── Playnite.DesktopApp.Tests.csproj
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── SkinsTests.cs
│ │ │ ├── TestsSetupClass.cs
│ │ │ ├── ViewModels/
│ │ │ │ ├── DatabaseFieldsManagerViewModelTests.cs
│ │ │ │ └── GameEditViewModelTests.cs
│ │ │ ├── app.config
│ │ │ └── packages.config
│ │ ├── Playnite.FullscreenApp.Tests/
│ │ │ ├── Controls/
│ │ │ │ └── FullscreenTilePanelTests.cs
│ │ │ ├── Playnite.FullscreenApp.Tests.csproj
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── app.config
│ │ │ └── packages.config
│ │ ├── Playnite.Tests/
│ │ │ ├── Api/
│ │ │ │ └── PluginDescriptionTests.cs
│ │ │ ├── App/
│ │ │ │ └── UpdateTests.cs
│ │ │ ├── App.config
│ │ │ ├── ArchiveTests.cs
│ │ │ ├── BackupTests.cs
│ │ │ ├── CloneObjectTests.cs
│ │ │ ├── Converters/
│ │ │ │ └── PlayTimeToStringConverterTests.cs
│ │ │ ├── CueSheetTests.cs
│ │ │ ├── Database/
│ │ │ │ ├── EmulatorsCollectionTests.cs
│ │ │ │ ├── FiltersDatabaseTests.cs
│ │ │ │ ├── GameDatabaseFileTests.cs
│ │ │ │ ├── GameDatabaseMigrationTests.cs
│ │ │ │ ├── GameDatabasePlatformsTests.cs
│ │ │ │ ├── GameDatabaseTests.cs
│ │ │ │ ├── GameLibraryFilterTests.cs
│ │ │ │ ├── GameLibraryTests.cs
│ │ │ │ └── ItemCollectionTests.cs
│ │ │ ├── DictionaryTests.cs
│ │ │ ├── Emulators/
│ │ │ │ ├── EmulationDatabaseTests.cs
│ │ │ │ ├── EmulationTests.cs
│ │ │ │ ├── EmulatorDefinitionTests.cs
│ │ │ │ ├── EmulatorScannerTests.cs
│ │ │ │ ├── ScannedGameTests.cs
│ │ │ │ └── ScannerTests.cs
│ │ │ ├── ExtensionFactoryTests.cs
│ │ │ ├── Extensions/
│ │ │ │ ├── BitmapExtensionsTests.cs
│ │ │ │ ├── DateTimesTests.cs
│ │ │ │ ├── EnumsTests.cs
│ │ │ │ ├── NetExtensionsTests.cs
│ │ │ │ ├── ObjectExtensionsTests.cs
│ │ │ │ └── StringExtensionsTests.cs
│ │ │ ├── FileSystemTests.cs
│ │ │ ├── GameFieldComparerTests.cs
│ │ │ ├── GamesEditorTests.cs
│ │ │ ├── GamesStatsTests.cs
│ │ │ ├── ImageSourceManagerTests.cs
│ │ │ ├── ImagesTests.cs
│ │ │ ├── IniParserTests.cs
│ │ │ ├── InstallSizeScanTests.cs
│ │ │ ├── ListExtensionsTests.cs
│ │ │ ├── LocalizationTests.cs
│ │ │ ├── M3UTests.cs
│ │ │ ├── Manifests/
│ │ │ │ └── AddonManifestTests.cs
│ │ │ ├── Metadata/
│ │ │ │ └── MetadataDownloaderDownloadTests.cs
│ │ │ ├── Models/
│ │ │ │ ├── CopyDiffToTest.cs
│ │ │ │ ├── DatabaseObjectTests.cs
│ │ │ │ ├── GameActionTests.cs
│ │ │ │ ├── GameTests.cs
│ │ │ │ └── MetadataPropertyTests.cs
│ │ │ ├── PathsTests.cs
│ │ │ ├── Playnite.Tests.csproj
│ │ │ ├── PlayniteUriHandlerTests.cs
│ │ │ ├── Plugins/
│ │ │ │ └── ExtensionManifestTests.cs
│ │ │ ├── ProcessStarterTests.cs
│ │ │ ├── ProgramsTests.cs
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── ReleaseDateTests.cs
│ │ │ ├── Resources/
│ │ │ │ ├── GOG/
│ │ │ │ │ └── library_unreleased.json
│ │ │ │ ├── Serialization/
│ │ │ │ │ ├── invalid.json
│ │ │ │ │ ├── invalid.toml
│ │ │ │ │ ├── invalid.yaml
│ │ │ │ │ ├── valid.json
│ │ │ │ │ ├── valid.toml
│ │ │ │ │ └── valid.yaml
│ │ │ │ ├── SizeScan/
│ │ │ │ │ ├── CueNonExistingFiles.cue
│ │ │ │ │ └── CueTestFiles.cue
│ │ │ │ ├── TestIni.ini
│ │ │ │ ├── TestIni.md5
│ │ │ │ ├── TestIni.sfv
│ │ │ │ ├── TestUpdateManifest.json
│ │ │ │ ├── XmlTest/
│ │ │ │ │ ├── Xml1.xaml
│ │ │ │ │ ├── Xml2.xaml
│ │ │ │ │ ├── Xml3.xaml
│ │ │ │ │ └── Xml4.xaml
│ │ │ │ └── test.m3u
│ │ │ ├── SafeFileEnumeratorTests.cs
│ │ │ ├── Scripting/
│ │ │ │ └── PowerShell/
│ │ │ │ └── PowerShellTests.cs
│ │ │ ├── SearchViewModelTests.cs
│ │ │ ├── SelectableDbItemListTests.cs
│ │ │ ├── SerializationTests.cs
│ │ │ ├── Settings/
│ │ │ │ └── FilterSettingsTests.cs
│ │ │ ├── SettingsTests.cs
│ │ │ ├── SigningToolsTests.cs
│ │ │ ├── SizesTests.cs
│ │ │ ├── SortableNameConverterTests.cs
│ │ │ ├── StringExtensionsTests.cs
│ │ │ ├── System/
│ │ │ │ ├── ComputerTests.cs
│ │ │ │ └── ProcessExtensionsTests.cs
│ │ │ ├── TimerTests.cs
│ │ │ ├── Web/
│ │ │ │ └── HttpDownloaderTests.cs
│ │ │ ├── XmlTests.cs
│ │ │ ├── _TestTools/
│ │ │ │ ├── GameDbTestWrapper.cs
│ │ │ │ ├── MockDialogsFactory.cs
│ │ │ │ ├── MockWindowFactory.cs
│ │ │ │ ├── PlayniteTests.cs
│ │ │ │ ├── TestAppTools.cs
│ │ │ │ ├── TestDateTimes.cs
│ │ │ │ ├── TestEmulationDatabase.cs
│ │ │ │ ├── TestPlayniteApplication.cs
│ │ │ │ ├── TestResourceProvider.cs
│ │ │ │ └── TestsSetupClass.cs
│ │ │ └── packages.config
│ │ ├── Playnite.Toolbox.Tests/
│ │ │ ├── ExtensionsTests.cs
│ │ │ ├── PathsTests.cs
│ │ │ ├── Playnite.Toolbox.Tests.csproj
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── Resources/
│ │ │ │ └── Changelog/
│ │ │ │ ├── 1.1.0-1.2.0.txt
│ │ │ │ ├── 1.2.0-1.3.0.txt
│ │ │ │ └── 1.3.0-1.4.0.txt
│ │ │ ├── ThemesTests.cs
│ │ │ ├── app.config
│ │ │ └── packages.config
│ │ ├── TestApp/
│ │ │ ├── App.config
│ │ │ ├── Properties/
│ │ │ │ ├── AssemblyInfo.cs
│ │ │ │ ├── Resources.Designer.cs
│ │ │ │ ├── Resources.resx
│ │ │ │ ├── Settings.Designer.cs
│ │ │ │ └── Settings.settings
│ │ │ ├── TestApp.cs
│ │ │ ├── TestApp.csproj
│ │ │ ├── TestAppProcInfo.cs
│ │ │ ├── app.manifest
│ │ │ └── packages.config
│ │ ├── TestGameLibrary/
│ │ │ ├── BuildCopyExclude.txt
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── Resources/
│ │ │ │ └── icon.tga
│ │ │ ├── TestGameLibrary.cs
│ │ │ ├── TestGameLibrary.csproj
│ │ │ └── extension.yaml
│ │ ├── TestMetadataPlugin/
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── TestMetadataPlugin.cs
│ │ │ ├── TestMetadataPlugin.csproj
│ │ │ └── extension.yaml
│ │ └── TestPlugin/
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── TestPlugin.cs
│ │ ├── TestPlugin.csproj
│ │ ├── TestPluginSettings.cs
│ │ ├── TestPluginSettingsView.xaml
│ │ ├── TestPluginSettingsView.xaml.cs
│ │ ├── TestPluginUserControl.xaml
│ │ ├── TestPluginUserControl.xaml.cs
│ │ └── extension.yaml
│ └── Tools/
│ ├── Playnite.Toolbox/
│ │ ├── App.config
│ │ ├── CmdLineOptions.cs
│ │ ├── Extensions.cs
│ │ ├── NLog.config
│ │ ├── Paths.cs
│ │ ├── Playnite.Toolbox.csproj
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Strings.cs
│ │ ├── Templates/
│ │ │ ├── Extensions/
│ │ │ │ ├── CustomLibraryPlugin/
│ │ │ │ │ ├── App.xaml
│ │ │ │ │ ├── BuildInclude.txt
│ │ │ │ │ ├── CustomLibraryPlugin.csproj
│ │ │ │ │ ├── CustomLibraryPlugin.sln
│ │ │ │ │ ├── Localization/
│ │ │ │ │ │ └── en_US.xaml
│ │ │ │ │ ├── Properties/
│ │ │ │ │ │ └── AssemblyInfo.cs
│ │ │ │ │ ├── _name_.cs
│ │ │ │ │ ├── _name_Client.cs
│ │ │ │ │ ├── _name_Settings.cs
│ │ │ │ │ ├── _name_SettingsView.xaml
│ │ │ │ │ ├── _name_SettingsView.xaml.cs
│ │ │ │ │ ├── extension.yaml
│ │ │ │ │ └── packages.config
│ │ │ │ ├── CustomMetadataPlugin/
│ │ │ │ │ ├── App.xaml
│ │ │ │ │ ├── BuildInclude.txt
│ │ │ │ │ ├── CustomMetadataPlugin.csproj
│ │ │ │ │ ├── CustomMetadataPlugin.sln
│ │ │ │ │ ├── Localization/
│ │ │ │ │ │ └── en_US.xaml
│ │ │ │ │ ├── Properties/
│ │ │ │ │ │ └── AssemblyInfo.cs
│ │ │ │ │ ├── _name_.cs
│ │ │ │ │ ├── _name_Provider.cs
│ │ │ │ │ ├── _name_Settings.cs
│ │ │ │ │ ├── _name_SettingsView.xaml
│ │ │ │ │ ├── _name_SettingsView.xaml.cs
│ │ │ │ │ ├── extension.yaml
│ │ │ │ │ └── packages.config
│ │ │ │ ├── GenericPlugin/
│ │ │ │ │ ├── App.xaml
│ │ │ │ │ ├── BuildInclude.txt
│ │ │ │ │ ├── GenericPlugin.csproj
│ │ │ │ │ ├── GenericPlugin.sln
│ │ │ │ │ ├── Localization/
│ │ │ │ │ │ └── en_US.xaml
│ │ │ │ │ ├── Properties/
│ │ │ │ │ │ └── AssemblyInfo.cs
│ │ │ │ │ ├── _name_.cs
│ │ │ │ │ ├── _name_Settings.cs
│ │ │ │ │ ├── _name_SettingsView.xaml
│ │ │ │ │ ├── _name_SettingsView.xaml.cs
│ │ │ │ │ ├── extension.yaml
│ │ │ │ │ └── packages.config
│ │ │ │ └── PowerShellScript/
│ │ │ │ ├── BuildInclude.txt
│ │ │ │ ├── PowerShellScript.psm1
│ │ │ │ └── extension.yaml
│ │ │ └── Themes/
│ │ │ ├── Changelog/
│ │ │ │ ├── 1.0.0-1.1.0.txt
│ │ │ │ ├── 1.1.0-1.2.0.txt
│ │ │ │ ├── 1.2.0-1.3.0.txt
│ │ │ │ ├── 1.3.0-1.4.0.txt
│ │ │ │ ├── 1.4.0-1.4.1.txt
│ │ │ │ ├── 1.4.1-1.5.0.txt
│ │ │ │ ├── 1.5.0-1.6.0.txt
│ │ │ │ ├── 1.6.0-1.7.0.txt
│ │ │ │ ├── 1.7.0-1.8.0.txt
│ │ │ │ ├── 1.8.0-1.9.0.txt
│ │ │ │ ├── 1.9.0-2.0.0.txt
│ │ │ │ ├── 2.0.0-2.1.0.txt
│ │ │ │ ├── 2.1.0-2.2.0.txt
│ │ │ │ ├── 2.2.0-2.3.0.txt
│ │ │ │ ├── 2.3.0-2.4.0.txt
│ │ │ │ ├── 2.4.0-2.5.0.txt
│ │ │ │ ├── 2.5.0-2.6.0.txt
│ │ │ │ ├── 2.7.0-2.8.0.txt
│ │ │ │ └── 2.8.0-2.9.0.txt
│ │ │ ├── Desktop/
│ │ │ │ ├── Theme.csproj
│ │ │ │ └── Theme.sln
│ │ │ └── Fullscreen/
│ │ │ ├── Theme.csproj
│ │ │ └── Theme.sln
│ │ ├── Themes.cs
│ │ ├── Verify.cs
│ │ └── packages.config
│ ├── Playnite.Utilities/
│ │ ├── App.config
│ │ ├── DatParser.cs
│ │ ├── Playnite.Utilities.csproj
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ └── packages.config
│ └── PlayniteInstaller/
│ ├── App.config
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Classic.xaml
│ ├── Converters.cs
│ ├── Logger.cs
│ ├── MainViewModel.cs
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ ├── PlayniteInstaller.csproj
│ ├── Properties/
│ │ ├── AssemblyInfo.cs
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.resx
│ │ ├── Settings.Designer.cs
│ │ └── Settings.settings
│ ├── app.manifest
│ └── installer_mirrors.txt
└── tests/
├── Extensions/
│ ├── Plugins/
│ │ ├── FullTestPluginDev/
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── TestPluginDev.cs
│ │ │ ├── TestPluginDev.csproj
│ │ │ ├── TestPluginDev.sln
│ │ │ └── packages.config
│ │ ├── FullTestPluginNuget/
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── TestPluginNuget.cs
│ │ │ ├── TestPluginNuget.csproj
│ │ │ ├── TestPluginNuget.sln
│ │ │ └── packages.config
│ │ └── LibraryExporter/
│ │ ├── LibraryExporter.psm1
│ │ └── plugin.info
│ └── Scripts/
│ ├── FullPowerShellScript.ps1
│ └── FullPythonScript.py
├── Mapping/
│ ├── AboutWindow.ps1
│ ├── CategoryConfigWindow.ps1
│ ├── CrashHandlerWindow.ps1
│ ├── FirstTimeWizardWindow.ps1
│ ├── GameEditWindow.ps1
│ ├── InstalledGamesWindow.ps1
│ ├── MainWindow.ps1
│ ├── MetadataLookupWindow.ps1
│ ├── NotificationsWindow.ps1
│ ├── OpenFileWindow.ps1
│ ├── SettingsWindow.ps1
│ ├── SetupUninstallWindow.ps1
│ ├── SetupWindow.ps1
│ └── SystemDialog.ps1
├── PlayniteCommon.ps1
├── RunTests.ps1
├── Setup/
│ └── Setup.Tests.ps1
├── TestConfig.Template.yaml
├── TestExtensions.ps1
└── UI/
├── CustomGames.Tests.ps1
├── FirstTimeWizard.Tests.ps1
├── GameEditWindow.Tests.ps1
├── InstalledGamesImport.Tests.ps1
└── Startup.Tests.ps1
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
patreon: playnite
ko_fi: playnite
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug report
description: Create a report to help us improve
labels: ['bug']
body:
- type: markdown
attributes:
value: |
**Before creating bug report:**
- Please post in English language only!
- Please use issue search in the repository first. If the bug is something really obvious there's a high change it was already reported.
- Make sure that the issue is not caused by custom theme or extension. You can restart Playnite in "safe mode" from help menu to quickly test it.
- Check list of known issues https://github.com/JosefNemec/Playnite/wiki/Known-Issues
**Integration issues**
If an issue is related to library integrations, use separate [extensions repository](https://github.com/JosefNemec/PlayniteExtensions) to file a report.
- type: textarea
attributes:
label: Bug Description
description: A clear and concise description of what the bug is.
validations:
required: true
- type: textarea
attributes:
label: To Reproduce
description: If it''s not clear from the description how to reproduce the issue please add clear steps to reproduce the behavior.
validations:
required: false
- type: input
attributes:
label: Diagnostics ID
description: 'Please generate diagnostics package from "About Playnite" menu and attach identifier you received. If the issue is a crash bug, you can generate diag. package directly from crash dialog.'
validations:
required: true
- type: textarea
attributes:
label: Screenshots
description: If applicable, add screenshots to help explain your problem.
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Playnite Discord server
url: https://playnite.link/discord
about: Official Discord server for general chat and support with Playnite.
- name: Playnite SDK documentation
url: https://playnite.link/docs/
about: Useful documentation when creating plugins and themes.
================================================
FILE: .github/ISSUE_TEMPLATE/custom.md
================================================
## Use [issue templates](https://github.com/JosefNemec/Playnite/issues/new/choose) instead!
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: Feature request
description: Suggest an idea for this project
labels: ['enhancement']
body:
- type: markdown
attributes:
value: |
Please post in English language only!
**Integration features**
If a feature request is related to library integrations, use separate [extensions repository](https://github.com/JosefNemec/PlayniteExtensions) to file a request.
**Check for existing issue**
Please use issue search in the repository if your feature request is something really obvious there's a high change it was already requested.
- type: textarea
attributes:
label: Feature description
description: A clear and concise description of feature you want to be added.
validations:
required: true
- type: textarea
attributes:
label: Screenshots
description: If applicable, add screenshots to help explain requested changes.
validations:
required: false
================================================
FILE: .github/pull_request_template.md
================================================
Pull requests are generally on pause because majority of code base is being rewritten for Playnite 11.
Smaller "safe" changes for P10 might get accepted based on what they and if they come with test coverage. If you plan to work on bigger changes, please discuss it first in related issue or on Discord, thank you.
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
[Originals]/
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
project.fragment.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush
.cr/
# Visual Studio Code stuff
.vscode/
build/nuget.exe
build/PlayniteSetup.exe
build/PlaynitePortable.zip
build/TestPackage/*
build/PlayniteServices/*
build/ReleaseSDK/*
build/DebugSDK/*
build/Playnite.zip
tests/TestConfig.yaml
# Don't share API keys with anyone :)
source/PlayniteServices/customSettings.json
source/PlayniteServices/patreonTokens.json
source/PlayniteServices/twitchTokens.json
# Not redistributable
XBOXONE.ttf
PlayStation4.ttf
source/Playnite.FullscreenApp/Themes/Fullscreen/Default/audio/*
================================================
FILE: LICENSE.md
================================================
MIT License
Copyright (c) 2020 Josef Nemec
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# <img src="https://playnite.link/applogo.png" width="32"> Playnite [](https://crowdin.com/project/playnite)
An open source video game library manager and launcher with support for 3rd party libraries like Steam, Epic, GOG, EA App, Battle.net and [others](https://playnite.link/addons.html). Includes game emulation support, providing one unified interface for your games.
Screenshots are available at the [Homepage](http://playnite.link/)
*If you find Playnite useful please consider supporting the lead developer [Josef Nemec](https://github.com/JosefNemec) on [Patreon](https://www.patreon.com/playnite).*
Features
---------
See the [Homepage](http://playnite.link/) for the list of features.
Download
---------
Grab the latest installer or portable package from the [download](https://playnite.link/download.html) page. Playnite will automatically notify you about a new version upon release.
Requirements: Windows 10 or 11
FAQ, Known Issues, user manual
---------
Can be found [here](https://api.playnite.link/docs/)
Questions, issues etc.
---------
If you find a bug please file an [issue](https://github.com/JosefNemec/Playnite/issues) and if relevant (crashes, broken features) please attach a diagnostics package, which can be created from inside the "About Playnite..." submenu.
Biggest community around Playnite currently gathers on our [Discord server](https://playnite.link/discord) and [Reddit](https://www.reddit.com/r/playnite/).
Privacy Statement
---------
Playnite itself doesn't store any user information and you generally don't need to provide any information to import installed games. All game library data is stored locally on your PC.
Account connection process depends on how a library plugin is implemented, but is usually done via official login web forms and only the web session cookies or tokens are stored, the same way when you login to those services via the web browser.
Add-ons
---------
Playnite can be extended with plugins (written in .NET languages), PowerShell scripts and user interface themes.
See the [extensions portal](https://api.playnite.link/docs/tutorials/index.html) for more information about how to make these addons.
Translations
---------
We use Crowdin to manage localization, please join our project if you want to submit translations:
https://crowdin.com/project/playnite
Proofreading changes to original English strings can be submitted by creating pull request for [LocSource.xaml](https://github.com/JosefNemec/Playnite/blob/devel/source/Playnite/Localization/LocSource.xaml) file.
Code Contributions
---------
Pull requests are generally on pause because majority of code base is being rewritten for Playnite 11. Smaller "safe" changes for P10 might get accepted based on what they and if they come with test coverage. If you plan to work on bigger changes, please discuss it first in related issue or on Discord, thank you.
Please ask in the related issue first before starting implementing something to make sure that nobody else is already working on it. If an issue doesn't exist for your feature/bug fix, create one first.
Regarding code styling, there are only a few major rules:
- private fields and properties should use camelCase (without underscore)
- all methods (private and public) should use PascalCase
- use spaces instead of tabs with 4 spaces width
- add empty line between code block end `}` and additional expression
- always encapsulate the code body after *if, for, foreach, while* etc. with curly braces:
```csharp
if (true)
{
DoSomething();
}
DoSomethingElse();
```
instead of
```csharp
if (true)
DoSomething();
DoSomethingElse();
```
Branches
---------
* `master` - default branch representing state of currently released build.
* `devel` - development branch containing latest changes. All pull requests should be made against `devel` branch.
* `devel*` - development branches for specific features/versions.
Roadmap
---------
Playnite is currently being rewritten from scratch for next major version release 11. The work is being done in private repository until beta release, after which the code will be release in this repository under the same license as current version 10 release. There is no list of planned changes and new features for version 11.
Development
---------
See the [wiki](https://github.com/JosefNemec/Playnite/wiki/Building) for info about building and setting up the development environment.
Others
---------
.NET development tools courtesy of [JetBrains](https://www.jetbrains.com/?from=Playnite)
[](https://www.jetbrains.com/?from=Playnite)
This program uses free code signing provided by [SignPath.io](https://signpath.io?utm_source=foundation&utm_medium=github&utm_campaign=playnite), and a free code signing certificate by the [SignPath Foundation](https://signpath.org?utm_source=foundation&utm_medium=github&utm_campaign=playnite)
[](https://about.signpath.io?utm_source=foundation&utm_medium=github&utm_campaign=playnite)
================================================
FILE: appveyor.yml
================================================
version: '{branch}_{build}'
pull_requests:
do_not_increment_build_number: true
branches:
only:
- master
skip_non_tags: true
image: Visual Studio 2019
shallow_clone: true
environment:
LicensedDependenciesUrl:
secure: ZTSg1DK6QAtwZoCBUDQ94cIaMCKWgSeJMI0dCpVJBPE40+UqG9MNu+UJjjGWjvVa
OnlineInstallerConfig: https://playnite.link/build/installer_mirrors.txt
build_script:
- pwsh: .\build\build.ps1 -Package -SdkNuget -LicensedDependenciesUrl $env:LicensedDependenciesUrl -OnlineInstallerConfig $env:OnlineInstallerConfig
test: off
artifacts:
- path: 'build\Playnite.zip'
deploy:
- provider: Webhook
url: https://app.signpath.io/API/v1/4028e7e6-f183-4bbf-9640-c4b4d9a6992d/Integrations/AppVeyor?ProjectSlug=Playnite&SigningPolicySlug=release-signing
authorization:
secure: ZXw8Ro7eQ0opsdjLpNH7ZgTgS8ycnud7ag2qNOMRvqdxBmvegj+7QHrsh4pSgTSINhB5tbTZwgiMKFDjJV9QHg==
================================================
FILE: build/ExtensionsRefIgnoreList.txt
================================================
AngleSharp.dll
CefSharp.dll
CefSharp.BrowserSubprocess.Core.dll
CefSharp.Core.dll
CefSharp.Core.Runtime.dll
CefSharp.OffScreen.dll
CefSharp.Wpf.dll
CommandLine.dll
concrt140.dll
Crc32.NET.dll
d3dcompiler_47.dll
DiscordRPC.dll
Flurl.dll
Hardcodet.Wpf.TaskbarNotification.dll
HtmlRenderer.dll
HtmlRenderer.WPF.dll
chrome_elf.dll
libcef.dll
libEGL.dll
libGLESv2.dll
LiteDB.dll
Magick.Native-Q8-x86.dll
Magick.NET.Core.dll
Magick.NET.SystemWindowsMedia.dll
Magick.NET-Q8-x86.dll
Markdig.dll
Microsoft.Dynamic.dll
Microsoft.Practices.ServiceLocation.dll
Microsoft.Scripting.dll
Microsoft.Scripting.Metadata.dll
Microsoft.VisualStudio.CodeCoverage.Shim.dll
Microsoft.Win32.Primitives.dll
Microsoft.WindowsAPICodePack.dll
Microsoft.WindowsAPICodePack.ExtendedLinguisticServices.dll
Microsoft.WindowsAPICodePack.Sensors.dll
Microsoft.WindowsAPICodePack.Shell.dll
Microsoft.WindowsAPICodePack.ShellExtensions.dll
Microsoft.Xaml.Behaviors.dll
msvcp140.dll
msvcp140_1.dll
msvcp140_2.dll
msvcp140_atomic_wait.dll
msvcp140_codecvt_ids.dll
netstandard.dll
Nett.dll
Newtonsoft.Json.dll
NLog.dll
PhotoSauce.MagicScaler.dll
Playnite.dll
Playnite.SDK.dll
Polly.dll
Prism.dll
Prism.Wpf.dll
protobuf-net.dll
SDL2.dll
SDL2_mixer.dll
SharpCompress.dll
sqlite3.x86.dll
SQLNado.dll
System.AppContext.dll
System.Buffers.dll
System.Collections.dll
System.Collections.Concurrent.dll
System.Collections.NonGeneric.dll
System.Collections.Specialized.dll
System.ComponentModel.dll
System.ComponentModel.EventBasedAsync.dll
System.ComponentModel.Primitives.dll
System.ComponentModel.TypeConverter.dll
System.Console.dll
System.Data.Common.dll
System.Diagnostics.Contracts.dll
System.Diagnostics.Debug.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.Process.dll
System.Diagnostics.StackTrace.dll
System.Diagnostics.TextWriterTraceListener.dll
System.Diagnostics.Tools.dll
System.Diagnostics.TraceSource.dll
System.Diagnostics.Tracing.dll
System.Drawing.Primitives.dll
System.Dynamic.Runtime.dll
System.Globalization.dll
System.Globalization.Calendars.dll
System.Globalization.Extensions.dll
System.IO.dll
System.IO.Abstractions.dll
System.IO.Compression.dll
System.IO.Compression.ZipFile.dll
System.IO.FileSystem.dll
System.IO.FileSystem.DriveInfo.dll
System.IO.FileSystem.Primitives.dll
System.IO.FileSystem.Watcher.dll
System.IO.IsolatedStorage.dll
System.IO.MemoryMappedFiles.dll
System.IO.Pipes.dll
System.IO.UnmanagedMemoryStream.dll
System.Linq.dll
System.Linq.Expressions.dll
System.Linq.Parallel.dll
System.Linq.Queryable.dll
System.Memory.dll
System.Net.Http.dll
System.Net.NameResolution.dll
System.Net.NetworkInformation.dll
System.Net.Ping.dll
System.Net.Primitives.dll
System.Net.Requests.dll
System.Net.Security.dll
System.Net.Sockets.dll
System.Net.WebHeaderCollection.dll
System.Net.WebSockets.dll
System.Net.WebSockets.Client.dll
System.Numerics.Vectors.dll
System.ObjectModel.dll
System.Reflection.dll
System.Reflection.Extensions.dll
System.Reflection.Primitives.dll
System.Resources.Reader.dll
System.Resources.ResourceManager.dll
System.Resources.Writer.dll
System.Runtime.dll
System.Runtime.CompilerServices.Unsafe.dll
System.Runtime.CompilerServices.VisualC.dll
System.Runtime.Extensions.dll
System.Runtime.Handles.dll
System.Runtime.InteropServices.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Runtime.Numerics.dll
System.Runtime.Serialization.Formatters.dll
System.Runtime.Serialization.Json.dll
System.Runtime.Serialization.Primitives.dll
System.Runtime.Serialization.Xml.dll
System.Security.Claims.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Csp.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Security.Principal.dll
System.Security.SecureString.dll
System.Text.Encoding.dll
System.Text.Encoding.Extensions.dll
System.Text.RegularExpressions.dll
System.Threading.dll
System.Threading.Overlapped.dll
System.Threading.Tasks.dll
System.Threading.Tasks.Parallel.dll
System.Threading.Thread.dll
System.Threading.ThreadPool.dll
System.Threading.Timer.dll
System.ValueTuple.dll
System.Windows.Interactivity.dll
System.Xml.ReaderWriter.dll
System.Xml.XDocument.dll
System.Xml.XmlDocument.dll
System.Xml.XmlSerializer.dll
System.Xml.XPath.dll
System.Xml.XPath.XDocument.dll
vccorlib140.dll
vcruntime140.dll
vcruntime140_threads.dll
vk_swiftshader.dll
vulkan-1.dll
YamlDotNet.dll
AngleSharp.xml
CefSharp.xml
CefSharp.BrowserSubprocess.Core.xml
CefSharp.Core.xml
CefSharp.Core.Runtime.xml
CefSharp.OffScreen.xml
CefSharp.Wpf.xml
CommandLine.xml
concrt140.xml
Crc32.NET.xml
d3dcompiler_47.xml
DiscordRPC.xml
Flurl.xml
Hardcodet.Wpf.TaskbarNotification.xml
HtmlRenderer.xml
HtmlRenderer.WPF.xml
chrome_elf.xml
libcef.xml
libEGL.xml
libGLESv2.xml
LiteDB.xml
Magick.Native-Q8-x86.xml
Magick.NET.Core.xml
Magick.NET.SystemWindowsMedia.xml
Magick.NET-Q8-x86.xml
Markdig.xml
Microsoft.Dynamic.xml
Microsoft.Practices.ServiceLocation.xml
Microsoft.Scripting.xml
Microsoft.Scripting.Metadata.xml
Microsoft.VisualStudio.CodeCoverage.Shim.xml
Microsoft.Win32.Primitives.xml
Microsoft.WindowsAPICodePack.xml
Microsoft.WindowsAPICodePack.ExtendedLinguisticServices.xml
Microsoft.WindowsAPICodePack.Sensors.xml
Microsoft.WindowsAPICodePack.Shell.xml
Microsoft.WindowsAPICodePack.ShellExtensions.xml
Microsoft.Xaml.Behaviors.xml
msvcp140.xml
msvcp140_1.xml
msvcp140_2.xml
msvcp140_atomic_wait.xml
msvcp140_codecvt_ids.xml
netstandard.xml
Nett.xml
Newtonsoft.Json.xml
NLog.xml
PhotoSauce.MagicScaler.xml
Playnite.xml
Playnite.SDK.xml
Polly.xml
Prism.xml
Prism.Wpf.xml
protobuf-net.xml
SDL2.xml
SDL2_mixer.xml
SharpCompress.xml
sqlite3.x86.xml
SQLNado.xml
System.AppContext.xml
System.Buffers.xml
System.Collections.xml
System.Collections.Concurrent.xml
System.Collections.NonGeneric.xml
System.Collections.Specialized.xml
System.ComponentModel.xml
System.ComponentModel.EventBasedAsync.xml
System.ComponentModel.Primitives.xml
System.ComponentModel.TypeConverter.xml
System.Console.xml
System.Data.Common.xml
System.Diagnostics.Contracts.xml
System.Diagnostics.Debug.xml
System.Diagnostics.FileVersionInfo.xml
System.Diagnostics.Process.xml
System.Diagnostics.StackTrace.xml
System.Diagnostics.TextWriterTraceListener.xml
System.Diagnostics.Tools.xml
System.Diagnostics.TraceSource.xml
System.Diagnostics.Tracing.xml
System.Drawing.Primitives.xml
System.Dynamic.Runtime.xml
System.Globalization.xml
System.Globalization.Calendars.xml
System.Globalization.Extensions.xml
System.IO.xml
System.IO.Abstractions.xml
System.IO.Compression.xml
System.IO.Compression.ZipFile.xml
System.IO.FileSystem.xml
System.IO.FileSystem.DriveInfo.xml
System.IO.FileSystem.Primitives.xml
System.IO.FileSystem.Watcher.xml
System.IO.IsolatedStorage.xml
System.IO.MemoryMappedFiles.xml
System.IO.Pipes.xml
System.IO.UnmanagedMemoryStream.xml
System.Linq.xml
System.Linq.Expressions.xml
System.Linq.Parallel.xml
System.Linq.Queryable.xml
System.Memory.xml
System.Net.Http.xml
System.Net.NameResolution.xml
System.Net.NetworkInformation.xml
System.Net.Ping.xml
System.Net.Primitives.xml
System.Net.Requests.xml
System.Net.Security.xml
System.Net.Sockets.xml
System.Net.WebHeaderCollection.xml
System.Net.WebSockets.xml
System.Net.WebSockets.Client.xml
System.Numerics.Vectors.xml
System.ObjectModel.xml
System.Reflection.xml
System.Reflection.Extensions.xml
System.Reflection.Primitives.xml
System.Resources.Reader.xml
System.Resources.ResourceManager.xml
System.Resources.Writer.xml
System.Runtime.xml
System.Runtime.CompilerServices.Unsafe.xml
System.Runtime.CompilerServices.VisualC.xml
System.Runtime.Extensions.xml
System.Runtime.Handles.xml
System.Runtime.InteropServices.xml
System.Runtime.InteropServices.RuntimeInformation.xml
System.Runtime.Numerics.xml
System.Runtime.Serialization.Formatters.xml
System.Runtime.Serialization.Json.xml
System.Runtime.Serialization.Primitives.xml
System.Runtime.Serialization.Xml.xml
System.Security.Claims.xml
System.Security.Cryptography.Algorithms.xml
System.Security.Cryptography.Csp.xml
System.Security.Cryptography.Encoding.xml
System.Security.Cryptography.Primitives.xml
System.Security.Cryptography.X509Certificates.xml
System.Security.Principal.xml
System.Security.SecureString.xml
System.Text.Encoding.xml
System.Text.Encoding.Extensions.xml
System.Text.RegularExpressions.xml
System.Threading.xml
System.Threading.Overlapped.xml
System.Threading.Tasks.xml
System.Threading.Tasks.Parallel.xml
System.Threading.Thread.xml
System.Threading.ThreadPool.xml
System.Threading.Timer.xml
System.ValueTuple.xml
System.Windows.Interactivity.xml
System.Xml.ReaderWriter.xml
System.Xml.XDocument.xml
System.Xml.XmlDocument.xml
System.Xml.XmlSerializer.xml
System.Xml.XPath.xml
System.Xml.XPath.XDocument.xml
vccorlib140.xml
vcruntime140.xml
vcruntime140_threads.xml
vk_swiftshader.xml
vulkan-1.xml
YamlDotNet.xml
================================================
FILE: build/PlayniteSDK.nuspec
================================================
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>PlayniteSDK</id>
<version>{Version}</version>
<title>Playnite SDK</title>
<authors>Josef Nemec</authors>
<owners>JosefNemec</owners>
<license type="expression">MIT</license>
<projectUrl>https://github.com/JosefNemec/Playnite</projectUrl>
<icon>images\applogo.png</icon>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>SDK plugin library for Playnite video game library manager.</description>
<releaseNotes>https://playnite.link/docs/changelog.html</releaseNotes>
<copyright>Copyright © Josef Nemec 2018</copyright>
<tags>sdk gaming</tags>
<dependencies>
<group targetFramework=".NETFramework4.6.2" />
</dependencies>
<readme>docs\readme.md</readme>
</metadata>
<files>
<file src="{OutDir}\Playnite.SDK.dll" target="lib\net462\Playnite.SDK.dll" />
<file src="{OutDir}\Playnite.SDK.xml" target="lib\net462\Playnite.SDK.xml" />
<file src="..\source\Playnite.DesktopApp\Themes\Desktop\Default\Images\applogo.png" target="images\" />
<file src="..\source\PlayniteSDK\readme.md" target="docs\" />
</files>
</package>
================================================
FILE: build/VerifyLanguageFiles.ps1
================================================
#Requires -Version 7
$ErrorActionPreference = "Stop"
Add-Type -AssemblyName "PresentationFramework"
$locDir = "..\source\Playnite\Localization\"
$allOk = $true
foreach ($locFile in (Get-ChildItem $locDir -Filter "*.xaml"))
{
$stream = New-Object "System.IO.StreamReader" $locFile.FullName
try
{
$xaml = [System.Windows.Markup.XamlReader]::Load($stream.BaseStream)
Write-Host "$($locFile.Name)...OK" -ForegroundColor Green
}
catch
{
$allOk = $false
Write-Host "$($locFile.Name)...FAIL" -ForegroundColor Red
Write-Host $_.Exception.InnerException.Message -ForegroundColor Red
}
finally
{
$stream.Dispose()
}
}
if (-not $allOk)
{
throw "Some localization files failed verification."
}
================================================
FILE: build/applyEnglishProofing.ps1
================================================
#Requires -Version 7
$ErrorActionPreference = "Stop"
Add-Type -AssemblyName "PresentationFramework"
$locDir = Join-Path $pwd "..\source\Playnite\Localization\"
$proofFile = Join-Path $locDir "en_US.xaml"
$lngSourceFile = Join-Path $locDir "LocSource.xaml"
[xml]$proofXaml = Get-Content $proofFile
[xml]$lngSourceXaml = Get-Content $lngSourceFile
foreach ($node in $proofXaml.ResourceDictionary.ChildNodes)
{
if (!$node.Key)
{
continue
}
if (![string]::IsNullOrEmpty($node.InnerXml))
{
$lngSourceNode = $lngSourceXaml.ResourceDictionary.ChildNodes | Where-Object { $_.Key -eq $node.Key }
if ($lngSourceNode)
{
$importNode = $lngSourceXaml.ImportNode($node, $true)
$lngSourceXaml.ResourceDictionary.ReplaceChild($importNode, $lngSourceNode) | Out-Null
}
}
}
$settings = new-object System.Xml.XmlWriterSettings
$settings.Indent = $true;
$settings.IndentChars = " ";
$settings.Encoding = [System.Text.Encoding]::UTF8;
$settings.OmitXmlDeclaration = $true;
$writer = [System.Xml.XmlWriter]::Create($lngSourceFile, $settings);
[System.Xml.Linq.XDocument]::Parse($lngSourceXaml.OuterXml).WriteTo($writer);
$writer.Flush();
$writer.Dispose();
================================================
FILE: build/build.ps1
================================================
#Requires -Version 7
param(
# Build configuration
[ValidateSet("Release", "Debug")]
[string]$Configuration = "Release",
# Target platform
[ValidateSet("x86", "x64")]
[string]$Platform = "x86",
# Target directory for build files
[string]$OutputDir,
# Target directory for installer files
[string]$InstallerDir,
# Package build output into zip file
[switch]$Package = $false,
# Skip build process
[switch]$SkipBuild = $false,
# Temp directory for build process
[string]$TempDir = (Join-Path $env:TEMP "PlayniteBuild"),
[string]$LicensedDependenciesUrl,
[switch]$SdkNuget,
[string]$OnlineInstallerConfig
)
$ErrorActionPreference = "Stop"
if (!(Get-InstalledModule "powershell-yaml" -EA 0))
{
Install-Module powershell-yaml
}
Set-Location $PSScriptRoot
& .\common.ps1
if (!$OutputDir)
{
$OutputDir = Join-Path $PWD $Configuration
}
if (!$InstallerDir)
{
$InstallerDir = $PWD
}
function PackExtensionTemplate()
{
param(
[Parameter(Mandatory = $true)]
[string]$TemplateRootName,
[Parameter(Mandatory = $true)]
[string]$OutputDir
)
$templatesDir = Join-Path $OutputDir "Templates\Extensions\"
$templateOutDir = Join-Path $templatesDir $TemplateRootName
$tempFiles = Get-Content "..\source\Tools\Playnite.Toolbox\Templates\Extensions\$TemplateRootName\BuildInclude.txt" | Where { ![string]::IsNullOrEmpty($_) }
$targetZip = Join-Path $templatesDir "$TemplateRootName.zip"
foreach ($file in $tempFiles)
{
$target = Join-Path $templateOutDir $file
New-FolderFromFilePath $target
Copy-Item (Join-Path "..\source\Tools\Playnite.Toolbox\Templates\Extensions\$TemplateRootName" $file) $target
}
New-ZipFromDirectory $templateOutDir $targetZip
Remove-Item $templateOutDir -Recurse -Force
}
# -------------------------------------------
# Verify various non-build files
# -------------------------------------------
.\VerifyLanguageFiles.ps1
$platforms = Get-Content "..\source\Playnite\Emulation\Platforms.yaml" -Raw | ConvertFrom-Yaml
if (!($platforms.Count -gt 0))
{
throw "Platforms definition file is not valid."
}
Write-OperationLog "Platforms definitions are OK"
$regions = Get-Content "..\source\Playnite\Emulation\Regions.yaml" -Raw | ConvertFrom-Yaml
if (!($regions.Count -gt 0))
{
throw "Regions definition file is not valid."
}
Write-OperationLog "Regions definitions are OK"
Get-ChildItem "..\source\Playnite\Emulation\" -Filter "*.yaml" -Recurse | ForEach {
$emuDef = Get-Content $_.FullName -Raw | ConvertFrom-Yaml
if (!$emuDef.Id)
{
throw "$($_.FullName) is not valid emulator definition."
}
foreach ($profile in $emuDef.Profiles)
{
foreach ($platId in $profile.Platforms)
{
if (!($platforms | Where { $_.Id -eq $platId } ))
{
throw "Platform $platId not found, $($_.FullName)."
}
}
}
}
Write-OperationLog "Emulator definitions are OK"
# -------------------------------------------
# Compile application
# -------------------------------------------
if (!$SkipBuild)
{
if (Test-Path $OutputDir)
{
Remove-Item "$OutputDir\*" -Recurse -Force
}
if ($LicensedDependenciesUrl)
{
$depArchive = Join-Path $env:TEMP "deps.zip"
Invoke-WebRequest $LicensedDependenciesUrl -OutFile $depArchive
Expand-ZipToDirectory $depArchive (Resolve-Path "..").Path
}
if ($OnlineInstallerConfig)
{
Write-OperationLog "Updating online installer config..."
$locaConfigPath = "..\source\Tools\PlayniteInstaller\installer_mirrors.txt"
if ($OnlineInstallerConfig.StartsWith("http"))
{
$configFile = Join-Path $env:TEMP "installer_mirrors.txt"
Invoke-WebRequest $OnlineInstallerConfig -OutFile $locaConfigPath
}
else
{
Copy-Item $OnlineInstallerConfig $locaConfigPath -Force
}
}
$solutionDir = Join-Path $pwd "..\source"
Invoke-Nuget "restore ..\source\Playnite.sln"
$msbuildpath = Get-MsBuildPath
$arguments = "build.xml /p:SolutionDir=`"$solutionDir\\`" /p:OutputPath=`"$OutputDir`";Configuration=$configuration /property:Platform=$Platform /t:Build"
$compilerResult = StartAndWait $msbuildPath $arguments
if ($compilerResult -ne 0)
{
throw "Build failed."
}
# Copy extension templates
PackExtensionTemplate "CustomLibraryPlugin" $OutputDir
PackExtensionTemplate "CustomMetadataPlugin" $OutputDir
PackExtensionTemplate "GenericPlugin" $OutputDir
PackExtensionTemplate "PowerShellScript" $OutputDir
}
New-Folder $InstallerDir
# -------------------------------------------
# SDK nuget
# -------------------------------------------
if ($SdkNuget)
{
& .\buildSdkNuget.ps1 -SkipBuild -OutputPath $OutputDir | Out-Null
}
# -------------------------------------------
# Build zip package
# -------------------------------------------
if ($Package)
{
Write-OperationLog "Building zip package..."
$packageName = Join-Path $InstallerDir "Playnite.zip"
New-ZipFromDirectory $OutputDir $packageName
}
(Get-ChildItem (Join-Path $OutputDir "Playnite.dll")).VersionInfo.FileVersion | Write-Host -ForegroundColor Green
return $true
================================================
FILE: build/build.xml
================================================
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Target Name="BeforeBuild">
<RemoveDir Directories="$(OutputPath)" />
<MakeDir Directories="$(OutputPath)" />
</Target>
<Target Name="Build">
<MSBuild
Projects="../source/tools/Playnite.Toolbox/Playnite.Toolbox.csproj"
Targets="Build"
Properties="OutputPath=$(OutputPath); Configuration=$(Configuration); AllowedReferenceRelatedFileExtensions=none;" />
<MSBuild
Projects="../source/Playnite.DesktopApp/Playnite.DesktopApp.csproj"
Targets="Build"
Properties="OutputPath=$(OutputPath); Configuration=$(Configuration); AllowedReferenceRelatedFileExtensions=none;" />
<MSBuild
Projects="../source/Playnite.FullscreenApp/Playnite.FullscreenApp.csproj"
Targets="Build"
Properties="OutputPath=$(OutputPath); Configuration=$(Configuration); AllowedReferenceRelatedFileExtensions=none;" />
<MSBuild
Projects="../source/PlayniteSDK/Playnite.SDK.csproj"
Targets="Build"
Properties="OutputPath=$(OutputPath); Configuration=$(Configuration); AllowedReferenceRelatedFileExtensions=none; Platform=AnyCPU" />
<MSBuild
Projects="../source/Tools/PlayniteInstaller/PlayniteInstaller.csproj"
Targets="Build"
Properties="OutputPath=$(OutputPath); Configuration=$(Configuration); AllowedReferenceRelatedFileExtensions=none; Platform=AnyCPU" />
</Target>
</Project>
================================================
FILE: build/buildLocConstants.ps1
================================================
#Requires -Version 7
$ErrorActionPreference = "Stop"
& .\common.ps1
$locFile = Join-Path $pwd "..\source\Playnite\Localization\LocSource.xaml"
$locKeysSrc = Join-Path $pwd "..\source\Playnite\Localization\LocalizationKeys.cs"
[xml]$locFileXaml = Get-Content $locFile
@"
///
/// DO NOT MODIFY! Automatically generated via buildLocConstants.ps1 script.
///
namespace Playnite
{
public static class LOC
{
"@ | Out-File $locKeysSrc -Encoding utf8
foreach ($node in $locFileXaml.ResourceDictionary.ChildNodes)
{
if (!$node.Key)
{
continue
}
if (![string]::IsNullOrEmpty($node.InnerXml))
{
@"
/// <summary>
{0}
/// </summary>
"@ -f (($node.InnerXml -split "\n") -replace "^", "/// ") | Out-File $locKeysSrc -Encoding utf8 -Append
" public const string $($node.Key -replace `"^LOC`", `"`") = `"$($node.Key)`";" `
| Out-File $locKeysSrc -Encoding utf8 -Append
}
}
@"
}
}
"@ | Out-File $locKeysSrc -Encoding utf8 -Append
================================================
FILE: build/buildSdkNuget.ps1
================================================
#Requires -Version 7
param(
[ValidateSet("Release", "Debug")]
[string]$Configuration = "Release",
[string]$OutputPath = (Join-Path $PWD "$($Configuration)SDK"),
[switch]$SkipBuild = $false,
[string]$LocalPublish
)
$ErrorActionPreference = "Stop"
& .\common.ps1
# -------------------------------------------
# Compile SDK
# -------------------------------------------
if (!$SkipBuild)
{
New-EmptyFolder $OutputPath
$project = Join-Path $pwd "..\source\PlayniteSDK\Playnite.SDK.csproj"
$msbuildPath = Get-MsBuildPath
$arguments = "`"$project`" /p:OutputPath=`"$outputPath`";Configuration=$configuration /t:Build"
$compilerResult = StartAndWait $msbuildPath $arguments
if ($compilerResult -ne 0)
{
throw "Build failed."
}
}
# -------------------------------------------
# Create NUGET
# -------------------------------------------
$version = (Get-ChildItem (Join-Path $OutputPath "Playnite.SDK.dll")).VersionInfo.ProductVersion
$version = $version -replace "\.0$", ""
$spec = Get-Content "PlayniteSDK.nuspec"
$spec = $spec -replace "{Version}", $version
$spec = $spec -replace "{OutDir}", $OutputPath
$specFile = "nuget.nuspec"
try
{
$spec | Out-File $specFile
$packageRes = Invoke-Nuget "pack $specFile -OutputDirectory $OutputPath"
if ($packageRes -ne 0)
{
throw "Nuget packing failed."
}
}
finally
{
Remove-Item $specFile -EA 0
}
if ($LocalPublish)
{
Invoke-Nuget "init `"$pwd`" `"$LocalPublish`""
}
return $true
================================================
FILE: build/common.ps1
================================================
#Requires -Version 7
$global:NugetUrl = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
function global:StartAndWait()
{
param(
[string]$Path,
[string]$Arguments,
[string]$WorkingDir
)
if ($WorkingDir)
{
$proc = Start-Process $Path $Arguments -PassThru -NoNewWindow -WorkingDirectory $WorkingDir
}
else
{
$proc = Start-Process $Path $Arguments -PassThru -NoNewWindow
}
$handle = $proc.Handle # cache proc.Handle http://stackoverflow.com/a/23797762/1479211
$proc.WaitForExit()
return $proc.ExitCode
}
function global:Invoke-Nuget()
{
param(
[string]$NugetArgs
)
$nugetCommand = Get-Command -Name "nuget" -Type Application -ErrorAction Ignore
if (-not $nugetCommand)
{
if (-not (Test-Path "nuget.exe"))
{
Invoke-WebRequest -Uri $NugetUrl -OutFile "nuget.exe"
}
}
if ($nugetCommand)
{
return StartAndWait "nuget" $NugetArgs
}
else
{
return StartAndWait ".\nuget.exe" $NugetArgs
}
}
function global:Get-MsBuildPath()
{
$VSWHERE_CMD = "vswhere"
if (-not (Get-Command -Name $VSWHERE_CMD -Type Application -ErrorAction Ignore))
{
$VSWHERE_CMD = "..\source\packages\vswhere.*\tools\vswhere.exe"
if (-not (Get-Command -Name $VSWHERE_CMD -Type Application -ErrorAction Ignore))
{
Invoke-Nuget "install vswhere -SolutionDirectory `"$solutionDir`"" | Out-Null
}
}
$path = & $VSWHERE_CMD -latest -requires Microsoft.Component.MSBuild -find "MSBuild\**\Bin\MSBuild.exe" -latest | Select-Object -First 1
if ($path -and (Test-Path $path))
{
return $path
}
throw "MS Build not found."
}
function global:New-Folder()
{
param(
[Parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
[string]$Path
)
if (Test-Path $Path)
{
return
}
mkdir $Path | Out-Null
}
function global:New-FolderFromFilePath()
{
param(
[Parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
[string]$FilePath
)
$dirPath = Split-Path $FilePath
if (Test-Path $dirPath)
{
return
}
mkdir $dirPath | Out-Null
}
function global:New-EmptyFolder()
{
param(
[Parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
[string]$Path
)
if (Test-Path $Path)
{
Remove-Item $Path -Recurse -Force
}
mkdir $Path | Out-Null
}
function global:New-ZipFromDirectory()
{
param(
[string]$directory,
[string]$resultZipPath,
[bool]$includeBaseDirectory = $false
)
if (Test-path $resultZipPath)
{
Remove-Item $resultZipPath
}
Add-Type -assembly "System.IO.Compression.Filesystem" | Out-Null
[IO.Compression.ZipFile]::CreateFromDirectory($directory, $resultZipPath, "Optimal", $includeBaseDirectory)
}
function global:Expand-ZipToDirectory()
{
param(
[string]$zipPath,
[string]$directory
)
Add-Type -assembly "System.IO.Compression.Filesystem" | Out-Null
[IO.Compression.ZipFile]::ExtractToDirectory($zipPath, $directory, $true)
}
function global:Write-OperationLog()
{
param(
[Parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
[string]$Message
)
Write-Host $Message -ForegroundColor Green
}
function global:Write-ErrorLog()
{
param(
[Parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
[string]$Message
)
Write-Host $Message -ForegroundColor Red -BackgroundColor Black
}
function global:Write-WarningLog()
{
param(
[Parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
[string]$Message
)
Write-Host $Message -ForegroundColor Yellow
}
function global:Write-InfoLog()
{
param(
[Parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
[string]$Message
)
Write-Host $Message -ForegroundColor White
}
function global:Write-DebugLog()
{
param(
[Parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
[string]$Message
)
Write-Host $Message -ForegroundColor DarkGray
}
================================================
FILE: build/generateRetroArchProfile.ps1
================================================
param(
[Parameter(Mandatory=$true)]
[string]$RetroArchDir,
[Parameter(Mandatory=$true)]
[string]$PlayniteSourceDirectory
)
$ErrorActionPreference = "Stop"
if (!(Get-InstalledModule "powershell-yaml" -EA 0))
{
Install-Module powershell-yaml
}
function Get-IsYamlValid
{
param (
[Parameter(Mandatory=$true)]
[string] $yamlContent
)
try {
$yamlContent | ConvertFrom-Yaml | Out-Null
return $true
} catch {
return $false
}
}
function ParseInfoFile()
{
param(
[Parameter(Mandatory=$true)]
[string]$Path
)
$properties = @{}
foreach ($line in (Get-Content $Path))
{
if ($line.StartsWith("#"))
{
continue
}
if ($line -match "^(.*)\s*=\s*`"(.*)`"$")
{
$property = $Matches[1].Trim()
if (!$properties.ContainsKey($property))
{
$properties.Add($property, $Matches[2].Trim())
}
}
}
return $properties
}
$emulationDirPath = [System.IO.Path]::Combine($PlayniteSourceDirectory, "Playnite", "Emulation")
$platformsDefinitionPath = [System.IO.Path]::Combine($emulationDirPath, "Platforms.yaml")
$retroArchEmuDefinitionPath = [System.IO.Path]::Combine($emulationDirPath, "Emulators", "RetroArch", "emulator.yaml")
if (!(Test-Path $platformsDefinitionPath -Type Leaf))
{
Write-Host "Playnite platforms definition file not found in $platformsDefinitionPath" -ForegroundColor Yellow
return
}
$ignoreList = @(
"00_example_libretro.info",
"2048_libretro.info",
"3dengine_libretro.info",
"advanced_tests_libretro.info",
"bk_libretro.info",
"boom3_libretro.info",
"boom3_xp_libretro.info",
"cannonball_libretro.info",
"chaigame_libretro.info",
"chailove_libretro.info",
"craft_libretro.info",
"cruzes_libretro.info",
"dhewm3_libretro.info",
"dinothawr_libretro.info",
"ecwolf_libretro.info",
"ffmpeg_libretro.info",
"freechaf_libretro.info",
"freej2me_libretro.info",
"gme_libretro.info",
"hbmame_libretro.info",
"imageviewer_libretro.info",
"lutro_libretro.info",
"mojozork_libretro.info",
"mpv_libretro.info",
"mrboom_libretro.info",
"mu_libretro.info",
"nxengine_libretro.info",
"oberon_libretro.info",
"openlara_libretro.info",
"opentyrian_libretro.info",
"pascal_pong_libretro.info",
"pocketcdg_libretro.info",
"pokemini_libretro.info",
"prboom_libretro.info",
"quasi88_libretro.info",
"redbook_libretro.info",
"reminiscence_libretro.info",
"remotejoy_libretro.info",
"rvvm_libretro.info",
"scummvm_libretro.info",
"simcp_libretro.info",
"squirreljme_libretro.info",
"stonesoup_libretro.info",
"test_libretro.info",
"test_netplay_libretro.info",
"testaudio_callback_libretro.info",
"testaudio_no_callback_libretro.info",
"testaudio_playback_wav_libretro.info",
"testgl_compute_shaders_libretro.info",
"testgl_ff_libretro.info",
"testgl_libretro.info",
"testinput_buttontest_libretro.info",
"testretroluxury_libretro.info",
"testsw_libretro.info",
"testsw_vram_libretro.info",
"testvulkan_async_compute_libretro.info",
"testvulkan_libretro.info",
"thepowdertoy_libretro.info",
"tic80_libretro.info",
"tyrquake_libretro.info",
"ume2015_libretro.info",
"uw8_libretro.info",
"vaporspec_libretro.info",
"vitaquake2-rogue_libretro.info",
"vitaquake2-xatrix_libretro.info",
"vitaquake2-zaero_libretro.info",
"vitaquake2_libretro.info",
"vitaquake3_libretro.info",
"vitavoyager_libretro.info",
"wasm4_libretro.info",
"x1_libretro.info",
"xrick_libretro.info"
)
$retroarchArcadeSystems = @(
"16-bit (Various)",
"16-bit + 32X (Various)",
"Arcade (various)",
"CP System I",
"CP System II",
"CP System III",
"Multi (various)",
"Neo Geo"
)
$retroarchMiscSystems = @(
"2003 Game Engine",
"4",
"CHIP-8",
"Handheld Electronic", #Handheld Electronic (GW)
"LowRes NX", #LowRes NX
"Magnavox Odyssey2", #133 Philips Videopac G7000
"Mega Duck", # Mega Duck
"Moonlight", # Moonlight,
"PICO8", # PICO-8
"Pong Game Clone", # Gong,
"RPG Maker 2000",
"SEGA Visual Memory Unit", #VeMUlator / Sega VMU
"Uzebox" # Uzebox (Uzem)
)
$raCoreNameToPlatformIdsTranslate = @{
"Gearsystem" = @("sega_mastersystem", "sega_gamegear", "sega_sg1000", "coleco_vision");
"Genesis Plus GX" = @("sega_mastersystem", "sega_gamegear", "sega_genesis", "sega_cd");
"Genesis Plus GX Wide" = @("sega_mastersystem", "sega_gamegear", "sega_genesis", "sega_cd");
"nSide (Super Famicom Accuracy)" = @("nintendo_super_nes", "nintendo_gameboy", "nintendo_gameboycolor");
"PicoDrive" = @("sega_mastersystem", "sega_genesis", "sega_cd", "sega_32x");
"SMS Plus GX" = @("sega_mastersystem", "sega_gamegear", "sega_sg1000", "coleco_vision");
}
$raSystemIdToPlatformIdsTranslate = @{
"msx" = @("microsoft_msx", "microsoft_msx2");
"neo_geo_pocket" = @("snk_neogeopocket", "snk_neogeopocket_color");
}
$raSystemNameToPlatformIdTranslate = @{
"3DO" = "3do";
"3DS" = "nintendo_3ds";
"Amiga" = "commodore_amiga";
"Atari 2600" = "atari_2600";
"Atari 5200" = "atari_5200";
"Atari 7800" = "atari_7800";
"Atari ST" = "atari_st";
"C128" = "commodore_64";
"C64" = "commodore_64";
"C64 SuperCPU" = "commodore_64";
"CBM-5x0" = "commodore_cbm5x0";
"CBM-II" = "commodore_cbm2";
"CD" = "nec_turbografx_cd";
"ColecoVision" = "coleco_vision";
"Color" = "bandai_wonderswan_color";
"Commodore Amiga" = "commodore_amiga";
"CPC" = "amstrad_cpc";
"DOS" = "pc_dos";
"DS" = "nintendo_ds";
"Falcon" = "atari_falcon030";
"Game Boy" = "nintendo_gameboy";
"Game Boy Advance" = "nintendo_gameboyadvance";
"Game Boy Color" = "nintendo_gameboycolor";
"GameCube" = "nintendo_gamecube";
"GG" = "sega_gamegear";
"Intellivision" = "mattel_intellivision";
"Jaguar" = "atari_jaguar";
"Lynx" = "atari_lynx";
"Nintendo 64" = "nintendo_64";
"Nintendo DS" = "nintendo_ds";
"Nintendo Entertainment System" = "nintendo_nes";
"PC" = "pc_dos";
"PC Engine" = "nec_turbografx_16";
"PC Engine SuperGrafx" = "nec_supergrafx";
"PC-98" = "nec_pc98";
"PC-FX" = "nec_pcfx";
"PCE-CD" = "nec_turbografx_cd";
"PET" = "commodore_pet";
"PlayStation" = "sony_playstation";
"PLUS" = "commodore_plus4";
"PSP" = "sony_psp";
"Saturn" = "sega_saturn";
"Sega Dreamcast" = "sega_dreamcast";
"Sega Genesis" = "sega_genesis";
"Sega Master System" = "sega_mastersystem";
"Sharp X68000" = "sharp_x68000";
"SNK Neo Geo CD" = "snk_neogeo_cd";
"Sony PlayStation 2" = "sony_playstation2";
"STE" = "atari_st";
"Super Nintendo Entertainment System" = "nintendo_super_nes";
"SuperGrafx" = "nec_supergrafx";
"Supervision" = "watara_supervision";
"SVI" = "microsoft_msx";
"Thomson MO" = "thomson_mo5";
"TO" = "thomson_to7";
"TT" = "atari_st"; # The Atari TT030 is a member of the Atari ST family
"Vectrex" = "vectrex";
"VIC-20" = "commodore_vci20";
"Virtual Boy" = "nintendo_virtualboy";
"Wii" = "nintendo_wii";
"WonderSwan" = "bandai_wonderswan";
"Xbox" = "xbox";
"ZX Spectrum (various)" = "sinclair_zxspectrum";
"ZX81" = "sinclair_zx81";
}
$emuDefinitionTemplate = "Id: retroarch
Name: RetroArch
Website: 'http://www.retroarch.com/'
Profiles:
{0}"
$profileTemplate = ' - Name: {0}
StartupArguments: ''-L ".\cores\{1}.dll" "{{ImagePath}}"''
Platforms: [{2}]
ImageExtensions: [{3}]
ProfileFiles: [''cores\{4}.dll'']
StartupExecutable: ^retroarch\.exe$'
$existingProfileReaddTemplate = ' - Name: {0}
StartupArguments: ''{1}''
Platforms: [{2}]
ImageExtensions: [{3}]
ProfileFiles: [''{4}'']
StartupExecutable: ^retroarch\.exe$'
$existingEmuDefinition = Get-Content $retroArchEmuDefinitionPath -Raw | ConvertFrom-Yaml
$usedProfileNames = @()
$existingProfiles = @{}
foreach ($existingProfile in $existingEmuDefinition.Profiles) {
$existingProfiles[$existingProfile.ProfileFiles[0]] = $existingProfile
$usedProfileNames += $existingProfile.Name
}
$foundCoreNames = @()
$foundPlatformIds = @()
$profiles = @()
$infoPath = Join-Path $RetroArchDir "info"
$infoFiles = Get-ChildItem $infoPath -Filter "*.info"
foreach ($infoFile in $infoFiles)
{
if ($ignoreList.Contains($infoFile.Name))
{
continue
}
$coreInfo = ParseInfoFile $infoFile.FullName
$coreFile = "cores\{0}.dll" -f $infoFile.BaseName
$platformIds = @()
if ($existingProfiles.ContainsKey($coreFile))
{
$coreName = $existingProfiles[$coreFile].Name
$platformIds = $existingProfiles[$coreFile].Platforms
}
else
{
if ($usedProfileNames.Contains($coreInfo.corename))
{
$coreName = "{0} - {1}" -f $coreInfo.corename, $coreInfo.display_name
}
else
{
$coreName = $coreInfo.corename
}
}
if (!($coreInfo.ContainsKey("corename")))
{
Write-Host "$($infoFile.Name) does not contain the core name" -ForegroundColor Yellow # Some cores like anarch_libretro.info don't contain a core name
continue
}
$coreInfoCoreName = $coreInfo.corename
if ($raCoreNameToPlatformIdsTranslate.ContainsKey($coreInfoCoreName))
{
$platformIds = $raCoreNameToPlatformIdsTranslate[$coreInfoCoreName]
}
elseif ($null -ne $coreInfo.systemid -and $raSystemIdToPlatformIdsTranslate.ContainsKey($coreInfo.systemid.Trim()))
{
$platformIds = $raSystemIdToPlatformIdsTranslate[$coreInfo.systemid.Trim()]
}
else
{
if (!($coreInfo.ContainsKey("systemname")))
{
Write-Host "$($infoFile.Name) does not contain systemname" -ForegroundColor Yellow # galaksija_libretro.info
continue
}
$coreInfo.systemname.Split("/", [System.StringSplitOptions]::RemoveEmptyEntries) | ForEach-Object {
$system = $_.Trim()
if (($retroarchArcadeSystems -contains $system) -or ($retroarchMiscSystems -contains $system))
{
Continue
}
if ($raSystemNameToPlatformIdTranslate.ContainsKey($system))
{
$platformId = $raSystemNameToPlatformIdTranslate[$system]
if ($platformIds -notcontains $platformId)
{
$platformIds += $platformId
}
}
else
{
Write-Host "System to platform translate not found. System: $system, CoreName: $($coreInfo.corename), DisplayName: $($coreInfo.display_name)" -ForegroundColor Yellow
}
}
}
if ($null -eq $platformIds -or $platformIds.Count -eq 0)
{
Write-Host "PlatformIds not found. System: $system, CoreName: $($coreInfo.corename), DisplayName: $($coreInfo.display_name)" -ForegroundColor Yellow
continue
}
if ($coreInfo.supported_extensions)
{
$extensions = @()
$coreInfo.supported_extensions.Split("|", [System.StringSplitOptions]::RemoveEmptyEntries) | ForEach-Object {
$extensions += $_
}
if ($extensions -notcontains "zip")
{
$extensions += "zip"
}
if ($extensions -notcontains "7z")
{
$extensions += "7z"
}
$extensions = $extensions | Sort-Object
$extensionsString = [System.String]::Join(", ", $extensions)
}
else
{
Write-Host "Profile did not have extensions. System: $system, CoreName: $($coreInfo.corename), DisplayName: $($coreInfo.display_name)" -ForegroundColor Yellow
continue
}
foreach ($platformId in $platformIds) {
if ($foundPlatformIds -notcontains $platformId)
{
$foundPlatformIds += $platformId
}
}
$platformIds = $platformIds | Sort-Object
$extensions = $extensions | Sort-Object
$platformIdsString = [System.String]::Join(", ", $platformIds)
$profileString = $profileTemplate -f $coreName, $infoFile.BaseName, $platformIdsString, $extensionsString, $infoFile.BaseName
$profiles += $profileString
$foundCoreNames += $coreName
$usedProfileNames += $coreName
}
# Previous profiles need to be kept or existing emulator configuration will break
# Here emulators not generated will be added back
foreach ($existingProfile in $existingEmuDefinition.Profiles) {
if ($foundCoreNames -notcontains $existingProfile.Name)
{
foreach ($platformId in $existingProfile.Platforms) {
if ($foundPlatformIds -notcontains $platformId)
{
$foundPlatformIds += $platformId
}
}
$platformIds = [System.String]::Join(", ", ($existingProfile.Platforms | Sort-Object))
$extensionsString = [System.String]::Join(", ", ($existingProfile.ImageExtensions | Sort-Object))
$profileFilesString = [System.String]::Join(", ", ($existingProfile.ProfileFiles | Sort-Object))
$profileString = $existingProfileReaddTemplate -f $existingProfile.Name, $existingProfile.StartupArguments, $platformIds, $extensionsString, $profileFilesString
$profiles += $profileString
Write-Host "Existing profile $($existingProfile.Name) not found in newly generated definition and was added back from previous definition" -ForegroundColor Yellow
}
}
# Join generated profiles and validated created profile yaml content
$profiles = $profiles | Sort-Object
$profilesString = [System.String]::Join("`n`n", $profiles)
$emuDefinitionContent = $emuDefinitionTemplate -f $profilesString
if ((Get-IsYamlValid $emuDefinitionContent) -eq $false)
{
Write-Host "Newly generated profile definition file is not valid!" -ForegroundColor Red
Set-Clipboard $emuDefinitionContent
return
}
# Add RetroArch to emulators list in Playnite platforms definitions
$platformDefinitionTemplate = '- Name: {0}
{1}'
$newPlatformsDefinitions = @()
$existingPlatformsDefinition = Get-Content $platformsDefinitionPath -Raw | ConvertFrom-Yaml
foreach ($platform in $existingPlatformsDefinition) {
$platformData = @()
$platformData += " Id: {0}" -f $platform.Id
if ($platform.IgdbId)
{
$platformData += "IgdbId: {0}" -f $platform.IgdbId
}
if ($platform.Databases)
{
$platformData += "Databases: [{0}]" -f [System.String]::Join(", ", ($platform.Databases | Sort-Object))
}
$isSupportedByRetroArch = $foundPlatformIds -contains $platform.Id
if ($platform.Emulators)
{
if ($isSupportedByRetroArch -and ($platform.Emulators -notcontains "retroarch"))
{
$platform.Emulators += "retroarch"
$platform.Emulators = $platform.Emulators | Sort-Object
Write-Host "Added retroarch emulator to `"$($platform.Name)`" platform" -ForegroundColor Blue
}
$platformData += "Emulators: [{0}]" -f [System.String]::Join(", ", ($platform.Emulators | Sort-Object))
}
elseif ($isSupportedByRetroArch)
{
$platformData += "Emulators: [{0}]" -f "retroarch"
}
$platformDataString = $platformDefinitionTemplate -f $platform.Name, [System.String]::Join("`n ", $platformData)
$newPlatformsDefinitions += $platformDataString
}
$newPlatformsDefinitionsContent = [System.String]::Join("`n `n", $newPlatformsDefinitions)
# Validate created platforms definition yaml content
if ((Get-IsYamlValid $newPlatformsDefinitionsContent) -eq $false)
{
Write-Host "Newly generated platforms definition file is not valid!" -ForegroundColor Red
Set-Clipboard $newPlatformsDefinitionsContent
return
}
# Save generated yaml files. New lines are replaced to maintain CRLF endings
[System.IO.File]::WriteAllLines($retroArchEmuDefinitionPath, $emuDefinitionContent.Replace("`n","`r`n"), [System.Text.Encoding]::UTF8)
[System.IO.File]::WriteAllLines($platformsDefinitionPath, $newPlatformsDefinitionsContent.Replace("`n","`r`n"), [System.Text.Encoding]::UTF8)
Write-Host "RetroArch emulator and Playnite platforms definitions updated and saved successfully!" -ForegroundColor Green
================================================
FILE: build/updateLocalizations.ps1
================================================
#Requires -Version 7
param(
[string]$AccessToken
)
$ErrorActionPreference = "Stop"
$locDir = Join-Path $pwd "..\source\Playnite\Localization"
$urlRoot = "https://crowdin.com/api/v2"
$playnitePrjId = 345875
$requestHeaders = @{
"Authorization" = "Bearer $AccessToken"
}
$locProgressData = New-Object "System.Collections.Specialized.OrderedDictionary"
$locProgress = Invoke-RestMethod -Method Get -Headers $requestHeaders -Uri "$urlRoot/projects/$playnitePrjId/files/30/languages/progress?limit=100" ` -ContentType "application/json"
foreach ($lng in $locProgress.data)
{
$locProgressData.Add($lng.data.languageId, $lng.data.translationProgress);
$locDownloadData = Invoke-RestMethod -Method Post -Headers $requestHeaders -Uri "$urlRoot/projects/$playnitePrjId/translations/builds/files/30" `
-Body "{`"targetLanguageId`":`"$($lng.data.languageId)`"}" -ContentType "application/json"
$tempFile = Join-Path $locDir "temp.xaml"
Remove-Item $tempFile -EA 0
$locDownload = Invoke-WebRequest -Uri $locDownloadData.data.url -OutFile $tempFile -PassThru
$locDownload.Headers["Content-Disposition"][0] -match '"(.+)"' | Out-Null
$fileName = $Matches[1]
Move-Item $tempFile (Join-Path $locDir $fileName) -Force
}
$locProgressData | ConvertTo-Json | Out-File (Join-Path $locDir "locstatus.json")
.\VerifyLanguageFiles.ps1
================================================
FILE: crowdin.yml
================================================
files:
- source: LocSource.xaml
translation: /%original_path%/%locale_with_underscore%.xaml
================================================
FILE: source/.editorconfig
================================================
[*.cs]
# IDE0058: Expression value is never used
dotnet_diagnostic.IDE0058.severity = none
# IDE0036: Order modifiers
dotnet_diagnostic.IDE0036.severity = none
# IDE0025: Use expression body for properties
dotnet_diagnostic.IDE0025.severity = none
================================================
FILE: source/Playnite/API/AddonsAPI.cs
================================================
using Playnite.Plugins;
using Playnite.SDK;
using Playnite.SDK.Plugins;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Playnite.API
{
public class AddonsAPI : IAddons
{
private readonly ExtensionFactory extensions;
private readonly PlayniteSettings settings;
public List<string> DisabledAddons => settings.DisabledPlugins.ToList();
public List<string> Addons => ExtensionFactory.GetInstalledManifests().Select(a => a.Id).ToList();
public List<Plugin> Plugins => extensions.Plugins.Select(a => a.Value.Plugin).ToList();
public AddonsAPI(ExtensionFactory extensions, PlayniteSettings settings)
{
this.extensions = extensions;
this.settings = settings;
}
}
}
================================================
FILE: source/Playnite/API/DatabaseAPI.cs
================================================
using LiteDB;
using Playnite.Database;
using Playnite.SDK;
using Playnite.SDK.Models;
using Playnite.SDK.Plugins;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Playnite.API
{
public class DatabaseAPI : IGameDatabaseAPI
{
private GameDatabase database;
#pragma warning disable CS0067
public event EventHandler DatabaseOpened;
#pragma warning restore CS0067
public IItemCollection<Game> Games => database.Games;
public IItemCollection<Platform> Platforms => database.Platforms;
public IItemCollection<Emulator> Emulators => database.Emulators;
public IItemCollection<Genre> Genres => database.Genres;
public IItemCollection<Company> Companies => database.Companies;
public IItemCollection<Tag> Tags => database.Tags;
public IItemCollection<Category> Categories => database.Categories;
public IItemCollection<Series> Series => database.Series;
public IItemCollection<AgeRating> AgeRatings => database.AgeRatings;
public IItemCollection<Region> Regions => database.Regions;
public IItemCollection<GameSource> Sources => database.Sources;
public IItemCollection<GameFeature> Features => database.Features;
public IItemCollection<GameScannerConfig> GameScanners => database.GameScanners;
public IItemCollection<CompletionStatus> CompletionStatuses => database.CompletionStatuses;
public IItemCollection<ImportExclusionItem> ImportExclusions => database.ImportExclusions;
public IItemCollection<FilterPreset> FilterPresets => database.FilterPresets;
public string DatabasePath
{
get => database?.DatabasePath;
}
public bool IsOpen
{
get => database?.IsOpen == true;
}
public DatabaseAPI(GameDatabase database)
{
this.database = database;
}
public string AddFile(string path, Guid parentId)
{
if (!File.Exists(path))
{
throw new FileNotFoundException("Cannot add file to database, file not found.");
}
return database.AddFile(path, parentId, false, CancellationToken.None);
}
public void SaveFile(string id, string path)
{
database.CopyFile(id, path);
}
public void RemoveFile(string id)
{
database.RemoveFile(id);
}
public IDisposable BufferedUpdate()
{
return database.BufferedUpdate();
}
public string GetFileStoragePath(Guid parentId)
{
return database.GetFileStoragePath(parentId);
}
public string GetFullFilePath(string databasePath)
{
return database.GetFullFilePath(databasePath);
}
public Game ImportGame(GameMetadata game)
{
return database.ImportGame(game);
}
public Game ImportGame(GameMetadata game, LibraryPlugin sourcePlugin)
{
return database.ImportGame(game, sourcePlugin.Id);
}
public void BeginBufferUpdate()
{
database.BeginBufferUpdate();
}
public void EndBufferUpdate()
{
database.EndBufferUpdate();
}
public bool GetGameMatchesFilter(Game game, FilterPresetSettings filterSettings)
{
return database.GetGameMatchesFilter(game, filterSettings, false);
}
public IEnumerable<Game> GetFilteredGames(FilterPresetSettings filterSettings)
{
return database.GetFilteredGames(filterSettings, false);
}
public bool GetGameMatchesFilter(Game game, FilterPresetSettings filterSettings, bool useFuzzyNameMatch)
{
return database.GetGameMatchesFilter(game, filterSettings, useFuzzyNameMatch);
}
public IEnumerable<Game> GetFilteredGames(FilterPresetSettings filterSettings, bool useFuzzyNameMatch)
{
return database.GetFilteredGames(filterSettings, useFuzzyNameMatch);
}
}
}
================================================
FILE: source/Playnite/API/DesignData/DesignNotificationsAPI.cs
================================================
using Playnite.Commands;
using Playnite.SDK;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Playnite.API.DesignData
{
public class DesignNotificationsAPI : ObservableObject, INotificationsAPI
{
public RelayCommand<object> RemoveAllCommands
{
get => new RelayCommand<object>((a) =>
{
RemoveAll();
});
}
public ObservableCollection<NotificationMessage> Messages { get; set; }
public int Count { get; }
public DesignNotificationsAPI()
{
Count = 3;
Messages = new ObservableCollection<NotificationMessage>
{
new NotificationMessage("design1", "Design notification message 1", NotificationType.Error),
new NotificationMessage("design2", "Design message 2", NotificationType.Info),
new NotificationMessage("design3", "Design notification message 3, long message that does to multiple lies. Long message that does to multiple lies.", NotificationType.Error)
};
}
public void Add(NotificationMessage message)
{
throw new NotImplementedException();
}
public void Add(string id, string text, NotificationType type)
{
throw new NotImplementedException();
}
public void Remove(string id)
{
throw new NotImplementedException();
}
public void RemoveAll()
{
Messages.Clear();
}
}
}
================================================
FILE: source/Playnite/API/DesignData/DesignPlayniteAPI.cs
================================================
using Playnite.SDK;
using Playnite.SDK.Models;
using Playnite.SDK.Plugins;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Playnite.SDK.Events;
namespace Playnite.API.DesignData
{
public class DesignPlayniteAPI : IPlayniteAPI
{
public IMainViewAPI MainView => throw new NotImplementedException();
public IGameDatabaseAPI Database => throw new NotImplementedException();
public IDialogsFactory Dialogs => throw new NotImplementedException();
public IPlaynitePathsAPI Paths => throw new NotImplementedException();
public INotificationsAPI Notifications { get; } = new DesignNotificationsAPI();
public IPlayniteInfoAPI ApplicationInfo => throw new NotImplementedException();
public IWebViewFactory WebViews => throw new NotImplementedException();
public IResourceProvider Resources => throw new NotImplementedException();
public IUriHandlerAPI UriHandler => throw new NotImplementedException();
public IPlayniteSettingsAPI ApplicationSettings => throw new NotImplementedException();
public IAddons Addons => throw new NotImplementedException();
public IEmulationAPI Emulation => throw new NotImplementedException();
public void AddCustomElementSupport(Plugin source, AddCustomElementSupportArgs args)
{
throw new NotImplementedException();
}
public ILogger CreateLogger(string name)
{
throw new NotImplementedException();
}
public ILogger CreateLogger()
{
throw new NotImplementedException();
}
public string ExpandGameVariables(Game game, string inputString)
{
throw new NotImplementedException();
}
public GameAction ExpandGameVariables(Game game, GameAction action)
{
throw new NotImplementedException();
}
public void StartGame(Guid gameId)
{
throw new NotImplementedException();
}
public void InstallGame(Guid gameId)
{
throw new NotImplementedException();
}
public void UninstallGame(Guid gameId)
{
throw new NotImplementedException();
}
public void AddSettingsSupport(Plugin source, AddSettingsSupportArgs args)
{
throw new NotImplementedException();
}
public void AddConvertersSupport(Plugin source, AddConvertersSupportArgs args)
{
throw new NotImplementedException();
}
public List<GamepadController> GetConnectedControllers()
{
throw new NotImplementedException();
}
public string ExpandGameVariables(Game game, string inputString, string emulatorDir)
{
throw new NotImplementedException();
}
}
}
================================================
FILE: source/Playnite/API/NotificationsAPI.cs
================================================
using Playnite.Commands;
using Playnite.SDK;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Playnite.API
{
public class NotificationsAPI : ObservableObject, INotificationsAPI
{
public class MessageEventArgs : EventArgs
{
public NotificationMessage Message { get; }
public MessageEventArgs(NotificationMessage message)
{
Message = message;
}
}
private readonly SynchronizationContext context;
public event EventHandler<MessageEventArgs> ActivationRequested;
public event EventHandler<MessageEventArgs> CloseRequested;
public ObservableCollection<NotificationMessage> Messages
{
get;
}
public int Count
{
get => Messages.Count;
}
public NotificationsAPI()
{
context = SynchronizationContext.Current;
Messages = new ObservableCollection<NotificationMessage>();
}
private void Message_Activated(object sender, EventArgs e)
{
ActivationRequested(this, new MessageEventArgs(sender as NotificationMessage));
}
private void Message_Closed(object sender, EventArgs e)
{
CloseRequested(this, new MessageEventArgs(sender as NotificationMessage));
}
public void Add(NotificationMessage message)
{
context.Send((c =>
{
if (!Messages.Any(a => a.Id == message.Id))
{
message.Activated += Message_Activated;
message.Closed += Message_Closed;
Messages.Add(message);
OnPropertyChanged(nameof(Count));
}
}), null);
}
public void Add(string id, string text, NotificationType type)
{
context.Send((c =>
{
if (!Messages.Any(a => a.Id == id))
{
Add(new NotificationMessage(id, text, type));
}
}), null);
}
public void Remove(string id)
{
context.Send((c =>
{
var message = Messages.FirstOrDefault(a => a.Id == id);
if (message != null)
{
message.Activated -= Message_Activated;
message.Closed -= Message_Closed;
Messages.Remove(message);
OnPropertyChanged(nameof(Count));
}
}), null);
}
public void RemoveAll()
{
context.Send((c =>
{
foreach (var message in Messages)
{
message.Activated -= Message_Activated;
message.Closed -= Message_Closed;
}
Messages.Clear();
OnPropertyChanged(nameof(Count));
}), null);
}
}
}
================================================
FILE: source/Playnite/API/PlayniteAPI.cs
================================================
using Newtonsoft.Json;
using Playnite.SDK;
using Playnite.SDK.Models;
using Playnite.SDK.Plugins;
using Playnite.Settings;
using Playnite.Common;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Playnite.Plugins;
using System.Threading;
using Playnite.Database;
using Playnite.Input;
using Playnite.SDK.Events;
using static Microsoft.Scripting.Hosting.Shell.ConsoleHostOptions;
namespace Playnite.API
{
public interface IPlayniteAPIRoot
{
string ExpandGameVariables(Game game, string inputString);
GameAction ExpandGameVariables(Game game, GameAction action);
string ExpandGameVariables(Game game, string inputString, string emulatorDir);
void StartGame(Guid gameId);
void InstallGame(Guid gameId);
void UninstallGame(Guid gameId);
void AddCustomElementSupport(Plugin source, AddCustomElementSupportArgs args);
void AddSettingsSupport(Plugin source, AddSettingsSupportArgs args);
void AddConvertersSupport(Plugin source, AddConvertersSupportArgs args);
List<GamepadController> GetConnectedControllers();
}
public class PlayniteApiRoot : IPlayniteAPIRoot
{
private static readonly ILogger logger = LogManager.GetLogger();
private readonly GamesEditor gameEditor;
private readonly ExtensionFactory extensions;
private readonly GameDatabase database;
private readonly ViewModels.MainViewModelBase mainModel;
private readonly SynchronizationContext execContext;
public PlayniteApiRoot(
GamesEditor gameEditor,
ExtensionFactory extensions,
GameDatabase database,
ViewModels.MainViewModelBase mainModel)
{
this.gameEditor = gameEditor;
this.extensions = extensions;
this.database = database;
this.mainModel = mainModel;
execContext = SynchronizationContext.Current;
}
public string ExpandGameVariables(Game game, string inputString)
{
return game?.ExpandVariables(inputString);
}
public string ExpandGameVariables(Game game, string inputString, string emulatorDir)
{
return game?.ExpandVariables(inputString, emulatorDir: emulatorDir);
}
public GameAction ExpandGameVariables(Game game, GameAction action)
{
return action?.ExpandVariables(game);
}
public void StartGame(Guid gameId)
{
var game = database.Games.Get(gameId);
if (game == null)
{
logger.Error($"Can't start game, game ID {gameId} not found.");
}
else
{
// Run on main thread for edge cases like this:
// https://www.reddit.com/r/playnite/comments/slyg99/boot_another_game_as_a_play_action/
execContext.Send((_) => gameEditor.PlayGame(game, false), null);
}
}
public void InstallGame(Guid gameId)
{
var game = database.Games.Get(gameId);
if (game == null)
{
logger.Error($"Can't install game, game ID {gameId} not found.");
}
else
{
gameEditor.InstallGame(game);
}
}
public void UninstallGame(Guid gameId)
{
var game = database.Games.Get(gameId);
if (game == null)
{
logger.Error($"Can't uninstall game, game ID {gameId} not found.");
}
else
{
gameEditor.UnInstallGame(game);
}
}
public void AddCustomElementSupport(Plugin source, AddCustomElementSupportArgs args)
{
extensions.AddCustomElementSupport(source, args);
}
public void AddSettingsSupport(Plugin source, AddSettingsSupportArgs args)
{
extensions.AddSettingsSupport(source, args);
}
public void AddConvertersSupport(Plugin source, AddConvertersSupportArgs args)
{
extensions.AddConvertersSupport(source, args);
}
public List<GamepadController> GetConnectedControllers()
{
return mainModel.App.GameController.Controllers.Cast<GamepadController>().ToList();
}
}
public class PlayniteAPI : IPlayniteAPI
{
public IPlayniteAPIRoot RootApi { get; set; }
public IDialogsFactory Dialogs { get; set; }
public IGameDatabaseAPI Database { get; set; }
public IMainViewAPI MainView { get; set; }
public IPlaynitePathsAPI Paths { get; set; }
public IPlayniteInfoAPI ApplicationInfo { get; set; }
public IWebViewFactory WebViews { get; set; }
public IResourceProvider Resources { get; set; }
public INotificationsAPI Notifications { get; set; }
public IUriHandlerAPI UriHandler { get; set; }
public IPlayniteSettingsAPI ApplicationSettings { get; set; }
public IAddons Addons { get; set; }
public IEmulationAPI Emulation { get; set; }
public PlayniteAPI()
{
}
public string ExpandGameVariables(Game game, string inputString)
{
return RootApi.ExpandGameVariables(game, inputString);
}
public string ExpandGameVariables(Game game, string inputString, string emulatorDir)
{
return RootApi.ExpandGameVariables(game, inputString, emulatorDir);
}
public GameAction ExpandGameVariables(Game game, GameAction action)
{
return RootApi.ExpandGameVariables(game, action);
}
public void StartGame(Guid gameId)
{
RootApi.StartGame(gameId);
}
public void InstallGame(Guid gameId)
{
RootApi.InstallGame(gameId);
}
public void UninstallGame(Guid gameId)
{
RootApi.UninstallGame(gameId);
}
public void AddCustomElementSupport(Plugin source, AddCustomElementSupportArgs args)
{
RootApi.AddCustomElementSupport(source, args);
}
public void AddSettingsSupport(Plugin source, AddSettingsSupportArgs args)
{
RootApi.AddSettingsSupport(source, args);
}
public void AddConvertersSupport(Plugin source, AddConvertersSupportArgs args)
{
RootApi.AddConvertersSupport(source, args);
}
public List<GamepadController> GetConnectedControllers()
{
return RootApi.GetConnectedControllers();
}
}
}
================================================
FILE: source/Playnite/API/PlayniteInfoAPI.cs
================================================
using Playnite.SDK;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Playnite.API
{
public class PlayniteInfoAPI : IPlayniteInfoAPI
{
public System.Version ApplicationVersion { get => Updater.CurrentVersion; }
public ApplicationMode Mode => PlayniteApplication.Current.Mode;
public bool IsPortable => PlayniteSettings.IsPortable;
public bool InOfflineMode => PlayniteEnvironment.InOfflineMode;
public bool IsDebugBuild => PlayniteEnvironment.IsDebugBuild;
public bool ThrowAllErrors => PlayniteEnvironment.ThrowAllErrors;
}
}
================================================
FILE: source/Playnite/API/PlaynitePathsAPI.cs
================================================
using Playnite.SDK;
using Playnite.Settings;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Playnite.API
{
public class PlaynitePathsAPI : IPlaynitePathsAPI
{
public bool IsPortable { get => PlayniteSettings.IsPortable; }
public string ApplicationPath { get => PlaynitePaths.ProgramPath; }
public string ConfigurationPath { get => PlaynitePaths.ConfigRootPath; }
public string ExtensionsDataPath { get => PlaynitePaths.ExtensionsDataPath; }
}
}
================================================
FILE: source/Playnite/API/PlayniteSettingsAPI.cs
================================================
using Playnite.Database;
using Playnite.SDK;
using Playnite.SDK.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
namespace Playnite.API
{
public class FullscreenSettingsAPI : IFullscreenSettingsAPI
{
private readonly FullscreenSettings settings;
public bool IsMusicMuted
{
get => settings.IsMusicMuted;
set => settings.IsMusicMuted = value;
}
public bool SwapConfirmCancelButtons => settings.SwapConfirmCancelButtons;
public bool SwapStartDetailsAction => settings.SwapStartDetailsAction;
public bool GuideButtonFocus => settings.GuideButtonFocus;
public FullscreenSettingsAPI(FullscreenSettings settings)
{
this.settings = settings;
}
}
public class CompletionStatusSettignsApi : ICompletionStatusSettignsApi
{
private readonly GameDatabase db;
public CompletionStatusSettignsApi(GameDatabase database)
{
db = database;
}
public Guid DefaultStatus => db.GetCompletionStatusSettings().DefaultStatus;
public Guid PlayedStatus => db.GetCompletionStatusSettings().DefaultStatus;
}
public class PlayniteSettingsAPI : IPlayniteSettingsAPI
{
private readonly PlayniteSettings settings;
private readonly GameDatabase db;
public int Version => settings.Version;
public int GridItemWidthRatio => settings.GridItemWidthRatio;
public int GridItemHeightRatio => settings.GridItemHeightRatio;
public bool FirstTimeWizardComplete => settings.FirstTimeWizardComplete;
public bool DisableHwAcceleration => settings.DisableHwAcceleration;
public bool AsyncImageLoading => settings.AsyncImageLoading;
public bool DownloadMetadataOnImport => settings.DownloadMetadataOnImport;
public bool InstallSizeScanUseSizeOnDisk => settings.InstallSizeScanUseSizeOnDisk;
public bool ScanLibInstallSizeOnLibUpdate => settings.ScanLibInstallSizeOnLibUpdate;
public bool StartInFullscreen => settings.StartInFullscreen;
public string DatabasePath => settings.DatabasePath;
public bool MinimizeToTray => settings.MinimizeToTray;
public bool CloseToTray => settings.CloseToTray;
public bool EnableTray => settings.EnableTray;
public string Language => settings.Language == "english" ? "en_US" : settings.Language;
public bool UpdateLibStartup => settings.CheckForLibraryUpdates == LibraryUpdateCheckFrequency.OnEveryStartup;
public string DesktopTheme => settings.Theme;
public string FullscreenTheme => settings.Fullscreen.Theme;
public bool StartMinimized => settings.StartMinimized;
public bool StartOnBoot => settings.StartOnBoot;
public string FontFamilyName => settings.FontFamilyName;
public bool DiscordPresenceEnabled => settings.DiscordPresenceEnabled;
public AgeRatingOrg AgeRatingOrgPriority => settings.AgeRatingOrgPriority;
public bool SidebarVisible => settings.ShowSidebar;
public Dock SidebarPosition => settings.SidebarPosition;
public IFullscreenSettingsAPI Fullscreen { get; }
public ICompletionStatusSettignsApi CompletionStatus { get; }
public bool ForcePlayTimeSync => false;
public PlaytimeImportMode PlaytimeImportMode => settings.PlaytimeImportMode;
public PlayniteSettingsAPI(PlayniteSettings settings, GameDatabase db)
{
this.settings = settings;
this.db = db;
Fullscreen = new FullscreenSettingsAPI(settings.Fullscreen);
CompletionStatus = new CompletionStatusSettignsApi(db);
}
public bool GetGameExcludedFromImport(string gameId, Guid libraryId)
{
if (gameId.IsNullOrEmpty() || libraryId == Guid.Empty)
{
throw new ArgumentNullException("gameId and libraryId must be specified.");
}
return db.ImportExclusions.Get(ImportExclusionItem.GetId(gameId, libraryId)) != null;
}
}
}
================================================
FILE: source/Playnite/Addons/Addons.cs
================================================
using Playnite.Plugins;
using Playnite.SDK;
using Playnite.Services;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Playnite
{
public enum AddonUpdateStatus
{
[Description("")]
None,
[Description(LOC.AddonUpdateStatusDownloaded)]
Downloaded,
[Description(LOC.AddonUpdateStatusFailed)]
Failed,
[Description(LOC.AddonUpdateStatusLicenseRejected)]
LicenseRejected,
}
public class AddonUpdate : SelectableItem<AddonManifest>
{
public string UpdateInfo { get; set; }
public string Changelog { get; set; }
public AddonInstallerPackage Package { get; set; }
private AddonUpdateStatus status = AddonUpdateStatus.None;
public AddonUpdateStatus Status
{
get => status;
set
{
status = value;
OnPropertyChanged();
}
}
private string statusMessage;
public string StatusMessage
{
get => statusMessage;
set
{
statusMessage = value;
OnPropertyChanged();
}
}
public AddonUpdate(AddonManifest item) : base(item)
{
}
}
public static class Addons
{
private static ILogger logger = LogManager.GetLogger();
private static List<AddonUpdate> CheckAddonsForUpdate(IEnumerable<BaseExtensionManifest> manifests, ServicesClient serviceClient)
{
var random = new Random();
var updateList = new List<AddonUpdate>();
foreach (var manifest in manifests)
{
try
{
var addonManifest = serviceClient.GetAddon(manifest.Id);
if (addonManifest == null)
{
continue;
}
var installer = addonManifest.InstallerManifest;
var package = installer.GetLatestCompatiblePackage();
var currentVersion = Version.Parse(manifest.Version);
var changeLog = string.Empty;
if (package != null && package.Version > currentVersion)
{
if (installer.Packages.HasItems())
{
var changes = installer.Packages.Where(a => a.Version > currentVersion && a.Version <= package.Version).ToList();
if (changes.HasItems())
{
changes.ForEach(a =>
{
changeLog += a.Version.ToString();
a.Changelog?.ForEach(b => changeLog += Environment.NewLine + $" • {b}");
changeLog += Environment.NewLine;
});
}
}
updateList.Add(new AddonUpdate(addonManifest)
{
Selected = true,
UpdateInfo = $"{currentVersion} -> {package.Version}",
Changelog = changeLog,
Package = package
});
}
}
catch (Exception e) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(e, $"Failed to check for addon for update. {manifest.Id}");
}
}
return updateList;
}
public static List<AddonUpdate> CheckAddonUpdates(ServicesClient serviceClient)
{
var updateList = new List<AddonUpdate>();
if (PlayniteEnvironment.InOfflineMode)
{
return updateList;
}
var descriptions = ExtensionFactory.GetInstalledManifests();
updateList.AddRange(CheckAddonsForUpdate(descriptions.Where(a => a.Type == ExtensionType.MetadataProvider), serviceClient));
updateList.AddRange(CheckAddonsForUpdate(descriptions.Where(a => a.Type == ExtensionType.GameLibrary), serviceClient));
updateList.AddRange(CheckAddonsForUpdate(descriptions.Where(a => a.Type == ExtensionType.GenericPlugin), serviceClient));
updateList.AddRange(CheckAddonsForUpdate(descriptions.Where(a => a.Type == ExtensionType.Script), serviceClient));
updateList.AddRange(CheckAddonsForUpdate(ThemeManager.GetAvailableThemes(ApplicationMode.Desktop).Where(a => !a.IsBuiltInTheme), serviceClient));
updateList.AddRange(CheckAddonsForUpdate(ThemeManager.GetAvailableThemes(ApplicationMode.Fullscreen).Where(a => !a.IsBuiltInTheme), serviceClient));
var blackList = serviceClient.GetAddonBlacklist();
updateList.Where(a => blackList.Contains(a.Item.AddonId)).ToList().ForEach(a => updateList.Remove(a));
return updateList;
}
}
}
================================================
FILE: source/Playnite/App/CmdLineOptions.cs
================================================
using CommandLine;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Playnite
{
public class CmdLineOptions
{
[Option("start")]
public string Start { get; set; }
[Option("uridata")]
public string UriData { get; set; }
[Option("nolibupdate")]
public bool SkipLibUpdate { get; set; }
[Option("startdesktop")]
public bool StartInDesktop { get; set; }
[Option("startfullscreen")]
public bool StartInFullscreen { get; set; }
[Option("forcesoftrender")]
public bool ForceSoftwareRender { get; set; }
[Option("forcedefaulttheme")]
public bool ForceDefaultTheme { get; set; }
[Option("hidesplashscreen")]
public bool HideSplashScreen { get; set; }
[Option("installext")]
public string InstallExtension { get; set; }
[Option("clearwebcache")]
public bool ClearWebCache { get; set; }
[Option("shutdown")]
public bool Shutdown { get; set; }
[Option("safestartup")]
public bool SafeStartup { get; set; }
[Option("resetsettings")]
public bool ResetSettings { get; set; }
[Option("masterinstance")]
public bool MasterInstance { get; set; }
[Option("backup")]
public string Backup { get; set; }
[Option("restorebackup")]
public string RestoreBackup { get; set; }
[Option("startclosedtotray")]
public bool StartClosedToTray { get; set; }
[Option("userdatadir")]
public string UserDataDir { get; set; }
[Option("fullscreenwidth")]
public int FullscreenWidth { get; set; }
[Option("fullscreenheight")]
public int FullscreenHeight { get; set; }
public override string ToString()
{
return Parser.Default.FormatCommandLine(this);
}
}
}
================================================
FILE: source/Playnite/App/IPlayniteApplication.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Playnite
{
public interface IPlayniteApplication
{
void Quit(bool saveSettings);
void Restart(bool saveSettings);
void QuitAndStart(string path, string arguments, bool asAdmin = false, bool saveSettings = true);
}
}
================================================
FILE: source/Playnite/App/PlayniteApplication.cs
================================================
using Playnite.Controllers;
using Playnite.Input;
using Playnite.SDK;
using Playnite.Plugins;
using Playnite.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Diagnostics;
using Playnite.Database;
using Playnite.API;
using TheArtOfDev.HtmlRenderer;
using Playnite.Services;
using System.Windows.Input;
using System.Windows.Interop;
using System.Reflection;
using System.IO;
using Playnite.Common;
using System.ComponentModel;
using Playnite.Windows;
using Polly;
using System.Windows.Media;
using Playnite.SDK.Events;
using System.Windows.Threading;
using System.Net;
using Playnite.Common.Web;
using System.ServiceProcess;
using System.Drawing.Imaging;
namespace Playnite
{
public abstract class PlayniteApplication : ObservableObject, IPlayniteApplication
{
private ILogger logger = LogManager.GetLogger();
private const string instanceMuxet = "PlayniteInstaceMutex";
private Mutex appMutex;
public bool ResourcesReleased { get; private set; } = false;
private PipeService pipeService;
private PipeServer pipeServer;
private System.Threading.Timer updateCheckTimer;
private bool installingAddon = false;
private AddonLoadError themeLoadError = AddonLoadError.None;
private ThemeManifest customTheme;
private bool isActive;
public bool IsActive
{
get => isActive;
set
{
isActive = value;
OnPropertyChanged();
}
}
public static Version CurrentVersion => Updater.CurrentVersion;
public event EventHandler ExtensionsLoaded;
public ApplicationMode Mode { get; }
public IDialogsFactory Dialogs { get; set; }
public PlayniteSettings AppSettings { get; set; }
public GamesEditor GamesEditor { get; set; }
public ExtensionFactory Extensions { get; set; }
public GameDatabase Database { get; set; }
public GameControllerFactory Controllers { get; set; }
public CmdLineOptions CmdLine { get; set; }
public DpiScale DpiScale { get; set; } = new DpiScale(1, 1);
public ComputerScreen CurrentScreen { get; set; } = Computer.GetPrimaryScreen();
public DiscordManager Discord { get; set; }
public SynchronizationContext SyncContext { get; private set; }
public Action<PlayniteUriEventArgs> AppUriHandler { get; set; }
public static Application CurrentNative { get; private set; }
public static PlayniteApplication Current { get; private set; }
public ServicesClient ServicesClient { get; private set; }
public MainViewModelBase MainModelBase { get; set; }
public List<ExtensionInstallResult> ExtensionsInstallResult { get; set; }
public NotificationsAPI Notifications { get; }
public PlayniteUriHandler UriHandler { get; }
public PlayniteAPI PlayniteApiGlobal { get; set; }
public GameControllerManager GameController { get; set; }
private ExtensionsStatusBinder extensionsStatusBinder = new ExtensionsStatusBinder();
public ExtensionsStatusBinder ExtensionsStatusBinder { get => extensionsStatusBinder; set => SetValue(ref extensionsStatusBinder, value); }
public PlayniteApplication()
{
}
public PlayniteApplication(
Func<Application> appInitializer,
ApplicationMode mode,
CmdLineOptions cmdLine)
{
if (Current != null)
{
throw new Exception("Only one application instance is allowed.");
}
// TODO: remove after switch to .NET 5
// Fixes various network issues on 2004+ Win10 if TLS 1.3 is forced via registry.
if (Computer.IsTLS13SystemWideEnabled())
{
logger.Warn("System wide TLS 1.3 is enabled, forcing 1.2.");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
}
CmdLine = cmdLine;
Mode = mode;
Current = this;
if (!Debugger.IsAttached)
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
}
if (!CmdLine.MasterInstance)
{
if (CheckOtherInstances() || CmdLine.Shutdown)
{
ResourcesReleased = true;
Environment.Exit(0);
return;
}
}
#if !DEBUG
if (FileSystem.FileExists(PlaynitePaths.SafeStartupFlagFile))
{
if (MessageBox.Show(
"Playnite closed unexpectedly while starting. This is usually caused by 3rd party theme or extension. Do you want to start in safe mode with all 3rd party add-ons disabled?",
"Startup Error",
MessageBoxButton.YesNo,
MessageBoxImage.Warning) == MessageBoxResult.Yes)
{
cmdLine.SafeStartup = true;
}
}
else
{
FileSystem.CreateFile(PlaynitePaths.SafeStartupFlagFile);
}
#endif
// All code above has to be called before we create instance of WPF app,
// because MessageBox forces WPF to initialize and fire startup app events.
CurrentNative = appInitializer();
CurrentNative.ShutdownMode = ShutdownMode.OnExplicitShutdown;
SyncContext = new DispatcherSynchronizationContext(CurrentNative.Dispatcher);
SynchronizationContext.SetSynchronizationContext(SyncContext);
appMutex = new Mutex(true, instanceMuxet);
try
{
// This can fail in rare cases when switching application modes
// if an old instance fails to clean after itself or if it gets stuck on exit.
Policy.Handle<Exception>()
.WaitAndRetry(3, a => TimeSpan.FromSeconds(3))
.Execute(() => pipeService = new PipeService());
pipeService.CommandExecuted += PipeService_CommandExecuted;
pipeServer = new PipeServer(PlayniteSettings.GetAppConfigValue("PipeEndpoint"));
pipeServer.StartServer(pipeService);
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(exc, "Failed to start pipe service.");
}
PlayniteSettings.MigrateSettingsConfig();
AppSettings = PlayniteSettings.LoadSettings();
Commands.GlobalCommands.AppSettings = AppSettings;
NLogLogger.IsTraceEnabled = AppSettings.TraceLogEnabled;
if (AppSettings.ShouldDataBackupOnStartup())
{
var backOptions = Backup.GetAutoBackupOptions(AppSettings, PlaynitePaths.ConfigRootPath, GameDatabase.GetFullDbPath(AppSettings.DatabasePath));
FileSystem.WriteStringToFile(PlaynitePaths.BackupActionFile, Serialization.ToJson(backOptions));
CmdLine.Backup = PlaynitePaths.BackupActionFile;
AppSettings.LastAutoBackup = DateTime.Now;
AppSettings.SaveSettings();
}
if (!CmdLine.Backup.IsNullOrEmpty() || !CmdLine.RestoreBackup.IsNullOrEmpty())
{
ServicesClient = new ServicesClient();
CurrentNative.SessionEnding += Application_SessionEnding;
CurrentNative.Exit += Application_Exit;
CurrentNative.Startup += Application_Startup;
CurrentNative.Activated += Application_Activated;
CurrentNative.Deactivated += Application_Deactivated;
var defaultTheme = new ThemeManifest()
{
DirectoryName = ThemeManager.DefaultThemeDirName,
DirectoryPath = Path.Combine(PlaynitePaths.ThemesProgramPath, ThemeManager.GetThemeRootDir(Mode), ThemeManager.DefaultThemeDirName),
Name = ThemeManager.DefaultThemeDirName,
Id = mode == ApplicationMode.Desktop ? ThemeManager.DefaultDesktopThemeId : ThemeManager.DefaultFullscreenThemeId
};
ThemeManager.SetDefaultTheme(defaultTheme);
InitializeNative();
try
{
Localization.SetLanguage(AppSettings.Language);
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(exc, $"Failed to set {AppSettings.Language} langauge.");
}
}
else
{
if (CmdLine.ResetSettings)
{
var settings = PlayniteSettings.GetDefaultSettings();
settings.FirstTimeWizardComplete = true;
settings.DatabasePath = AppSettings.DatabasePath;
settings.SaveSettings();
AppSettings = settings;
}
var relaunchPath = string.Empty;
if (AppSettings.StartInFullscreen && mode == ApplicationMode.Desktop && !CmdLine.StartInDesktop)
{
relaunchPath = PlaynitePaths.FullscreenExecutablePath;
}
if (CmdLine.StartInDesktop && mode != ApplicationMode.Desktop)
{
relaunchPath = PlaynitePaths.DesktopExecutablePath;
}
else if (CmdLine.StartInFullscreen && mode != ApplicationMode.Fullscreen)
{
relaunchPath = PlaynitePaths.FullscreenExecutablePath;
}
if (!relaunchPath.IsNullOrEmpty())
{
FileSystem.DeleteFile(PlaynitePaths.SafeStartupFlagFile);
ProcessStarter.StartProcess(relaunchPath, CmdLine.ToString());
CurrentNative.Shutdown(0);
return;
}
ServicesClient = new ServicesClient();
CurrentNative.SessionEnding += Application_SessionEnding;
CurrentNative.Exit += Application_Exit;
CurrentNative.Startup += Application_Startup;
CurrentNative.Activated += Application_Activated;
CurrentNative.Deactivated += Application_Deactivated;
OnPropertyChanged(nameof(AppSettings));
var defaultTheme = new ThemeManifest()
{
DirectoryName = ThemeManager.DefaultThemeDirName,
DirectoryPath = Path.Combine(PlaynitePaths.ThemesProgramPath, ThemeManager.GetThemeRootDir(Mode), ThemeManager.DefaultThemeDirName),
Name = ThemeManager.DefaultThemeDirName,
Id = mode == ApplicationMode.Desktop ? ThemeManager.DefaultDesktopThemeId : ThemeManager.DefaultFullscreenThemeId
};
try
{
WaitForOtherInstacesToExit(false);
ExtensionsInstallResult = ExtensionInstaller.InstallExtensionQueue();
var installedTheme = ExtensionsInstallResult.FirstOrDefault(a => a.InstalledManifest is ThemeManifest && !a.Updated);
if (installedTheme?.InstalledManifest != null)
{
var theme = installedTheme.InstalledManifest as ThemeManifest;
if (theme.Mode == Mode)
{
if (theme.Mode == ApplicationMode.Desktop)
{
AppSettings.Theme = theme.Id;
}
else
{
AppSettings.Fullscreen.Theme = theme.Id;
}
}
}
}
catch (Exception e) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(e, "Failed to finish installing extenions.");
}
ThemeManager.SetDefaultTheme(defaultTheme);
// Theme must be set BEFORE default app resources are initialized for ThemeFile markup to apply custom theme's paths.
customTheme = null;
if (CmdLine.ForceDefaultTheme || CmdLine.SafeStartup)
{
logger.Warn("Default theme forced by cmdline.");
}
else
{
var theme = mode == ApplicationMode.Desktop ? AppSettings.Theme : AppSettings.Fullscreen.Theme;
if (theme != ThemeManager.DefaultTheme.Id)
{
customTheme = ThemeManager.GetAvailableThemes(mode).Where(a => a.Id == theme).OrderByDescending(a => a.Version).FirstOrDefault();
if (customTheme == null)
{
logger.Error($"Failed to apply theme {theme}, theme not found.");
if (mode == ApplicationMode.Desktop)
{
AppSettings.Theme = ThemeManager.DefaultDesktopThemeId;
}
else
{
AppSettings.Fullscreen.Theme = ThemeManager.DefaultFullscreenThemeId;
}
ThemeManager.SetCurrentTheme(defaultTheme);
}
else
{
ThemeManager.SetCurrentTheme(customTheme);
}
}
}
InitializeNative();
try
{
if (!AppSettings.FirstTimeWizardComplete)
{
var cultName = System.Globalization.CultureInfo.CurrentUICulture.Name.Replace('-', '_');
var validLang = Localization.AvailableLanguages.FirstOrDefault(a => a.Id == cultName && a.TranslatedPercentage > 75);
if (validLang != null)
{
AppSettings.Language = validLang.Id;
}
}
Localization.SetLanguage(AppSettings.Language);
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(exc, $"Failed to set {AppSettings.Language} langauge.");
}
// Must be applied AFTER default app resources are initialized, otherwise custom resource dictionaries won't be properly added to application scope.
if (customTheme != null)
{
themeLoadError = ThemeManager.ApplyTheme(CurrentNative, customTheme, Mode);
if (themeLoadError != AddonLoadError.None)
{
ThemeManager.SetCurrentTheme(null);
logger.Error($"Failed to load theme {customTheme.Name}, {themeLoadError}.");
}
}
if (mode == ApplicationMode.Desktop)
{
try
{
if (System.Drawing.FontFamily.Families.Any(a => a.Name == AppSettings.FontFamilyName))
{
CurrentNative.Resources.Add(
"FontFamily", new FontFamily(AppSettings.FontFamilyName));
}
else
{
logger.Error($"Cannot set font {AppSettings.FontFamilyName}, font not found.");
}
if (System.Drawing.FontFamily.Families.Any(a => a.Name == AppSettings.MonospaceFontFamilyName))
{
CurrentNative.Resources.Add(
"MonospaceFontFamily", new FontFamily(AppSettings.MonospaceFontFamilyName));
}
else
{
logger.Error($"Cannot set monospace font {AppSettings.MonospaceFontFamilyName}, font not found.");
}
if (AppSettings.FontSize > 0)
{
CurrentNative.Resources.Add(
"FontSize", AppSettings.FontSize);
}
if (AppSettings.FontSizeSmall > 0)
{
CurrentNative.Resources.Add(
"FontSizeSmall", AppSettings.FontSizeSmall);
}
if (AppSettings.FontSizeLarge > 0)
{
CurrentNative.Resources.Add(
"FontSizeLarge", AppSettings.FontSizeLarge);
}
if (AppSettings.FontSizeLarger > 0)
{
CurrentNative.Resources.Add(
"FontSizeLarger", AppSettings.FontSizeLarger);
}
if (AppSettings.FontSizeLargest > 0)
{
CurrentNative.Resources.Add(
"FontSizeLargest", AppSettings.FontSizeLargest);
}
}
catch (Exception e) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(e, $"Failed to set font {AppSettings.FontFamilyName}");
}
}
else
{
if (AppSettings.Fullscreen.FontSize > 0)
{
CurrentNative.Resources.Add(
"FontSize", AppSettings.Fullscreen.FontSize);
}
if (AppSettings.Fullscreen.FontSizeSmall > 0)
{
CurrentNative.Resources.Add(
"FontSizeSmall", AppSettings.Fullscreen.FontSizeSmall);
}
}
// Only use this for Desktop mode. Non-default options look terrible in Fullscreen because of viewport scaling.
if (mode == ApplicationMode.Desktop)
{
Controls.WindowBase.SetTextRenderingOptions(AppSettings.TextFormattingMode, AppSettings.TextRenderingMode);
}
Notifications = new NotificationsAPI();
UriHandler = new PlayniteUriHandler();
}
}
public abstract void InstantiateApp();
public abstract void InitializeNative();
public abstract void Restore();
public abstract void Minimize();
public abstract void ShowWindowsNotification(string title, string body, Action action);
public abstract void SwitchAppMode(ApplicationMode mode);
public abstract void ConfigureViews();
private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e)
{
logger.Info("Shutting down application because of session ending.");
// Don't dispose CefSharp here because of bug in CefSharp during system shutdown
// https://github.com/JosefNemec/Playnite/issues/866
AppSettings?.SaveSettings();
ReleaseResources(false);
CurrentNative.Shutdown(0);
}
private void Application_Exit(object sender, ExitEventArgs e)
{
ReleaseResources();
}
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
// Running under Wine is not supported
if (PlayniteProcess.WorkingSetMemory == 0 &&
Programs.GetUnistallProgramsList().Any(a => a.DisplayName.StartsWith("Wine Mono", StringComparison.OrdinalIgnoreCase)))
{
Process.GetCurrentProcess().Kill();
return;
}
var exception = (Exception)e.ExceptionObject;
var crashInfo = Exceptions.GetExceptionInfo(exception, Extensions);
logger.Error(exception, $"Unhandled exception occured.");
logger.Error($"HResult: 0x{exception.HResult:X8}");
if (exception is Win32Exception win32exc)
logger.Error($"Win32 NativeErrorCode: 0x{win32exc.NativeErrorCode:X8}");
CrashHandlerViewModel crashModel = null;
// Delete safe startup flag if we are able to handle the crash,
// safe startup option should show for crashes we are not handling.
FileSystem.DeleteFile(PlaynitePaths.SafeStartupFlagFile);
if (crashInfo.IsLiteDbCorruptionCrash)
{
Dialogs.ShowErrorMessage(LOC.DBCorruptionCrashMessage.GetLocalized());
Process.GetCurrentProcess().Kill();
return;
}
if (crashInfo.IsExtensionCrash)
{
crashModel = new CrashHandlerViewModel(
new ExtensionCrashHandlerWindowFactory(),
Dialogs,
new ResourceProvider(),
Mode,
crashInfo,
AppSettings);
}
else
{
// unchecked use reason: https://stackoverflow.com/a/10043486/1107424
// This started happening after the infamous 2026 January Win 11 update, Smart App Control is agersively blocking unsigned files from loading.
// Based on crash reports, this usually happens to SDL's and CefSharp's dlls, also random plugins.
if ((exception is FileLoadException || exception is DllNotFoundException) &&
exception.Message.Contains("0x800711C7")) // This is actually not set in HResult, it's in exception message and replaced by .NET to generic 0x80131524
{
Dialogs.ShowErrorMessage("Failed to load dependencies needed for Playnite to continue operating properly.\n\nThis is usually caused by Windows Smart App Control blocking dlls in Playnite's install folder.");
Process.GetCurrentProcess().Kill();
return;
}
// Have nonsense crashes with this about normal .NET runtime methods and Playnite class methods missing.
if (exception is MissingMethodException ||
exception is BadImageFormatException ||
exception is InvalidProgramException ||
// Looks like there are some nested TargetInvocationException with MissingMethodException actual extension,
// which seems to look like corrupted installed where binaries from different version got mixed up.
exception.StackTrace?.Contains("System.MissingMethodException") == true ||
// Usually COM execution error from WindowsAPICodePack when opening folder selection dialog. As far as I can tell, this happens on "debloated" Windows edition only.
(exception is System.Runtime.InteropServices.COMException &&
(exception.HResult == unchecked((int)0x80004005) || exception.HResult == unchecked((int)0x80040111))) ||
// DWM_E_COMPOSITIONDISABLED, looks like this can happen when GPU driver crashes and doesn't reboot properly
exception.HResult == unchecked((int)0x80263001))
{
Dialogs.ShowErrorMessage("System issue or corrupted Playnite install detected.");
Process.GetCurrentProcess().Kill();
return;
}
// This seems to start happening after January Windows 11 update for libraries synced via cloud
// storage (OneDrive and DropBox reported by users). Looks like something fucked in that Windows update
// but we generally do not recommend/support storing files on cloud folders.
if (Diagnostic.IsHResultCloudError(exception.HResult))
{
Dialogs.ShowErrorMessage("Cloud related file system operation failed. Might be issue with Windows or cloud sync app you are using.\n\nWe do not recommend storing Playnite files on cloud synced folders since it's been known to cause data corruption in the past.");
Process.GetCurrentProcess().Kill();
return;
}
// ERROR_DISK_FULL
if (exception.HResult == unchecked((int)0x80070070) ||
// "device not ready" error. Happens when people run Playnite from attached storage as far as I can tell.
exception.HResult == unchecked((int)0x80070015) ||
// self-explanatory
exception is OutOfMemoryException)
{
Dialogs.ShowErrorMessage(exception.Message, LOC.CrashWindowTitle.GetLocalized());
Process.GetCurrentProcess().Kill();
return;
}
crashModel = new CrashHandlerViewModel(
new CrashHandlerWindowFactory(),
Dialogs,
new ResourceProvider(),
Mode);
}
crashModel.OpenView();
Process.GetCurrentProcess().Kill();
}
private void Application_Startup(object sender, StartupEventArgs e)
{
logger.Info($"Application started from '{PlaynitePaths.ProgramPath}'");
SDK.Data.Markup.Init(new MarkupConverter());
SDK.Data.Serialization.Init(new DataSerializer());
SDK.Data.SQLite.Init((a, b) => new Sqlite(a, b));
EventManager.RegisterClassHandler(typeof(Controls.WindowBase), Controls.WindowBase.ClosedRoutedEvent, new RoutedEventHandler(WindowBaseCloseHandler));
EventManager.RegisterClassHandler(typeof(Controls.WindowBase), Controls.WindowBase.LoadedRoutedEvent, new RoutedEventHandler(WindowBaseLoadedHandler));
ConfigureViews();
if (!CmdLine.Backup.IsNullOrEmpty())
{
BackupOptions backupOptions = null;
try
{
backupOptions = Serialization.FromJsonFile<BackupOptions>(CmdLine.Backup);
var progRes = Dialogs.ActivateGlobalProgress(
(progArgs) =>
{
WaitForOtherInstacesToExit(true);
Backup.BackupData(backupOptions, progArgs.CancelToken);
},
new GlobalProgressOptions(LOC.BackupProgress, true) { IsIndeterminate = true });
if (progRes.Error != null)
{
logger.Error(progRes.Error, "Failed to backup data.");
throw progRes.Error;
}
if (progRes.Canceled)
{
Dialogs.ShowErrorMessage(LOC.BackupCancelled, LOC.BackupErrorTitle);
}
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
Dialogs.ShowErrorMessage(LOC.BackupFailed.GetLocalized() + Environment.NewLine + Environment.NewLine + exc.Message, LOC.BackupErrorTitle);
logger.Error(exc, "Failed to backup data.");
}
finally
{
if (backupOptions == null || !backupOptions.ClosedWhenDone)
{
Restart(new CmdLineOptions
{
StartClosedToTray = CmdLine.StartClosedToTray,
HideSplashScreen = CmdLine.HideSplashScreen,
StartInFullscreen = CmdLine.StartInFullscreen
}, false);
}
}
FileSystem.DeleteFile(PlaynitePaths.SafeStartupFlagFile);
Quit(false);
return;
}
else if (!CmdLine.RestoreBackup.IsNullOrEmpty())
{
BackupRestoreOptions restoreOptions = null;
try
{
restoreOptions = Serialization.FromJsonFile<BackupRestoreOptions>(CmdLine.RestoreBackup);
var progRes = Dialogs.ActivateGlobalProgress(
(progArgs) =>
{
WaitForOtherInstacesToExit(true);
Backup.RestoreBackup(restoreOptions);
},
new GlobalProgressOptions(LOC.BackupRestoreProgress, false) { IsIndeterminate = true });
if (progRes.Error != null)
{
logger.Error(progRes.Error, "Failed to restore data from backup.");
throw progRes.Error;
}
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
Dialogs.ShowErrorMessage(LOC.BackupRestoreFailed.GetLocalized() + Environment.NewLine + Environment.NewLine + exc.Message, LOC.BackupErrorTitle);
logger.Error(exc, "Failed to restore data from backup.");
}
finally
{
if (restoreOptions == null || !restoreOptions.ClosedWhenDone)
{
Restart(new CmdLineOptions(), false);
}
}
FileSystem.DeleteFile(PlaynitePaths.SafeStartupFlagFile);
Quit(false);
return;
}
if (!Startup())
{
Quit();
return;
}
logger.Info($"Application {CurrentVersion} started");
ExtensionsInstallResult?.Where(a => a.InstallError != null).ForEach(ext =>
Notifications.Add(new NotificationMessage(
"inst_err" + ext.PackagePath,
ResourceProvider.GetString(LOC.AddonInstallFaild).Format(Path.GetFileNameWithoutExtension(ext.PackagePath)) +
"\n" + ext.InstallError.Message,
NotificationType.Error)));
foreach (var fail in Extensions.FailedExtensions)
{
Notifications.Add(new NotificationMessage(
fail.manifest.DirectoryPath,
fail.error == AddonLoadError.SDKVersion ?
ResourceProvider.GetString(LOC.SpecificExtensionLoadSDKError).Format(fail.manifest.Name) :
ResourceProvider.GetString(LOC.SpecificExtensionLoadError).Format(fail.manifest.Name),
NotificationType.Error));
}
if (themeLoadError != AddonLoadError.None && customTheme != null)
{
Notifications.Add(new NotificationMessage(
customTheme.DirectoryPath,
themeLoadError == AddonLoadError.SDKVersion ?
ResourceProvider.GetString(LOC.SpecificThemeLoadSDKError).Format(customTheme.Name) :
ResourceProvider.GetString(LOC.SpecificThemeLoadError).Format(customTheme.Name),
NotificationType.Error));
}
try
{
if (AppSettings.ShowNahimicServiceWarning)
{
if (ServiceController.GetServices().FirstOrDefault(a =>
(a.ServiceName?.Contains("nahimic", StringComparison.OrdinalIgnoreCase) == true ||
a.DisplayName?.Contains("nahimic", StringComparison.OrdinalIgnoreCase) == true) &&
a.Status != ServiceControllerStatus.Stopped) != null)
{
var okResponse = new MessageBoxOption(LOC.OKLabel, true, true);
var dontShowResponse = new MessageBoxOption(LOC.DontShowAgainTitle);
var res = Dialogs.ShowMessage(
LOC.NahimicServiceWarning, "",
MessageBoxImage.Warning,
new List<MessageBoxOption> { okResponse, dontShowResponse });
if (res == dontShowResponse)
{
AppSettings.ShowNahimicServiceWarning = false;
}
}
}
}
catch (Exception nahExc)
{
// ServiceController.GetServices() can apparently blow up on Win32Exception sometimes
logger.Error(nahExc, "Failed to check for Nahimic service.");
}
if (PlayniteEnvironment.IsElevated && AppSettings.ShowElevatedRightsWarning)
{
var okResponse = new MessageBoxOption(LOC.OKLabel, true, true);
var dontShowResponse = new MessageBoxOption(LOC.DontShowAgainTitle);
var res = Dialogs.ShowMessage(
LOC.ElevatedProcessWarning, "",
MessageBoxImage.Warning,
new List<MessageBoxOption> { okResponse, dontShowResponse });
if (res == dontShowResponse)
{
AppSettings.ShowElevatedRightsWarning = false;
}
}
}
private void WindowBaseCloseHandler(object sender, RoutedEventArgs e)
{
WindowManager.NotifyChildOwnershipChanges();
}
private void WindowBaseLoadedHandler(object sender, RoutedEventArgs e)
{
WindowManager.NotifyChildOwnershipChanges();
}
private void PipeService_CommandExecuted(object sender, CommandExecutedEventArgs args)
{
logger.Info($"Executing command \"{args.Command}\" from pipe with arguments \"{args.Args}\"");
switch (args.Command)
{
case CmdlineCommand.Focus:
Restore();
break;
case CmdlineCommand.Start:
if (Guid.TryParse(args.Args, out var gameId))
{
var game = Database.Games[gameId];
if (game == null)
{
logger.Error($"Cannot start game, game {args.Args} not found.");
}
else
{
GamesEditor.PlayGame(game, false);
}
}
else
{
logger.Error($"Can't start game, failed to parse game id: {args.Args}");
}
break;
case CmdlineCommand.UriRequest:
UriHandler.ProcessUri(args.Args);
break;
case CmdlineCommand.ExtensionInstall:
if (installingAddon)
{
return;
}
var extPath = args.Args;
if (!File.Exists(extPath))
{
logger.Error($"Cannot install extension, file doesn't exists: {extPath}");
return;
}
installingAddon = true;
var ext = Path.GetExtension(extPath).ToLower();
if (ext.Equals(PlaynitePaths.PackedThemeFileExtention, StringComparison.OrdinalIgnoreCase))
{
MainModelBase.Window.RestoreWindow();
InstallThemeFile(extPath);
}
else if (ext.Equals(PlaynitePaths.PackedExtensionFileExtention, StringComparison.OrdinalIgnoreCase))
{
MainModelBase.Window.RestoreWindow();
InstallExtensionFile(extPath);
}
installingAddon = false;
break;
case CmdlineCommand.SwitchMode:
if (args.Args == "desktop")
{
SyncContext.Post(_ => SwitchAppMode(ApplicationMode.Desktop), null);
}
else if (args.Args == "fullscreen")
{
SyncContext.Post(_ => SwitchAppMode(ApplicationMode.Fullscreen), null);
}
else
{
logger.Error($"Can't switch to uknwon application mode: {args.Args}");
}
break;
case CmdlineCommand.Shutdown:
Quit();
break;
case CmdlineCommand.BackupData:
if (!File.Exists(args.Args))
{
return;
}
var backupOptions = Serialization.FromJsonFile<BackupOptions>(args.Args);
if (backupOptions.CancelIfGameRunning && GamesEditor.RunningGames.HasItems())
{
return;
}
else
{
Restart(new CmdLineOptions
{
Backup = args.Args
});
}
break;
case CmdlineCommand.RestoreBackup:
if (!File.Exists(args.Args))
{
return;
}
var restoreOptions = Serialization.FromJsonFile<BackupRestoreOptions>(args.Args);
if (restoreOptions.CancelIfGameRunning && GamesEditor.RunningGames.HasItems())
{
return;
}
else
{
Restart(new CmdLineOptions
{
RestoreBackup = args.Args
});
}
break;
default:
logger.Warn("Unknown command received");
break;
}
}
private void Application_Activated(object sender, EventArgs e)
{
IsActive = true;
}
private void Application_Deactivated(object sender, EventArgs e)
{
IsActive = false;
}
public void Run()
{
CurrentNative.Run();
}
public abstract bool Startup();
public bool CheckOtherInstances()
{
var curProcess = Process.GetCurrentProcess();
if (Mutex.TryOpenExisting(instanceMuxet, out var mutex))
{
try
{
Policy.Handle<Exception>()
.WaitAndRetry(3, a => TimeSpan.FromSeconds(3))
.Execute(() =>
{
var client = new PipeClient(PlayniteSettings.GetAppConfigValue("PipeEndpoint"));
if (!CmdLine.Start.IsNullOrEmpty())
{
client.InvokeCommand(CmdlineCommand.Start, CmdLine.Start);
}
else if (!CmdLine.UriData.IsNullOrEmpty())
{
client.InvokeCommand(CmdlineCommand.UriRequest, CmdLine.UriData);
}
else if (!CmdLine.InstallExtension.IsNullOrEmpty())
{
client.InvokeCommand(CmdlineCommand.ExtensionInstall, CmdLine.InstallExtension);
}
else if (CmdLine.StartInDesktop)
{
client.InvokeCommand(CmdlineCommand.SwitchMode, "desktop");
}
else if (CmdLine.StartInFullscreen)
{
client.InvokeCommand(CmdlineCommand.SwitchMode, "fullscreen");
}
else if (CmdLine.Shutdown)
{
client.InvokeCommand(CmdlineCommand.Shutdown, null);
}
else if (!CmdLine.Backup.IsNullOrEmpty())
{
client.InvokeCommand(CmdlineCommand.BackupData, CmdLine.Backup);
}
else if (!CmdLine.RestoreBackup.IsNullOrEmpty())
{
client.InvokeCommand(CmdlineCommand.RestoreBackup, CmdLine.RestoreBackup);
}
else
{
var existingProcess = Process.GetProcesses().
First(a => IsProcessPlayniteProcess(a) && a.Id != curProcess.Id);
if (existingProcess.ProcessName == curProcess.ProcessName)
{
client.InvokeCommand(CmdlineCommand.Focus, string.Empty);
}
else
{
client.InvokeCommand(CmdlineCommand.SwitchMode, Mode == ApplicationMode.Desktop ? "desktop" : "fullscreen");
}
}
});
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
MessageBox.Show(
"Playnite failed to start. Please close all other instances and try again.",
"Startup Error");
logger.Error(exc, "Can't process communication with other instances.");
}
logger.Info("Application already running, shutting down.");
return true;
}
else
{
var processes = Process.GetProcesses().Where(a => IsProcessPlayniteProcess(a)).ToList();
// In case multiple processes end up in this branch,
// the process with highest process id gets to live.
if (processes.Count > 1 && processes.Max(a => a.Id) != curProcess.Id)
{
logger.Info("Another process instance(s) is already running, shutting down.");
return true;
}
}
return false;
}
public bool ConfigureApplication()
{
HtmlRendererSettings.ImageCachePath = PlaynitePaths.ImagesCachePath;
HtmlRendererSettings.ImageLoader = BitmapExtensions.HtmlComponentImageLoader;
if (AppSettings.DisableHwAcceleration || CmdLine.ForceSoftwareRender)
{
logger.Info("Enabling software rendering.");
System.Windows.Media.RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;
}
if (CmdLine.ClearWebCache)
{
try
{
FileSystem.DeleteDirectory(PlaynitePaths.BrowserCachePath);
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(exc, "Failed to clear CEF cache.");
}
}
try
{
CefTools.ConfigureCef(AppSettings.TraceLogEnabled);
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(exc, "Failed to initialize CefSharp.");
}
if (!CefTools.IsInitialized)
{
Dialogs.ShowErrorMessage(
ResourceProvider.GetString("LOCCefSharpInitError"),
ResourceProvider.GetString("LOCStartupError"));
Quit();
return false;
}
try
{
ExtensionFactory.CreatePluginFolders();
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(exc, "Failed to script and plugin directories.");
}
try
{
SystemIntegration.SetBootupStateRegistration(AppSettings.StartOnBoot, AppSettings.StartOnBootClosedToTray);
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(exc, "Failed to register Playnite to start on boot.");
}
try
{
SystemIntegration.RegisterPlayniteUriProtocol();
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(exc, "Failed to register playnite URI scheme.");
}
try
{
SystemIntegration.RegisterFileExtensions();
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(exc, "Failed to register playnite extensions.");
}
return true;
}
public void ProcessArguments()
{
UriHandler.Handlers.Add("playnite", ProcessUriRequest);
if (!CmdLine.Start.IsNullOrEmpty())
{
PipeService_CommandExecuted(this, new CommandExecutedEventArgs(CmdlineCommand.Start, CmdLine.Start));
}
else if (!CmdLine.UriData.IsNullOrEmpty())
{
PipeService_CommandExecuted(this, new CommandExecutedEventArgs(CmdlineCommand.UriRequest, CmdLine.UriData));
}
else if (!CmdLine.InstallExtension.IsNullOrEmpty())
{
PipeService_CommandExecuted(this, new CommandExecutedEventArgs(CmdlineCommand.ExtensionInstall, CmdLine.InstallExtension));
}
else if (CmdLine.StartInDesktop)
{
PipeService_CommandExecuted(this, new CommandExecutedEventArgs(CmdlineCommand.SwitchMode, "desktop"));
}
else if (CmdLine.StartInFullscreen)
{
PipeService_CommandExecuted(this, new CommandExecutedEventArgs(CmdlineCommand.SwitchMode, "fullscreen"));
}
else if (CmdLine.Shutdown)
{
PipeService_CommandExecuted(this, new CommandExecutedEventArgs(CmdlineCommand.Shutdown, null));
}
}
internal void ProcessUriRequest(PlayniteUriEventArgs args)
{
var arguments = args.Arguments;
if (args.Arguments.Count() == 0)
{
return;
}
var command = arguments[0];
switch (command)
{
case UriCommands.CreateDiag:
CrashHandlerViewModel.CreateDiagPackage(Dialogs);
break;
case UriCommands.StartGame:
if (arguments.Count() != 2)
{
return;
}
if (Guid.TryParse(arguments[1], out var gameId))
{
var game = Database.Games[gameId];
if (game == null)
{
logger.Error($"Cannot start game, game {arguments[1]} not found.");
}
else
{
GamesEditor.PlayGame(game, false);
}
}
else
{
logger.Error($"Can't start game, failed to parse game id: {arguments[1]}");
}
break;
case UriCommands.InstallAddon:
if (arguments.Count() != 2)
{
return;
}
InstallOnlineAddon(arguments[1]);
break;
case UriCommands.Search:
if (Mode == ApplicationMode.Desktop)
{
PlayniteApiGlobal.MainView.OpenSearch(arguments.Length >= 2 ? arguments[1] : string.Empty);
}
break;
default:
AppUriHandler(args);
break;
}
}
public void Quit(bool saveSettings = true)
{
logger.Info("Shutting down Playnite");
if (saveSettings)
{
AppSettings?.SaveSettings();
}
ReleaseResources();
CurrentNative.Shutdown(0);
}
public void QuitAndStart(string path, string arguments, bool asAdmin = false, bool saveSettings = true)
{
logger.Info("Shutting down Playnite and starting an app.");
if (saveSettings)
{
AppSettings?.SaveSettings();
}
ReleaseResources();
try
{
ProcessStarter.StartProcess(path, arguments, asAdmin);
}
catch (Exception e) when (!PlayniteEnvironment.ThrowAllErrors)
{
// Not sure how this can happen, but there are some "operation cancelled by user" crashes here.
// People probably running Playnite as admin and cancelling UAC for new process, or something...
logger.Error(e, "Failed to start process on app shutdown.");
}
CurrentNative.Shutdown(0);
}
public void QuitAndExecute(Action action, bool saveSettings = true)
{
logger.Info("Shutting down Playnite and executing an action.");
if (saveSettings)
{
AppSettings?.SaveSettings();
}
ReleaseResources();
try
{
action();
}
catch(Exception e)
{
logger.Error(e, "Failed to execute app quit action.");
}
CurrentNative.Shutdown(0);
}
public abstract void Restart(bool saveSettings = true);
public abstract void Restart(CmdLineOptions options, bool saveSettings = true);
public virtual void ReleaseResources(bool releaseCefSharp = true)
{
if (ResourcesReleased)
{
return;
}
logger.Debug("Releasing Playnite resources...");
CurrentNative.Dispatcher.Invoke(() =>
{
try
{
appMutex?.ReleaseMutex();
}
catch (Exception e) when (!PlayniteEnvironment.ThrowAllErrors)
{
// Only happens when trying to release mutext created by a different process.
// This shouldn't normally happen since the mutex is released here before starting another instance.
logger.Error(e, "Failed to release app mutext.");
}
});
try
{
pipeServer?.StopServer();
}
catch (Exception e) when (!PlayniteEnvironment.ThrowAllErrors)
{
// I have no idea why this fails for some people.
logger.Error(e, "Failed to stop pipe server.");
}
// Rare crash report of DiscordRPC not being loaded properly and then crashing on this
try
{
Discord?.Dispose();
}
catch (Exception e)
{
logger.Error(e, "Failed to dispose Discord RPC.");
}
updateCheckTimer?.Dispose();
MainModelBase?.RunShutdowScript();
Extensions?.NotifiyOnApplicationStopped();
Dialogs.ActivateGlobalProgress(_ =>
{
try
{
if (GlobalTaskHandler.CancelAndWait(Common.Timer.SecondsToMilliseconds(5)) == false)
{
logger.Warn("Global task cancelation failed in time.");
}
GamesEditor?.Dispose();
Controllers?.Dispose();
Extensions?.Dispose();
}
catch (Exception exc) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(exc, "Failed to dispose Playnite objects.");
}
}, new GlobalProgressOptions("LOCClosingPlaynite"));
// This must run on main thread
if (releaseCefSharp)
{
CurrentNative.Dispatcher.Invoke(() =>
{
if (CefTools.IsInitialized)
{
CefTools.Shutdown();
}
});
}
Database?.Dispose();
ResourcesReleased = true;
}
private void CheckAddonBlacklist()
{
try
{
var manifests = ExtensionFactory.GetInstalledManifests();
var blackList = ServicesClient.GetAddonBlacklist();
var installedList = manifests.Where(a => blackList.Contains(a.Id)).ToList();
if (installedList.HasItems())
{
Dialogs.ShowMessage(ResourceProvider.GetString(LOC.WarningBlacklistedExtensions).Format(
string.Join(Environment.NewLine, installedList.Select(a => a.Name))),
"", MessageBoxButton.OK, MessageBoxImage.Warning);
}
}
catch (Exception exc)
{
logger.Warn(exc, "Failed to process addon blacklist check.");
}
}
private void CheckForUpdates(bool checkProgram, bool checkAddons)
{
if (checkProgram)
{
try
{
var showNotification = false;
var updater = new Updater(this);
if (updater.IsUpdateAvailable)
{
if (AppSettings.UpdateNotificationOnPatchesOnly)
{
showNotification = Updater.CurrentVersion.Major == updater.GetLatestVersion().Major;
}
else
{
showNotification = true;
}
}
if (showNotification)
{
var updateTitle = ResourceProvider.GetString("LOCUpdaterWindowTitle");
var updateBody = ResourceProvider.GetString("LOCUpdateIsAvailableNotificationBody");
if (!Current.IsActive)
{
ShowWindowsNotification(updateTitle, updateBody, () =>
{
Restore();
new UpdateViewModel(
updater,
new UpdateWindowFactory(),
new ResourceProvider(),
Dialogs,
Mode).OpenView();
});
}
MainModelBase.UpdatesAvailable = true;
}
}
catch (Exception exc)
{
logger.Warn(exc, "Failed to process program update.");
}
AppSettings.LastProgramUpdateCheck = DateTimes.Now;
}
if (checkAddons)
{
try
{
var updates = Addons.CheckAddonUpdates(ServicesClient);
if (updates.HasItems())
{
Notifications.Add(MainModelBase.GetAddonUpdatesFoundMessage(updates));
}
}
catch (Exception exc)
{
logger.Warn(exc, "Failed to process addon update check.");
}
AppSettings.LastAddonUpdateCheck = DateTimes.Now;
}
}
private void UpdateCheckerCallback(object state)
{
CheckForUpdates(AppSettings.ShouldCheckProgramUpdatePeriodic(), AppSettings.ShouldCheckAddonUpdatePeriodic());
CheckAddonBlacklist();
}
public async Task StartUpdateCheckerAsync()
{
if (PlayniteEnvironment.InOfflineMode)
{
return;
}
await Task.Delay(Common.Timer.SecondsToMilliseconds(5));
if (GlobalTaskHandler.IsActive)
{
await GlobalTaskHandler.ProgressTask;
}
await Task.Run(() =>
{
CheckForUpdates(AppSettings.ShouldCheckProgramUpdateStartup(), AppSettings.ShouldCheckAddonUpdateStartup());
CheckAddonBlacklist();
});
updateCheckTimer = new System.Threading.Timer(
UpdateCheckerCallback,
null,
Common.Timer.HoursToMilliseconds(4),
Common.Timer.HoursToMilliseconds(4));
}
public bool MigrateDatabase()
{
if (GameDatabase.GetMigrationRequired(AppSettings.DatabasePath))
{
var migrationProgress = new ProgressViewViewModel(
new ProgressWindowFactory(),
new GlobalProgressOptions(LOC.DBUpgradeProgress));
if (migrationProgress.ActivateProgress(
_ => GameDatabase.MigrateNewDatabaseFormat(GameDatabase.GetFullDbPath(AppSettings.DatabasePath))).Result != true)
{
logger.Error(migrationProgress.FailException, "Failed to migrate database to new version.");
var message = ResourceProvider.GetString("LOCDBUpgradeFail");
if (migrationProgress.FailException is NoDiskSpaceException exc)
{
message = string.Format(ResourceProvider.GetString("LOCDBUpgradeEmptySpaceFail"), Units.BytesToMegaBytes(exc.RequiredSpace));
}
Dialogs.ShowErrorMessage(message, "");
return false;
}
}
return true;
}
public void UpdateScreenInformation(Controls.WindowBase window)
{
try
{
DpiScale = VisualTreeHelper.GetDpi(window);
CurrentScreen = window.GetScreen();
}
catch (Exception e) when (!PlayniteEnvironment.ThrowAllErrors)
{
DpiScale = new DpiScale(1, 1);
CurrentScreen = Computer.GetPrimaryScreen();
logger.Error(e, $"Failed to get window information for main {Mode} window.");
}
}
public void ShowAddonPerfNotice()
{
if (AppSettings.AddonsPerfNoticeShown)
{
return;
}
Dialogs.ShowMessage(LOC.AddonPerfNotice, "", MessageBoxButton.OK, MessageBoxImage.Warning);
AppSettings.AddonsPerfNoticeShown = true;
AppSettings.SaveSettings();
}
public void InstallOnlineAddon(string addonId)
{
try
{
var addon = ServicesClient.GetAddon(addonId);
var package = addon.InstallerManifest.GetLatestCompatiblePackage();
if (package == null)
{
Dialogs.ShowErrorMessage(LOC.AddonErrorNotCompatible, "");
return;
}
var message = string.Format(
ResourceProvider.GetString(addon.IsTheme ? LOC.ThemeInstallPrompt : LOC.ExtensionInstallPrompt),
addon.Name, addon.Author, package.Version);
BaseExtensionManifest existing = null;
if (addon.IsTheme)
{
existing = ThemeManager.GetAvailableThemes().FirstOrDefault(a => a.Id == addon.AddonId);
}
else
{
existing = ExtensionFactory.GetInstalledManifests().FirstOrDefault(a => a.Id == addon.AddonId);
}
if (existing != null)
{
message = string.Format(
ResourceProvider.GetString(addon.IsTheme ? LOC.ThemeUpdatePrompt : LOC.ExtensionUpdatePrompt),
addon.Name, existing.Version, package.Version);
}
if (Dialogs.ShowMessage(message, LOC.GeneralExtensionInstallTitle, MessageBoxButton.YesNo) != MessageBoxResult.Yes)
{
return;
}
var licenseRes = addon.CheckAddonLicense();
if (licenseRes == null)
{
Dialogs.ShowErrorMessage(LOC.AddonErrorDownloadFailed, string.Empty);
return;
}
if (licenseRes == false)
{
return;
}
ShowAddonPerfNotice();
var locaPath = addon.GetTargetDownloadPath();
FileSystem.DeleteFile(locaPath);
var res = Dialogs.ActivateGlobalProgress((_) =>
{
if (package.PackageUrl.IsHttpUrl())
{
FileSystem.PrepareSaveFile(locaPath);
HttpDownloader.DownloadFile(package.PackageUrl, locaPath);
}
else
{
File.Copy(package.PackageUrl, locaPath);
}
},
new GlobalProgressOptions(LOC.DownloadingLabel, false));
if (res.Error != null)
{
logger.Error(res.Error, $"Failed to download addon {package.PackageUrl}");
Dialogs.ShowErrorMessage(LOC.AddonErrorDownloadFailed, string.Empty);
return;
}
ExtensionInstaller.QueuePackageInstall(locaPath);
if (Dialogs.ShowMessage(LOC.ExtInstallationRestartNotif, LOC.SettingsRestartTitle,
MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
Restart(new CmdLineOptions { SkipLibUpdate = true });
};
}
catch (Exception e) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(e, $"Failed to install addon from uri {addonId}");
}
}
public void InstallThemeFile(string themeFile)
{
try
{
ExtensionInstaller.VerifyThemePackage(themeFile);
var desc = ExtensionInstaller.GetPackedThemeManifest(themeFile);
desc.VerifyManifest();
if (new Version(desc.ThemeApiVersion).Major != ThemeManager.GetApiVersion(desc.Mode).Major)
{
throw new Exception(ResourceProvider.GetString("LOCGeneralExtensionInstallApiVersionFails"));
}
var message = string.Format(ResourceProvider.GetString("LOCThemeInstallPrompt"),
desc.Name, desc.Author, desc.Version);
var existing = ThemeManager.GetAvailableThemes(desc.Mode).FirstOrDefault(a => a.Id == desc.Id);
if (existing != null)
{
message = string.Format(ResourceProvider.GetString("LOCThemeUpdatePrompt"),
desc.Name, existing.Version, desc.Version);
}
if (Dialogs.ShowMessage(
message,
ResourceProvider.GetString("LOCGeneralExtensionInstallTitle"),
MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
ShowAddonPerfNotice();
ExtensionInstaller.QueuePackageInstall(themeFile);
if (Dialogs.ShowMessage(
ResourceProvider.GetString("LOCExtInstallationRestartNotif"),
ResourceProvider.GetString("LOCSettingsRestartTitle"),
MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
Restart(new CmdLineOptions()
{
SkipLibUpdate = true,
});
};
}
}
catch (Exception e) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(e, "Failed to install theme.");
Dialogs.ShowErrorMessage(
string.Format(ResourceProvider.GetString("LOCThemeInstallFail"), e.Message), "");
}
}
public void InstallExtensionFile(string extensionFile)
{
try
{
ExtensionInstaller.VerifyExtensionPackage(extensionFile);
var desc = ExtensionInstaller.GetPackedExtensionManifest(extensionFile);
desc.VerifyManifest();
var message = string.Format(ResourceProvider.GetString("LOCExtensionInstallPrompt"),
desc.Name, desc.Author, desc.Version);
var existing = ExtensionFactory.GetInstalledManifests().FirstOrDefault(a => a.Id == desc.Id);
if (existing != null)
{
message = string.Format(ResourceProvider.GetString("LOCExtensionUpdatePrompt"),
desc.Name, existing.Version, desc.Version);
}
if (Dialogs.ShowMessage(
message,
ResourceProvider.GetString("LOCGeneralExtensionInstallTitle"),
MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
ShowAddonPerfNotice();
ExtensionInstaller.QueuePackageInstall(extensionFile);
if (Dialogs.ShowMessage(
ResourceProvider.GetString("LOCExtInstallationRestartNotif"),
ResourceProvider.GetString("LOCSettingsRestartTitle"),
MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
Restart(new CmdLineOptions()
{
SkipLibUpdate = true,
});
};
}
}
catch (Exception e) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(e, "Failed to install extension.");
Dialogs.ShowErrorMessage(
string.Format(ResourceProvider.GetString("LOCExtensionInstallFail"), e.Message), "");
}
}
public void OnExtensionsLoaded()
{
ExtensionsLoaded?.Invoke(this, EventArgs.Empty);
OnPropertyChanged(nameof(this.ExtensionsStatusBinder));
}
private void WaitForOtherInstacesToExit(bool throwOnTimetout)
{
if (Process.GetProcesses().Where(a => IsProcessPlayniteProcess(a)).Count() > 1)
{
logger.Info("Multiple Playnite instances detected, waiting for them to close.");
for (int i = 0; i < 10; i++)
{
Thread.Sleep(500);
if (Process.GetProcesses().Where(a => IsProcessPlayniteProcess(a)).Count() == 1)
{
break;
}
else if (i == 9)
{
if (throwOnTimetout)
{
throw new Exception("Another Playnite instance didn't shutdown in time.");
}
else
{
logger.Warn("Another Playnite instance didn't shutdown in time.");
}
}
}
}
}
public static bool IsProcessPlayniteProcess(Process process)
{
return process.ProcessName.StartsWith("Playnite.DesktopApp") || process.ProcessName.StartsWith("Playnite.FullscreenApp");
}
public abstract PlayniteAPI GetApiInstance(ExtensionManifest pluginOwner);
public abstract PlayniteAPI GetApiInstance();
}
}
================================================
FILE: source/Playnite/App/UpdateManifest.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Playnite
{
public class UpdateManifest : ObservableObject
{
public const string ServerManifestFileName = "update.json";
private Version version;
private Version sdkVersion;
private Version fullscreenThemeVersion;
private Version desktopThemeVersion;
private string checksum;
private List<string> packageUrls;
private List<Version> versionHistory;
public Version Version { get => version; set => SetValue(ref version, value); }
public Version SdkVersion { get => sdkVersion; set => SetValue(ref sdkVersion, value); }
public Version FullscreenThemeVersion { get => fullscreenThemeVersion; set => SetValue(ref fullscreenThemeVersion, value); }
public Version DesktopThemeVersion { get => desktopThemeVersion; set => SetValue(ref desktopThemeVersion, value); }
public string Checksum { get => checksum; set => SetValue(ref checksum, value); }
public List<string> PackageUrls { get => packageUrls; set => SetValue(ref packageUrls, value); }
public List<Version> VersionHistory { get => versionHistory; set => SetValue(ref versionHistory, value); }
}
public class ReleaseNoteData
{
public Version Version
{
get; set;
}
public string Note
{
get; set;
}
}
}
================================================
FILE: source/Playnite/App/Updater.cs
================================================
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Windows;
using Flurl;
using System.Net;
using Playnite.Common;
using Playnite.Common.Web;
using Playnite.Settings;
using Playnite.SDK;
namespace Playnite
{
public class Updater
{
private static string updateBranch
{
get
{
return ConfigurationManager.AppSettings["UpdateBranch"];
}
}
private static ILogger logger = LogManager.GetLogger();
private UpdateManifest updateManifest;
private IPlayniteApplication playniteApp;
private IDownloader downloader;
private string updaterPath
{
get
{
return Path.Combine(PlaynitePaths.TempPath, "update.exe");
}
}
public bool IsUpdateAvailable
{
get
{
var latest = GetLatestVersion();
var current = CurrentVersion;
if (latest > current)
{
// Windows 7 and 8 and 32bit systems should no longer update, except for patches
if (Computer.WindowsVersion == WindowsVersion.Win7 || Computer.WindowsVersion == WindowsVersion.Win8 || !Environment.Is64BitOperatingSystem)
{
return latest.Major == current.Major;
}
else
{
return true;
}
}
return false;
}
}
private static Version currentVersion;
public static Version CurrentVersion
{
get
{
if (currentVersion == null)
{
currentVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
}
return currentVersion;
}
}
public Updater(IPlayniteApplication app) : this(app, new Downloader())
{
}
public Updater(IPlayniteApplication app, IDownloader webDownloader)
{
playniteApp = app;
downloader = webDownloader;
}
private string GetUpdateDataRootUrl(string configKey)
{
return Url.Combine(ConfigurationManager.AppSettings[configKey], updateBranch, $"{CurrentVersion.Major}.{CurrentVersion.Minor}");
}
public List<ReleaseNoteData> GetReleaseNotes()
{
var notes = new List<ReleaseNoteData>();
if (updateManifest == null)
{
DownloadManifest();
}
foreach (var version in updateManifest.VersionHistory)
{
if (version.CompareTo(CurrentVersion) > 0)
{
var noteUrls = new List<string>
{
Url.Combine(ConfigurationManager.AppSettings["UpdateUrl"], updateBranch, $"{version.Major}.{version.Minor}.html"),
Url.Combine(ConfigurationManager.AppSettings["UpdateUrl2"], updateBranch, $"{version.Major}.{version.Minor}.html")
};
var note = downloader.DownloadString(noteUrls);
notes.Add(new ReleaseNoteData()
{
Version = version,
Note = note
});
}
}
return notes;
}
private bool VerifyUpdateFile(string checksum, string path)
{
var newMD5 = FileSystem.GetMD5(path);
if (newMD5 != checksum)
{
logger.Error($"Checksum of downloaded file doesn't match: {newMD5} vs {checksum}");
return false;
}
return true;
}
public async Task DownloadUpdate(Action<DownloadProgressChangedEventArgs> progressHandler)
{
if (updateManifest == null)
{
DownloadManifest();
}
if (File.Exists(updaterPath))
{
if (VerifyUpdateFile(updateManifest.Checksum, updaterPath))
{
logger.Info("Update already downloaded skipping download.");
return;
}
}
try
{
await downloader.DownloadFileAsync(updateManifest.PackageUrls, updaterPath, progressHandler);
}
catch (Exception e)
{
logger.Error(e, "Failed to download update file.");
throw new Exception("Failed to download update file.");
}
if (!VerifyUpdateFile(updateManifest.Checksum, updaterPath))
{
throw new Exception($"Update file integrity check failed.");
}
}
public void InstallUpdate(ApplicationMode mode)
{
var portable = PlayniteSettings.IsPortable ? "/PORTABLE" : "";
var fullscreen = mode == ApplicationMode.Fullscreen ? "/FULLSCREEN" : "";
logger.Info("Installing new update to {0}, in {1} mode".Format(PlaynitePaths.ProgramPath, portable));
playniteApp.QuitAndStart(
updaterPath,
@"/SILENT /NOCANCEL /DIR=""{0}"" /UPDATE {1} {2}".Format(PlaynitePaths.ProgramPath, portable, fullscreen),
!FileSystem.CanWriteToFolder(PlaynitePaths.ProgramPath));
}
public UpdateManifest DownloadManifest()
{
var dataString = string.Empty;
try
{
dataString = GetUpdateManifestData(GetUpdateDataRootUrl("UpdateUrl"));
}
catch (Exception e)
{
logger.Warn(e, "Failed to download update manifest from main URL");
}
try
{
if (string.IsNullOrEmpty(dataString))
{
dataString = GetUpdateManifestData(GetUpdateDataRootUrl("UpdateUrl2"));
}
}
catch (Exception e)
{
logger.Warn(e, "Failed to download update manifest from secondary URL");
}
if (string.IsNullOrEmpty(dataString))
{
throw new Exception("Failed to download update manifest.");
}
updateManifest = JsonConvert.DeserializeObject<UpdateManifest>(dataString);
return updateManifest;
}
public Version GetLatestVersion()
{
if (updateManifest == null)
{
DownloadManifest();
}
return updateManifest.Version;
}
private string GetUpdateManifestData(string url)
{
return downloader.DownloadString(Url.Combine(url, UpdateManifest.ServerManifestFileName));
}
}
}
================================================
FILE: source/Playnite/App.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v13.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
</startup>
<runtime>
<loadFromRemoteSources enabled="true" />
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.4.0" newVersion="4.1.4.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
================================================
FILE: source/Playnite/Archive.cs
================================================
using Playnite.Common;
using SharpCompress.Archives;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Playnite
{
public static class Archive
{
public static List<string> GetArchiveFiles(string archivePath)
{
using (var archive = ArchiveFactory.Open(archivePath))
{
return archive.Entries.Where(a => !a.IsDirectory).Select(a => a.Key).ToList();
}
}
public static Tuple<Stream, IDisposable> GetEntryStream(string archivePath, string entryName)
{
var archive = ArchiveFactory.Open(archivePath);
var entry = archive.Entries.FirstOrDefault(a => a.Key == entryName);
if (entry == null)
{
archive.Dispose();
return null;
}
return new Tuple<Stream, IDisposable>(entry.OpenEntryStream(), archive);
}
public static void CreateEntryFromDirectory(this ZipArchive archive, string directory, string entryName, CancellationToken cancelToken)
{
if (cancelToken.IsCancellationRequested)
{
return;
}
foreach (var file in Directory.GetFiles(directory))
{
if (cancelToken.IsCancellationRequested)
{
return;
}
archive.CreateEntryFromFile(Paths.FixPathLength(file), Path.Combine(entryName, Path.GetFileName(file)));
}
if (cancelToken.IsCancellationRequested)
{
return;
}
foreach (var dir in Directory.GetDirectories(directory))
{
if (cancelToken.IsCancellationRequested)
{
return;
}
CreateEntryFromDirectory(archive, dir, Path.Combine(entryName, Path.GetFileName(dir)), cancelToken);
}
}
}
}
================================================
FILE: source/Playnite/Audio.cs
================================================
using Playnite.SDK;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static SDL2.SDL;
using static SDL2.SDL_mixer;
namespace Playnite.Audio
{
public class AudioEngine : IDisposable
{
private static readonly ILogger logger = LogManager.GetLogger();
public static readonly string[] SupportedFileTypes = new string[] { "wav", "ogg", "mp3", "flac" };
public static readonly string SupportedFileTypesRegex = string.Join("|", SupportedFileTypes);
public bool AudioClosed { get; private set; } = false;
public bool AudioInitialized { get; private set; } = false;
public DateTime LastAudioEvent { get; private set; } = DateTime.Now;
public AudioEngine()
{
OpenAudio();
}
private void OpenAudio()
{
if (Mix_OpenAudio(44_100, MIX_DEFAULT_FORMAT, 2, 2048) < 0)
{
logger.Error("Failed to open SDL2 audio device:");
logger.Error(Mix_GetError());
AudioInitialized = false;
AudioClosed = true;
return;
}
AudioInitialized = true;
AudioClosed = false;
}
public static int GetVolume(float floatVolume)
{
floatVolume *= floatVolume;
// lerp settings float 0 -> 1 range to SDL's 0 -> 128 range
var res = (int)Math.Ceiling((0f * (1f - floatVolume)) + (128f * floatVolume));
return res;
}
public void PlaySound(IntPtr sound)
{
if (sound == IntPtr.Zero)
return;
if (!AudioInitialized)
return;
if (AudioClosed)
OpenAudio();
LastAudioEvent = DateTime.Now;
try
{
Mix_PlayChannel(-1, sound, 0);
}
catch (Exception e) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(e, "Failed to play SDL sound.");
}
}
public void SetSoundVolume(IntPtr sounds, float volume)
{
if (!AudioInitialized)
return;
Mix_VolumeChunk(sounds, GetVolume(volume));
}
public IntPtr LoadSound(string path)
{
if (!AudioInitialized)
return IntPtr.Zero;
return Mix_LoadWAV(path);
}
public void SetMusicVolume(float volume)
{
if (!AudioInitialized)
return;
Mix_VolumeMusic(GetVolume(volume));
}
public IntPtr LoadMusic(string path)
{
if (!AudioInitialized)
return IntPtr.Zero;
return Mix_LoadMUS(path);
}
public void PlayMusic(IntPtr music)
{
if (music == IntPtr.Zero)
return;
if (!AudioInitialized)
return;
if (AudioClosed)
OpenAudio();
LastAudioEvent = DateTime.Now;
try
{
Mix_PlayMusic(music, -1);
}
catch (Exception e) when (!PlayniteEnvironment.ThrowAllErrors)
{
logger.Error(e, "Failed to play SDL music.");
}
}
public void PauseMusic()
{
if (!AudioInitialized)
return;
LastAudioEvent = DateTime.Now;
Mix_PauseMusic();
}
public void StopMusic()
{
if (!AudioInitialized)
return;
LastAudioEvent = DateTime.Now;
Mix_HaltMusic();
}
public void ResumeMusic()
{
if (!AudioInitialized)
return;
if (AudioClosed)
OpenAudio();
LastAudioEvent = DateTime.Now;
Mix_ResumeMusic();
}
public bool GetIsMusicPlaying()
{
if (!AudioInitialized)
return false;
return Mix_PlayingMusic() == 1;
}
public bool GetIsMusicPaused()
{
if (!AudioInitialized)
return false;
return Mix_PausedMusic() == 1;
}
public void CloseAudio()
{
if (AudioClosed || !AudioInitialized)
return;
Mix_CloseAudio();
AudioClosed = true;
}
public void DisposeSound(IntPtr sound)
{
Mix_FreeChunk(sound);
}
public void DisposeMusic(IntPtr music)
{
Mix_FreeMusic(music);
}
public void Dispose()
{
AudioInitialized = false;
AudioClosed = true;
Mix_Quit();
}
}
}
================================================
FILE: source/Playnite/Backup.cs
================================================
using Playnite.Common;
using Playnite.Database;
using Playnite.SDK;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
namespace Playnite
{
public enum BackupDataItem
{
[Description(LOC.BackupOptionSettings)]
Settings = 0,
[Description(LOC.BackupOptionLibrary)]
Library = 1,
[Description(LOC.BackupOptionGameMedia)]
LibraryFiles = 2,
[Description(LOC.BackupOptionExtensions)]
Extensions = 3,
[Description(LOC.BackupOptionThemes)]
Themes = 4,
[Description(LOC.BackupOptionExtensionsData)]
ExtensionsData = 5
}
public class BackupOptions
{
public string DataDir { get; set; }
public string LibraryDir { get; set; }
public string OutputFile { get; set; }
public string OutputDir { get; set; }
public List<BackupDataItem> BackupItems { get; set; }
public bool ClosedWhenDone { get; set; }
public bool CancelIfGameRunning { get; set; }
public int RotatingBackups { get; set; } = 0;
}
public class BackupRestoreOptions
{
public string BackupFile { get; set; }
public string DataDir { get; set; }
public string LibraryDir { get; set; }
public List<BackupDataItem> RestoreItems { get; set; }
public bool ClosedWhenDone { get; set; }
public bool CancelIfGameRunning { get; set; }
public string RestoreLibrarySettingsPath { get; set; }
}
public class Backup
{
private const string backupDateFormat = "yyyy-MM-dd-HH-mm-ss";
private const string autoBackupFilePattern = autoBackupFileName + @"\-\d{4}\-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}";
private const string autoBackupFileName = "PlayniteBackup";
private const string libraryEntryRoot = "library";
private const string libraryFilesEntryRoot = "libraryfiles";
private const string extensionsDataEntryRoot = "extensiondata";
private const string extensionsEntryRoot = "extension";
private const string themesEntryRoot = "themes";
private static readonly string[] configFilesNames = new string[] { PlaynitePaths.ConfigFileName, PlaynitePaths.FullscreenConfigFileName };
public static void BackupData(string optionsFile, CancellationToken cancelToken)
{
BackupData(Serialization.FromJsonFile<BackupOptions>(optionsFile), cancelToken);
}
public static void BackupData(BackupOptions options, CancellationToken cancelToken)
{
if (options.OutputDir.IsNullOrEmpty() && options.OutputFile.IsNullOrEmpty())
{
throw new Exception("Backup output path not specified!");
}
if (!options.OutputDir.IsNullOrEmpty())
{
options.OutputFile = Path.Combine(options.OutputDir, GetAutoBackupFileName());
}
if (options.BackupItems == null)
{
options.BackupItems = new List<BackupDataItem>();
}
FileSystem.DeleteFile(options.OutputFile);
using (var zipFile = new FileStream(options.OutputFile, FileMode.Create))
using (var archive = new ZipArchive(zipFile, ZipArchiveMode.Create))
{
// Settings
foreach (var config in configFilesNames)
{
var fullPath = Path.Combine(options.DataDir, config);
if (File.Exists(fullPath))
{
archive.CreateEntryFromFile(fullPath, config);
}
};
if (Directory.Exists(options.LibraryDir))
{
// Library
foreach (var libFile in Directory.GetFiles(Path.Combine(options.LibraryDir)))
{
if (cancelToken.IsCancellationRequested)
{
goto archiveDone;
}
archive.CreateEntryFromFile(libFile, Path.Combine(libraryEntryRoot, Path.GetFileName(libFile)));
}
if (cancelToken.IsCancellationRequested)
{
goto archiveDone;
}
// Library files
var libFilesDir = Path.Combine(options.LibraryDir, GameDatabase.filesDirName);
if (options.BackupItems.Contains(BackupDataItem.LibraryFiles) && Directory.Exists(libFilesDir))
{
archive.CreateEntryFromDirectory(libFilesDir, libraryFilesEntryRoot, cancelToken);
}
if (cancelToken.IsCancellationRequested)
{
goto archiveDone;
}
}
// Extensions
var addonsDir = Path.Combine(options.DataDir, PlaynitePaths.ExtensionsDirName);
if (options.BackupItems.Contains(BackupDataItem.Extensions) && Directory.Exists(addonsDir))
{
archive.CreateEntryFromDirectory(addonsDir, extensionsEntryRoot, cancelToken);
}
if (cancelToken.IsCancellationRequested)
{
goto archiveDone;
}
// Extensions data
var extDataDir = Path.Combine(options.DataDir, PlaynitePaths.ExtensionsDataDirName);
if (options.BackupItems.Contains(BackupDataItem.ExtensionsData) && Directory.Exists(extDataDir))
{
archive.CreateEntryFromDirectory(extDataDir, extensionsDataEntryRoot, cancelToken);
}
if (cancelToken.IsCancellationRequested)
{
goto archiveDone;
}
// Themes
var themesDir = Path.Combine(options.DataDir, PlaynitePaths.ThemesDirName);
if (options.BackupItems.Contains(BackupDataItem.Themes) && Directory.Exists(themesDir))
{
void packThemes(ApplicationMode mode)
{
var themeRootDir = ThemeManager.GetThemeRootDir(mode);
var modeThemesDir = Path.Combine(themesDir, themeRootDir);
if (Directory.Exists(modeThemesDir))
{
foreach (var themeDir in Directory.GetDirectories(modeThemesDir))
{
var themeDirName = Path.GetFileName(themeDir);
// Never backup default themes
if (themeDirName == ThemeManager.DefaultThemeDirName)
{
continue;
}
archive.CreateEntryFromDirectory(themeDir, Path.Combine(themesEntryRoot, themeRootDir, themeDirName), cancelToken);
}
}
}
packThemes(ApplicationMode.Desktop);
packThemes(ApplicationMode.Fullscreen);
}
}
archiveDone:
if (cancelToken.IsCancellationRequested)
{
FileSystem.DeleteFile(options.OutputFile);
}
else
{
var backupDir = Path.GetDirectoryName(options.OutputFile);
var files = Directory.GetFiles(backupDir, $"{autoBackupFileName}*.zip").Where(a => Regex.IsMatch(a, autoBackupFilePattern)).OrderBy(a => a).ToArray();
if (files.Length > options.RotatingBackups + 1)
{
for (int i = 0; i < files.Length - (options.RotatingBackups + 1); i++)
{
File.Delete(files[i]);
}
}
}
}
public static void RestoreBackup(string optionsFile)
{
RestoreBackup(Serialization.FromJsonFile<BackupRestoreOptions>(optionsFile));
}
public static void RestoreBackup(BackupRestoreOptions options)
{
if (options.RestoreItems == null)
{
return;
}
FileSystem.CreateDirectory(options.DataDir);
FileSystem.CreateDirectory(options.LibraryDir);
using (var zipFile = new FileStream(options.BackupFile, FileMode.Open))
using (var archive = new ZipArchive(zipFile, ZipArchiveMode.Read))
{
// Settings
if (options.RestoreItems.Contains(BackupDataItem.Settings))
{
foreach (var config in configFilesNames)
{
var configEntry = archive.GetEntry(config);
if (configEntry != null)
{
gitextract__t5v_oi7/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ ├── custom.md
│ │ └── feature_request.yml
│ └── pull_request_template.md
├── .gitignore
├── LICENSE.md
├── README.md
├── appveyor.yml
├── build/
│ ├── ExtensionsRefIgnoreList.txt
│ ├── PlayniteSDK.nuspec
│ ├── VerifyLanguageFiles.ps1
│ ├── applyEnglishProofing.ps1
│ ├── build.ps1
│ ├── build.xml
│ ├── buildLocConstants.ps1
│ ├── buildSdkNuget.ps1
│ ├── common.ps1
│ ├── generateRetroArchProfile.ps1
│ └── updateLocalizations.ps1
├── crowdin.yml
├── media/
│ └── SplashScreen.xcf
├── references/
│ └── Windows.winmd
├── source/
│ ├── .editorconfig
│ ├── Playnite/
│ │ ├── API/
│ │ │ ├── AddonsAPI.cs
│ │ │ ├── DatabaseAPI.cs
│ │ │ ├── DesignData/
│ │ │ │ ├── DesignNotificationsAPI.cs
│ │ │ │ └── DesignPlayniteAPI.cs
│ │ │ ├── NotificationsAPI.cs
│ │ │ ├── PlayniteAPI.cs
│ │ │ ├── PlayniteInfoAPI.cs
│ │ │ ├── PlaynitePathsAPI.cs
│ │ │ └── PlayniteSettingsAPI.cs
│ │ ├── Addons/
│ │ │ └── Addons.cs
│ │ ├── App/
│ │ │ ├── CmdLineOptions.cs
│ │ │ ├── IPlayniteApplication.cs
│ │ │ ├── PlayniteApplication.cs
│ │ │ ├── UpdateManifest.cs
│ │ │ └── Updater.cs
│ │ ├── App.config
│ │ ├── Archive.cs
│ │ ├── Audio.cs
│ │ ├── Backup.cs
│ │ ├── Behaviors/
│ │ │ ├── AnimatedVisibility.cs
│ │ │ ├── ExpanderBehaviors.cs
│ │ │ ├── FocusBahaviors.cs
│ │ │ ├── LeftClickContextMenuBehavior.cs
│ │ │ ├── MediaElementBehaviors.cs
│ │ │ ├── ScrollToSelectedBehavior.cs
│ │ │ ├── ScrollViewerBehaviours.cs
│ │ │ └── SelectorBehaviors.cs
│ │ ├── BindingProxy.cs
│ │ ├── CefTools.cs
│ │ ├── CmdlineCommands.cs
│ │ ├── Commands/
│ │ │ ├── GenericCommands.cs
│ │ │ └── GlobalCommands.cs
│ │ ├── Common/
│ │ │ ├── BindingTools.cs
│ │ │ ├── Computer.cs
│ │ │ ├── Constants.cs
│ │ │ ├── CueSheet.cs
│ │ │ ├── DesignerTools.cs
│ │ │ ├── Exceptions.cs
│ │ │ ├── Explorer.cs
│ │ │ ├── Extensions/
│ │ │ │ ├── BitmapExtensions.cs
│ │ │ │ ├── BitmapIconExtensions.cs
│ │ │ │ ├── CloneObject.cs
│ │ │ │ ├── Dictionary.cs
│ │ │ │ ├── Enums.cs
│ │ │ │ ├── IconExtension.cs
│ │ │ │ ├── ItemsControlExtensions.cs
│ │ │ │ ├── KeyExtensions.cs
│ │ │ │ ├── LongExtensions.cs
│ │ │ │ ├── NetExtensions.cs
│ │ │ │ ├── ObjectExtensions.cs
│ │ │ │ ├── ProcessExtensions.cs
│ │ │ │ ├── StringExtensions.cs
│ │ │ │ └── WindowExtensions.cs
│ │ │ ├── FileSystem.cs
│ │ │ ├── FileSystem_Checksum.cs
│ │ │ ├── GdiFile.cs
│ │ │ ├── GlobalRandom.cs
│ │ │ ├── Images.cs
│ │ │ ├── IniParser.cs
│ │ │ ├── ItemsSource.cs
│ │ │ ├── M3U.cs
│ │ │ ├── MarkupConverter.cs
│ │ │ ├── Media/
│ │ │ │ └── Icons/
│ │ │ │ ├── IconExtractor.cs
│ │ │ │ └── IconUtil.cs
│ │ │ ├── MemoryCache.cs
│ │ │ ├── NLogLogProvider.cs
│ │ │ ├── Network.cs
│ │ │ ├── Paths.cs
│ │ │ ├── ProcessMonitor.cs
│ │ │ ├── ProcessStarter.cs
│ │ │ ├── Programs.cs
│ │ │ ├── Programs2.cs
│ │ │ ├── Resources.cs
│ │ │ ├── Roman.cs
│ │ │ ├── SafeFileEnumerator.cs
│ │ │ ├── Serialization.cs
│ │ │ ├── SigningTools.cs
│ │ │ ├── Sizes.cs
│ │ │ ├── Sqlite.cs
│ │ │ ├── SystemDialogs.cs
│ │ │ ├── TGASharpLib.cs
│ │ │ ├── TempDirectory.cs
│ │ │ ├── Timer.cs
│ │ │ ├── Units.cs
│ │ │ ├── Web/
│ │ │ │ ├── Downloader.cs
│ │ │ │ └── HttpDownloader.cs
│ │ │ ├── Xaml.cs
│ │ │ └── Xml.cs
│ │ ├── Common.config
│ │ ├── ControlTemplateTools.cs
│ │ ├── Controllers/
│ │ │ ├── GameControllerFactory.cs
│ │ │ └── GenericGameController.cs
│ │ ├── Controls/
│ │ │ ├── ExtendedDataGrid.cs
│ │ │ ├── ExtendedListBox.cs
│ │ │ ├── ExtendedListView.cs
│ │ │ ├── FadeImage.xaml
│ │ │ ├── FadeImage.xaml.cs
│ │ │ ├── GridEx.cs
│ │ │ ├── HotKeyBox.cs
│ │ │ ├── HtmlTextView.cs
│ │ │ └── WindowBase.cs
│ │ ├── Converters/
│ │ │ ├── BidirectionalEnumAndNumberConverter.cs
│ │ │ ├── BoolToAutoWidthConverter.cs
│ │ │ ├── BoolToYesNoConverter.cs
│ │ │ ├── BooleanToHiddenConverter.cs
│ │ │ ├── BooleanToVisibilityConverter.cs
│ │ │ ├── CoversZoomToPercentageConverter.cs
│ │ │ ├── DateTimeToLastPlayedConverter.cs
│ │ │ ├── DockToStringConverter.cs
│ │ │ ├── EnumToBooleanConverter.cs
│ │ │ ├── EnumToVisibilityConverter.cs
│ │ │ ├── GenericTypeConverter.cs
│ │ │ ├── ICollectionNullOrEmptyToVisibilityConverter.cs
│ │ │ ├── IconToImageSourceConverter.cs
│ │ │ ├── ImageStringToImageConverter.cs
│ │ │ ├── IntToVisibilityConverter.cs
│ │ │ ├── InvertableBooleanToVisibilityConverter.cs
│ │ │ ├── InvertedBoolenConverter.cs
│ │ │ ├── ListToStringConverter.cs
│ │ │ ├── NegateConverter.cs
│ │ │ ├── NotificationIconConverter.cs
│ │ │ ├── NullToBoolConverter.cs
│ │ │ ├── NullToDependencyPropertyUnsetConverter.cs
│ │ │ ├── NullToVisibilityConverter.cs
│ │ │ ├── NullableDateToStringConverter.cs
│ │ │ ├── NullableUlongBytesSizeToStringConverter.cs
│ │ │ ├── NumericConverters.cs
│ │ │ ├── ObjectEqualityToBoolConverter.cs
│ │ │ ├── ObjectToStringConverter.cs
│ │ │ ├── OpacityBoolConverter.cs
│ │ │ ├── PlayTimeToStringConverter.cs
│ │ │ ├── SortingOrderToStringConverter.cs
│ │ │ ├── StrechToStringConverter.cs
│ │ │ ├── StringNullOrEmptyToBoolConverter.cs
│ │ │ ├── StringNullOrEmptyToVisibilityConverter.cs
│ │ │ ├── StringToUpperCaseConverter.cs
│ │ │ ├── TicksToTimeSpanConverter.cs
│ │ │ ├── ValueConverterGroup.cs
│ │ │ └── WidthToFontSizeConverter.cs
│ │ ├── Database/
│ │ │ ├── Collections/
│ │ │ │ ├── AgeRatingsCollection.cs
│ │ │ │ ├── AppSoftwareCollection.cs
│ │ │ │ ├── CategoriesCollection.cs
│ │ │ │ ├── CompaniesCollection.cs
│ │ │ │ ├── CompletionStatusesCollection.cs
│ │ │ │ ├── EmulatorsCollection.cs
│ │ │ │ ├── FeaturesCollection.cs
│ │ │ │ ├── FilterPresetsCollection.cs
│ │ │ │ ├── GameScannersCollection.cs
│ │ │ │ ├── GamesCollection.cs
│ │ │ │ ├── GamesSourcesCollection.cs
│ │ │ │ ├── GenresCollection.cs
│ │ │ │ ├── ImportExclusionsCollection.cs
│ │ │ │ ├── ItemCollection.cs
│ │ │ │ ├── LiteDBFileReaderV7.cs
│ │ │ │ ├── PlatformsCollection.cs
│ │ │ │ ├── RegionsCollection.cs
│ │ │ │ ├── SeriesCollection.cs
│ │ │ │ └── TagsCollection.cs
│ │ │ ├── DatabaseExplorer.cs
│ │ │ ├── DatabaseFileEvent.cs
│ │ │ ├── DatabaseFilter.cs
│ │ │ ├── DatabaseSettings.cs
│ │ │ ├── DatabaseStats.cs
│ │ │ ├── EventBufferHandler.cs
│ │ │ ├── GameDatabase.cs
│ │ │ ├── GameDatabaseMigration.cs
│ │ │ ├── GameDatabase_Filters.cs
│ │ │ ├── GameFieldComparer.cs
│ │ │ ├── InMemoryGameDatabase.cs
│ │ │ └── OldModels/
│ │ │ ├── NewVer1/
│ │ │ │ ├── OldCompletionStatus.cs
│ │ │ │ ├── OldDatabaseObject.cs
│ │ │ │ ├── OldGame.cs
│ │ │ │ ├── OldGameAction.cs
│ │ │ │ └── OldLink.cs
│ │ │ └── Ver2.cs
│ │ ├── DateTimes.cs
│ │ ├── Diagnostic.cs
│ │ ├── DiagnosticPackageInfo.cs
│ │ ├── DialogsFactory.cs
│ │ ├── DiscordManager.cs
│ │ ├── EasyAntiCheat.cs
│ │ ├── ElementTreeHelper.cs
│ │ ├── Emulation/
│ │ │ ├── Emulators/
│ │ │ │ ├── 4DO/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Altirra/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Atari800/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── BGB/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── BigPEmu/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── BizHawk/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── BlastEm/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Cemu/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Citra/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Cxbx-Reloaded/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── DOSBox/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── DeSmuME/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Dolphin/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── DuckStation/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── FCEUX/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── FS-UAE/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── FlashPlayerProjector/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Flycast/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Fuse/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── GBE+/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Gambatte/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── KegaFusion/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Lime3DS/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── LocaleEmulator/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── M64Py/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Mednafen/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Mesen/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Mesen-S/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── NanoboyAdvance/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Nestopia/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── NullDC/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── PCSX2/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── PCSXR-PGXP/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── PCem/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── PPSSPP/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Project64/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── RPCS3/
│ │ │ │ │ ├── emulator.yaml
│ │ │ │ │ └── importGames.ps1
│ │ │ │ ├── Reicast/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── RetroArch/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── RosaliesMupenGui/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Ruffle/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Ryujinx/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── SameBoy/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── ScummVM/
│ │ │ │ │ ├── emulator.yaml
│ │ │ │ │ └── importGames.ps1
│ │ │ │ ├── Snes9X/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Stella/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── VirtualJaguar/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── VisualBoyAdvance/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── VisualBoyAdvance-M/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Vita3K/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── WinUAE/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── WinVice/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Xemu/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Xenia/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Yabuse/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── Ymir/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── ZSNES/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── ares/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── blueMSX/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── bsnes/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── bsnes-hd/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── bsnes-mt/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── decaf-emu/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── ePSXe/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── gopher64/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── higan/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── jgenesis/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── m64p/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── mGBA/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── melonDS/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── puNES/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── redream/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ ├── shadPS4/
│ │ │ │ │ ├── emulator.yaml
│ │ │ │ │ └── importGames.ps1
│ │ │ │ ├── simple64/
│ │ │ │ │ └── emulator.yaml
│ │ │ │ └── yuzu/
│ │ │ │ └── emulator.yaml
│ │ │ ├── Platforms.yaml
│ │ │ └── Regions.yaml
│ │ ├── Emulators/
│ │ │ ├── DatModels.cs
│ │ │ ├── Emulation.cs
│ │ │ ├── EmulationDatabase.cs
│ │ │ └── Scanner.cs
│ │ ├── Exceptions.cs
│ │ ├── Extensions/
│ │ │ ├── ControlExtensions.cs
│ │ │ ├── GameExtensions.cs
│ │ │ ├── IProvideValueTarget.cs
│ │ │ ├── Markup/
│ │ │ │ ├── Api.cs
│ │ │ │ ├── BindingExtension.cs
│ │ │ │ ├── MainViewModel.cs
│ │ │ │ ├── PluginConverter.cs
│ │ │ │ ├── PluginSettings.cs
│ │ │ │ ├── PluginStatus.cs
│ │ │ │ ├── Settings.cs
│ │ │ │ ├── ThemeFile.cs
│ │ │ │ └── ThemeFileBinding.cs
│ │ │ └── ServiceProvider.cs
│ │ ├── FakePlayniteLibraryPlugin.cs
│ │ ├── GameTools.cs
│ │ ├── GamesCollectionView.cs
│ │ ├── GamesCollectionViewEntry.cs
│ │ ├── GamesEditor.cs
│ │ ├── GlobalTaskHandler.cs
│ │ ├── GoogleImageDownloader.cs
│ │ ├── HdrUtilities.cs
│ │ ├── HotKey.cs
│ │ ├── HttpFileCache.cs
│ │ ├── ImageSourceManager.cs
│ │ ├── Input/
│ │ │ ├── GameController.cs
│ │ │ └── MouseWheelGesture.cs
│ │ ├── ItemSelector.cs
│ │ ├── Localization/
│ │ │ ├── LocSource.xaml
│ │ │ ├── LocalizationKeys.cs
│ │ │ ├── af_ZA.xaml
│ │ │ ├── ar_SA.xaml
│ │ │ ├── bg_BG.xaml
│ │ │ ├── ca_ES.xaml
│ │ │ ├── cs_CZ.xaml
│ │ │ ├── cy_GB.xaml
│ │ │ ├── da_DK.xaml
│ │ │ ├── de_DE.xaml
│ │ │ ├── el_GR.xaml
│ │ │ ├── en_US.xaml
│ │ │ ├── eo_UY.xaml
│ │ │ ├── es_ES.xaml
│ │ │ ├── et_EE.xaml
│ │ │ ├── fa_IR.xaml
│ │ │ ├── fi_FI.xaml
│ │ │ ├── fr_FR.xaml
│ │ │ ├── ga_IE.xaml
│ │ │ ├── gl_ES.xaml
│ │ │ ├── he_IL.xaml
│ │ │ ├── hr_HR.xaml
│ │ │ ├── hu_HU.xaml
│ │ │ ├── id_ID.xaml
│ │ │ ├── it_IT.xaml
│ │ │ ├── ja_JP.xaml
│ │ │ ├── ko_KR.xaml
│ │ │ ├── locstatus.json
│ │ │ ├── lt_LT.xaml
│ │ │ ├── mr_IN.xaml
│ │ │ ├── nl_NL.xaml
│ │ │ ├── no_NO.xaml
│ │ │ ├── pl_PL.xaml
│ │ │ ├── pt_BR.xaml
│ │ │ ├── pt_PT.xaml
│ │ │ ├── ro_RO.xaml
│ │ │ ├── ru_RU.xaml
│ │ │ ├── si_LK.xaml
│ │ │ ├── sk_SK.xaml
│ │ │ ├── sl_SI.xaml
│ │ │ ├── sr_SP.xaml
│ │ │ ├── sv_SE.xaml
│ │ │ ├── tr_TR.xaml
│ │ │ ├── uk_UA.xaml
│ │ │ ├── vi_VN.xaml
│ │ │ ├── zh_CN.xaml
│ │ │ └── zh_TW.xaml
│ │ ├── Localization.cs
│ │ ├── Manifests/
│ │ │ ├── AddonManifestBase.cs
│ │ │ ├── AddonManifests.cs
│ │ │ ├── ExtensionManifest.cs
│ │ │ └── ThemeManifest.cs
│ │ ├── MenuHelpers.cs
│ │ ├── MenuItems.cs
│ │ ├── Metadata/
│ │ │ ├── MetadataDownloader.cs
│ │ │ ├── MetadataDownloaderSettings.cs
│ │ │ └── MetadataFileExtensions.cs
│ │ ├── Native/
│ │ │ ├── Fileapi.cs
│ │ │ ├── Gdi32.cs
│ │ │ ├── Kernel32.cs
│ │ │ ├── Ntdll.cs
│ │ │ ├── Powrprof.cs
│ │ │ ├── Processthreadsapi.cs
│ │ │ ├── Psapi.cs
│ │ │ ├── Shell32.cs
│ │ │ ├── Shlwapi.cs
│ │ │ ├── User32.cs
│ │ │ ├── WinError.cs
│ │ │ ├── Winbase.cs
│ │ │ ├── Windef.cs
│ │ │ ├── Wingdi.cs
│ │ │ ├── Winnt.cs
│ │ │ ├── Wintrust.cs
│ │ │ └── winuser.cs
│ │ ├── ObservablePowerStatus.cs
│ │ ├── ObservableTime.cs
│ │ ├── PipeServer.cs
│ │ ├── Playnite.csproj
│ │ ├── PlayniteEnvironment.cs
│ │ ├── PlayniteProcess.cs
│ │ ├── PlayniteUriHandler.cs
│ │ ├── Plugins/
│ │ │ ├── ExtensionFactory.cs
│ │ │ └── ExtensionInstaller.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── SDL2.cs
│ │ ├── SDL2_mixer.cs
│ │ ├── Safe Mode.bat
│ │ ├── Scripting/
│ │ │ ├── PlayniteScript.cs
│ │ │ └── PowerShell/
│ │ │ ├── PowerShell.cs
│ │ │ └── PowerShellScript.cs
│ │ ├── SdkHelpers.cs
│ │ ├── SelectableItem.cs
│ │ ├── Services/
│ │ │ ├── BaseServicesClient.cs
│ │ │ ├── GenericResponse.cs
│ │ │ └── ServicesClient.cs
│ │ ├── Settings/
│ │ │ ├── AutoClientShutdownSettings.cs
│ │ │ ├── DetailsVisibilitySettings.cs
│ │ │ ├── FilterSettings.cs
│ │ │ ├── FullscreenSettings.cs
│ │ │ ├── OldSettings/
│ │ │ │ └── Plugins.cs
│ │ │ ├── PlaynitePaths.cs
│ │ │ ├── PlayniteSettings.cs
│ │ │ ├── SearchWindowVisibilitySettings.cs
│ │ │ ├── SettingsAttributes.cs
│ │ │ ├── ViewProperties.cs
│ │ │ └── WindowPositions.cs
│ │ ├── SortableNameConverter.cs
│ │ ├── SystemIntegration.cs
│ │ ├── Themes.cs
│ │ ├── ThirdPartyClients/
│ │ │ └── ThirdPartyToolsList.cs
│ │ ├── UrlConstants.cs
│ │ ├── ViewModels/
│ │ │ ├── AddonsViewModelBase_Online.cs
│ │ │ ├── CrashHandlerViewModel.cs
│ │ │ ├── ItemSelectionViewModel.cs
│ │ │ ├── LicenseAgreementViewModel.cs
│ │ │ ├── MainViewModelBase.cs
│ │ │ ├── ProgressViewViewModel.cs
│ │ │ ├── RandomGameSelectViewModel.cs
│ │ │ ├── SearchViewModel.cs
│ │ │ └── UpdateViewModel.cs
│ │ ├── WebView/
│ │ │ ├── CookieDestroyer.cs
│ │ │ ├── OffscreenWebView.cs
│ │ │ ├── WebView.cs
│ │ │ ├── WebViewBase.cs
│ │ │ └── WebViewFactory.cs
│ │ ├── Windows/
│ │ │ ├── CrashHandlerWindowFactory.cs
│ │ │ ├── ExtensionCrashHandlerWindowFactory.cs
│ │ │ ├── ItemSelectorWindowFactory.cs
│ │ │ ├── LicenseAgreementWindowFactory.cs
│ │ │ ├── ProgressWindowFactory.cs
│ │ │ ├── UpdateWindowFactory.cs
│ │ │ ├── WebViewWindow.xaml
│ │ │ ├── WebViewWindow.xaml.cs
│ │ │ ├── WindowFactory.cs
│ │ │ ├── WindowManager.cs
│ │ │ └── WindowPositionHandler.cs
│ │ ├── WindowsNotifyIconManager.cs
│ │ ├── crash_reporter.cfg
│ │ ├── gamecontrollerdb.txt
│ │ ├── license.txt
│ │ └── packages.config
│ ├── Playnite.DesktopApp/
│ │ ├── Api/
│ │ │ └── MainViewAPI.cs
│ │ ├── App.config
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── ControlGalleryView.xaml
│ │ ├── Controls/
│ │ │ ├── AddonsSections/
│ │ │ │ ├── AddonUpdates.xaml
│ │ │ │ ├── AddonUpdates.xaml.cs
│ │ │ │ ├── BrowseAddons.xaml
│ │ │ │ ├── BrowseAddons.xaml.cs
│ │ │ │ ├── InstalledExtensions.xaml
│ │ │ │ ├── InstalledExtensions.xaml.cs
│ │ │ │ ├── InstalledThemes.xaml
│ │ │ │ └── InstalledThemes.xaml.cs
│ │ │ ├── ComboBoxList.cs
│ │ │ ├── ComboBoxListBase.cs
│ │ │ ├── DdItemListSelectionBox.cs
│ │ │ ├── ExpanderEx.cs
│ │ │ ├── FilterEnumSelectionBox.cs
│ │ │ ├── FilterSelectionBox.cs
│ │ │ ├── FilterStringSelectionBox.cs
│ │ │ ├── GameListItem.cs
│ │ │ ├── GameTaskView.xaml
│ │ │ ├── GameTaskView.xaml.cs
│ │ │ ├── GamesGridView.xaml
│ │ │ ├── GamesGridView.xaml.cs
│ │ │ ├── GridViewPanel.cs
│ │ │ ├── LibraryStatistics.xaml
│ │ │ ├── LibraryStatistics.xaml.cs
│ │ │ ├── LongNumericBox.cs
│ │ │ ├── Menus/
│ │ │ │ ├── FilterPresetsMenu.cs
│ │ │ │ ├── GameGroupMenu.cs
│ │ │ │ ├── GameMenu.cs
│ │ │ │ ├── GroupSettingsMenu.cs
│ │ │ │ ├── MainMenu.cs
│ │ │ │ ├── SortSettingsMenu.cs
│ │ │ │ ├── TrayContextMenu.cs
│ │ │ │ ├── ViewSelectionMenu.cs
│ │ │ │ └── ViewSettingsMenu.cs
│ │ │ ├── MetadataDownloadSettings.xaml
│ │ │ ├── MetadataDownloadSettings.xaml.cs
│ │ │ ├── NullableIntBox.cs
│ │ │ ├── NumericDoubleBox.cs
│ │ │ ├── PathSelectionBox.cs
│ │ │ ├── SearchBox.cs
│ │ │ ├── SettingsSections/
│ │ │ │ ├── AppearanceAdvanced.xaml
│ │ │ │ ├── AppearanceAdvanced.xaml.cs
│ │ │ │ ├── AppearanceDetailsView.xaml
│ │ │ │ ├── AppearanceDetailsView.xaml.cs
│ │ │ │ ├── AppearanceGeneral.xaml
│ │ │ │ ├── AppearanceGeneral.xaml.cs
│ │ │ │ ├── AppearanceGridView.xaml
│ │ │ │ ├── AppearanceGridView.xaml.cs
│ │ │ │ ├── AppearanceLayout.xaml
│ │ │ │ ├── AppearanceLayout.xaml.cs
│ │ │ │ ├── AppearanceListView.xaml
│ │ │ │ ├── AppearanceListView.xaml.cs
│ │ │ │ ├── AppearanceTopPanel.xaml
│ │ │ │ ├── AppearanceTopPanel.xaml.cs
│ │ │ │ ├── Backup.xaml
│ │ │ │ ├── Backup.xaml.cs
│ │ │ │ ├── ClientShutdown.xaml
│ │ │ │ ├── ClientShutdown.xaml.cs
│ │ │ │ ├── Development.xaml
│ │ │ │ ├── Development.xaml.cs
│ │ │ │ ├── EmptyParent.xaml
│ │ │ │ ├── EmptyParent.xaml.cs
│ │ │ │ ├── ErrorLoading.xaml
│ │ │ │ ├── ErrorLoading.xaml.cs
│ │ │ │ ├── General.xaml
│ │ │ │ ├── General.xaml.cs
│ │ │ │ ├── GeneralAdvanced.xaml
│ │ │ │ ├── GeneralAdvanced.xaml.cs
│ │ │ │ ├── ImportExlusionList.xaml
│ │ │ │ ├── ImportExlusionList.xaml.cs
│ │ │ │ ├── Input.xaml
│ │ │ │ ├── Input.xaml.cs
│ │ │ │ ├── LibrariesConfigWindowInfo.xaml
│ │ │ │ ├── LibrariesConfigWindowInfo.xaml.cs
│ │ │ │ ├── Metadata.xaml
│ │ │ │ ├── Metadata.xaml.cs
│ │ │ │ ├── NoSettingsAvailable.xaml
│ │ │ │ ├── NoSettingsAvailable.xaml.cs
│ │ │ │ ├── Performance.xaml
│ │ │ │ ├── Performance.xaml.cs
│ │ │ │ ├── Scripting.xaml
│ │ │ │ ├── Scripting.xaml.cs
│ │ │ │ ├── Search.xaml
│ │ │ │ ├── Search.xaml.cs
│ │ │ │ ├── Sorting.xaml
│ │ │ │ ├── Sorting.xaml.cs
│ │ │ │ ├── Updates.xaml
│ │ │ │ └── Updates.xaml.cs
│ │ │ ├── SidebarItem.cs
│ │ │ ├── SliderEx.cs
│ │ │ ├── SliderWithPopup.xaml
│ │ │ ├── SliderWithPopup.xaml.cs
│ │ │ ├── TopPanelItem.cs
│ │ │ └── Views/
│ │ │ ├── BaseGamesView.cs
│ │ │ ├── DetailsViewGameOverview.cs
│ │ │ ├── ExplorerPanel.cs
│ │ │ ├── FilterPanel.cs
│ │ │ ├── GameOverview.cs
│ │ │ ├── GridViewGameOverview.cs
│ │ │ ├── Library.cs
│ │ │ ├── LibraryDetailsView.cs
│ │ │ ├── LibraryGridView.cs
│ │ │ ├── LibraryListView.cs
│ │ │ ├── MainWindow.cs
│ │ │ ├── NotificationPanel.cs
│ │ │ ├── SearchWindow.cs
│ │ │ ├── Sidebar.cs
│ │ │ └── TopPanel.cs
│ │ ├── DesktopActionSelector.cs
│ │ ├── DesktopApplication.cs
│ │ ├── DesktopCollectionView.cs
│ │ ├── DesktopDialogs.cs
│ │ ├── DesktopGamesEditor.cs
│ │ ├── GlobalResources.xaml
│ │ ├── Markups.cs
│ │ ├── Playnite.DesktopApp.csproj
│ │ ├── PluginSettingsHelper.cs
│ │ ├── ProgramEntry.cs
│ │ ├── Properties/
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── Resources.Designer.cs
│ │ │ ├── Resources.resx
│ │ │ ├── Settings.Designer.cs
│ │ │ └── Settings.settings
│ │ ├── Resources/
│ │ │ └── contributors.txt
│ │ ├── Themes/
│ │ │ ├── Desktop/
│ │ │ │ └── Default/
│ │ │ │ ├── Common.xaml
│ │ │ │ ├── Constants.xaml
│ │ │ │ ├── CustomControls/
│ │ │ │ │ ├── ComboBoxList.xaml
│ │ │ │ │ ├── ExpanderEx.xaml
│ │ │ │ │ ├── ExtendedDataGrid.xaml
│ │ │ │ │ ├── ExtendedListBox.xaml
│ │ │ │ │ ├── ExtendedListView.xaml
│ │ │ │ │ ├── FilterSelectionBox.xaml
│ │ │ │ │ ├── GameGroupMenu.xaml
│ │ │ │ │ ├── GameMenu.xaml
│ │ │ │ │ ├── HotKeyBox.xaml
│ │ │ │ │ ├── HtmlTextView.xaml
│ │ │ │ │ ├── NumericBoxes.xaml
│ │ │ │ │ ├── PathSelectionBox.xaml
│ │ │ │ │ ├── SearchBox.xaml
│ │ │ │ │ ├── SidebarItem.xaml
│ │ │ │ │ ├── SliderEx.xaml
│ │ │ │ │ ├── TopPanelItem.xaml
│ │ │ │ │ ├── TrayContextMenu.xaml
│ │ │ │ │ └── WindowBase.xaml
│ │ │ │ ├── DefaultControls/
│ │ │ │ │ ├── Border.xaml
│ │ │ │ │ ├── Button.xaml
│ │ │ │ │ ├── CheckBox.xaml
│ │ │ │ │ ├── ComboBox.xaml
│ │ │ │ │ ├── ContextMenu.xaml
│ │ │ │ │ ├── DataGrid.xaml
│ │ │ │ │ ├── DatePicker.xaml
│ │ │ │ │ ├── Expander.xaml
│ │ │ │ │ ├── GridSplitter.xaml
│ │ │ │ │ ├── GroupBox.xaml
│ │ │ │ │ ├── Hyperlink.xaml
│ │ │ │ │ ├── Label.xaml
│ │ │ │ │ ├── ListBox.xaml
│ │ │ │ │ ├── ListView.xaml
│ │ │ │ │ ├── Menu.xaml
│ │ │ │ │ ├── PasswordBox.xaml
│ │ │ │ │ ├── Popup.xaml
│ │ │ │ │ ├── ProgressBar.xaml
│ │ │ │ │ ├── RadioButton.xaml
│ │ │ │ │ ├── RepeatButton.xaml
│ │ │ │ │ ├── RichTextBox.xaml
│ │ │ │ │ ├── ScrollViewer.xaml
│ │ │ │ │ ├── Slider.xaml
│ │ │ │ │ ├── TabControl.xaml
│ │ │ │ │ ├── TextBlock.xaml
│ │ │ │ │ ├── TextBox.xaml
│ │ │ │ │ ├── Thumb.xaml
│ │ │ │ │ ├── ToggleButton.xaml
│ │ │ │ │ ├── ToolTip.xaml
│ │ │ │ │ └── TreeView.xaml
│ │ │ │ ├── DerivedStyles/
│ │ │ │ │ ├── BottomButton.xaml
│ │ │ │ │ ├── DetailsHyperlink.xaml
│ │ │ │ │ ├── DetailsScrollViewer.xaml
│ │ │ │ │ ├── DetailsViewGroupStyle.xaml
│ │ │ │ │ ├── DetailsViewItemStyle.xaml
│ │ │ │ │ ├── DetailsViewItemTemplate.xaml
│ │ │ │ │ ├── GridViewGroupStyle.xaml
│ │ │ │ │ ├── GridViewItemStyle.xaml
│ │ │ │ │ ├── GridViewItemTemplate.xaml
│ │ │ │ │ ├── HighlightBorder.xaml
│ │ │ │ │ ├── ImageHighlightButton.xaml
│ │ │ │ │ ├── ListViewGroupStyle.xaml
│ │ │ │ │ ├── MainWindowStyle.xaml
│ │ │ │ │ ├── NotificationMessage.xaml
│ │ │ │ │ ├── PlayButton.xaml
│ │ │ │ │ ├── PropertyItemButton.xaml
│ │ │ │ │ ├── SimpleButton.xaml
│ │ │ │ │ ├── StandardWindowStyle.xaml
│ │ │ │ │ ├── TextBlockGameScore.xaml
│ │ │ │ │ └── WindowBarButton.xaml
│ │ │ │ ├── DescriptionView.html
│ │ │ │ ├── Media.xaml
│ │ │ │ ├── Views/
│ │ │ │ │ ├── DetailsViewGameOverview.xaml
│ │ │ │ │ ├── ExplorerPanel.xaml
│ │ │ │ │ ├── FilterPanelView.xaml
│ │ │ │ │ ├── GridViewGameOverview.xaml
│ │ │ │ │ ├── Library.xaml
│ │ │ │ │ ├── LibraryDetailsView.xaml
│ │ │ │ │ ├── LibraryGridView.xaml
│ │ │ │ │ ├── LibraryListView.xaml
│ │ │ │ │ ├── MainWindow.xaml
│ │ │ │ │ ├── NotificationPanel.xaml
│ │ │ │ │ ├── SearchView.xaml
│ │ │ │ │ ├── Sidebar.xaml
│ │ │ │ │ └── TopPanel.xaml
│ │ │ │ └── theme.yaml
│ │ │ └── Generic.xaml
│ │ ├── ViewModels/
│ │ │ ├── AboutViewModel.cs
│ │ │ ├── ActionSelectionViewModel.cs
│ │ │ ├── AddonsViewModel.cs
│ │ │ ├── AddonsViewModel_Installed.cs
│ │ │ ├── AddonsViewModel_Online.cs
│ │ │ ├── CategoryConfigViewModel.cs
│ │ │ ├── DatabaseFieldsManagerViewModel.cs
│ │ │ ├── DesignData/
│ │ │ │ └── DesignMainViewModel.cs
│ │ │ ├── DesktopAppViewModel.cs
│ │ │ ├── DesktopAppViewModel_Commands.cs
│ │ │ ├── DesktopAppViewModel_Sidebar.cs
│ │ │ ├── DesktopAppViewModel_TopPanel.cs
│ │ │ ├── EmulatedGamesImportViewModel.cs
│ │ │ ├── EmulatorImportViewModel.cs
│ │ │ ├── EmulatorsViewModel.cs
│ │ │ ├── FirstTimeStartupViewModel.cs
│ │ │ ├── GameDetailsViewModel.cs
│ │ │ ├── GameEditViewModel.cs
│ │ │ ├── GameEditViewModelCommands.cs
│ │ │ ├── GameEditViewModelFieldChecks.cs
│ │ │ ├── GameEditViewModelMetadata.cs
│ │ │ ├── GoogleImageDownloadViewModel.cs
│ │ │ ├── ImageSelectionViewModel.cs
│ │ │ ├── InstalledGamesViewModel.cs
│ │ │ ├── ItemSelectionWithSearchViewModel.cs
│ │ │ ├── LibraryIntegrationsViewModel.cs
│ │ │ ├── MetadataComparisonViewModel.cs
│ │ │ ├── MetadataDownloadViewModel.cs
│ │ │ ├── PluginSettingsViewModel.cs
│ │ │ ├── SettingsViewModel.cs
│ │ │ ├── StatisticsViewModel.cs
│ │ │ └── ToolsConfigViewModel.cs
│ │ ├── Windows/
│ │ │ ├── AboutWindow.xaml
│ │ │ ├── AboutWindow.xaml.cs
│ │ │ ├── ActionSelectionWindow.xaml
│ │ │ ├── ActionSelectionWindow.xaml.cs
│ │ │ ├── AddonsWindow.xaml
│ │ │ ├── AddonsWindow.xaml.cs
│ │ │ ├── CategoryConfigWindow.xaml
│ │ │ ├── CategoryConfigWindow.xaml.cs
│ │ │ ├── ControlGallery.xaml
│ │ │ ├── ControlGallery.xaml.cs
│ │ │ ├── CrashHandlerWindow.xaml
│ │ │ ├── CrashHandlerWindow.xaml.cs
│ │ │ ├── DatabaseFieldsManagerWindow.xaml
│ │ │ ├── DatabaseFieldsManagerWindow.xaml.cs
│ │ │ ├── EmulatedGameImportWindow.xaml
│ │ │ ├── EmulatedGameImportWindow.xaml.cs
│ │ │ ├── EmulatorDownloadWindow.xaml
│ │ │ ├── EmulatorDownloadWindow.xaml.cs
│ │ │ ├── EmulatorImportWindow.xaml
│ │ │ ├── EmulatorImportWindow.xaml.cs
│ │ │ ├── EmulatorsWindow.xaml
│ │ │ ├── EmulatorsWindow.xaml.cs
│ │ │ ├── ExtensionCrashHandlerWindow.xaml
│ │ │ ├── ExtensionCrashHandlerWindow.xaml.cs
│ │ │ ├── FirstTimeStartupWindow.xaml
│ │ │ ├── FirstTimeStartupWindow.xaml.cs
│ │ │ ├── GameEditWindow.xaml
│ │ │ ├── GameEditWindow.xaml.cs
│ │ │ ├── GoogleImageDownloadWindow.xaml
│ │ │ ├── GoogleImageDownloadWindow.xaml.cs
│ │ │ ├── ImageSelectionWindow.xaml
│ │ │ ├── ImageSelectionWindow.xaml.cs
│ │ │ ├── InstalledGamesWindow.xaml
│ │ │ ├── InstalledGamesWindow.xaml.cs
│ │ │ ├── ItemSelectionWithSearchWindow.xaml
│ │ │ ├── ItemSelectionWithSearchWindow.xaml.cs
│ │ │ ├── LibraryIntegrationsWindow.xaml
│ │ │ ├── LibraryIntegrationsWindow.xaml.cs
│ │ │ ├── LicenseAgreementWindow.xaml
│ │ │ ├── LicenseAgreementWindow.xaml.cs
│ │ │ ├── MainWindow.xaml
│ │ │ ├── MainWindow.xaml.cs
│ │ │ ├── MessageBoxWindow.xaml
│ │ │ ├── MessageBoxWindow.xaml.cs
│ │ │ ├── MetadataComparisonWindow.xaml
│ │ │ ├── MetadataComparisonWindow.xaml.cs
│ │ │ ├── MetadataDownloadWindow.xaml
│ │ │ ├── MetadataDownloadWindow.xaml.cs
│ │ │ ├── MultiItemSelectionWindow.xaml
│ │ │ ├── MultiItemSelectionWindow.xaml.cs
│ │ │ ├── PluginSettingsWindow.xaml
│ │ │ ├── PluginSettingsWindow.xaml.cs
│ │ │ ├── ProgressWindow.xaml
│ │ │ ├── ProgressWindow.xaml.cs
│ │ │ ├── RandomGameSelectWindow.xaml
│ │ │ ├── RandomGameSelectWindow.xaml.cs
│ │ │ ├── SearchWindow.xaml
│ │ │ ├── SearchWindow.xaml.cs
│ │ │ ├── SettingsWindow.xaml
│ │ │ ├── SettingsWindow.xaml.cs
│ │ │ ├── SingleItemSelectionWindow.xaml
│ │ │ ├── SingleItemSelectionWindow.xaml.cs
│ │ │ ├── ToolsConfigWindow.xaml
│ │ │ ├── ToolsConfigWindow.xaml.cs
│ │ │ ├── UpdateWindow.xaml
│ │ │ └── UpdateWindow.xaml.cs
│ │ ├── app.manifest
│ │ └── packages.config
│ ├── Playnite.FullscreenApp/
│ │ ├── Api/
│ │ │ └── MainViewAPI.cs
│ │ ├── App.config
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── Commands/
│ │ │ └── GlobalCommands.cs
│ │ ├── ControlGalleryView.xaml
│ │ ├── Controls/
│ │ │ ├── ButtonEx.cs
│ │ │ ├── CheckBoxEx.cs
│ │ │ ├── ComboBoxEx.cs
│ │ │ ├── FilterDbItemtSelection.cs
│ │ │ ├── FilterEnumListSelection.cs
│ │ │ ├── FilterPresetSelector.cs
│ │ │ ├── FilterStringListSelection.cs
│ │ │ ├── FullscreenTilePanel.cs
│ │ │ ├── GameListItem.cs
│ │ │ ├── ItemsControlEx.cs
│ │ │ ├── ListBoxEx.cs
│ │ │ ├── ScrollViewerEx.cs
│ │ │ ├── SettingsSections/
│ │ │ │ ├── Audio.xaml
│ │ │ │ ├── Audio.xaml.cs
│ │ │ │ ├── General.xaml
│ │ │ │ ├── General.xaml.cs
│ │ │ │ ├── Input.xaml
│ │ │ │ ├── Input.xaml.cs
│ │ │ │ ├── Layout.xaml
│ │ │ │ ├── Layout.xaml.cs
│ │ │ │ ├── Menus.xaml
│ │ │ │ ├── Menus.xaml.cs
│ │ │ │ ├── SettingsSectionControl.cs
│ │ │ │ ├── Visuals.xaml
│ │ │ │ └── Visuals.xaml.cs
│ │ │ ├── SliderEx.cs
│ │ │ ├── ToggleButtonEx.cs
│ │ │ └── Views/
│ │ │ ├── Filters.cs
│ │ │ ├── FiltersAdditional.cs
│ │ │ ├── GameDetails.cs
│ │ │ ├── GameStatus.cs
│ │ │ └── Main.cs
│ │ ├── FullscreenActionSelector.cs
│ │ ├── FullscreenApplication.cs
│ │ ├── FullscreenCollectionView.cs
│ │ ├── FullscreenDialogs.cs
│ │ ├── GlobalResources.xaml
│ │ ├── HiddenStyles.xaml
│ │ ├── Markup/
│ │ │ └── Markups.cs
│ │ ├── Playnite.FullscreenApp.csproj
│ │ ├── ProgramEntry.cs
│ │ ├── Properties/
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── Resources.Designer.cs
│ │ │ ├── Resources.resx
│ │ │ ├── Settings.Designer.cs
│ │ │ └── Settings.settings
│ │ ├── Themes/
│ │ │ ├── Fullscreen/
│ │ │ │ └── Default/
│ │ │ │ ├── Constants.xaml
│ │ │ │ ├── CustomControls/
│ │ │ │ │ ├── FilterDbItemtSelection.xaml
│ │ │ │ │ ├── FilterEnumListSelection.xaml
│ │ │ │ │ ├── FilterPresetSelector.xaml
│ │ │ │ │ └── FilterStringListSelection.xaml
│ │ │ │ ├── DefaultControls/
│ │ │ │ │ ├── Button.xaml
│ │ │ │ │ ├── CheckBox.xaml
│ │ │ │ │ ├── ComboBox.xaml
│ │ │ │ │ ├── ProgressBar.xaml
│ │ │ │ │ ├── ScrollViewer.xaml
│ │ │ │ │ ├── Slider.xaml
│ │ │ │ │ ├── TextBox.xaml
│ │ │ │ │ ├── ToggleButton.xaml
│ │ │ │ │ └── ToolTip.xaml
│ │ │ │ ├── DerivedStyles/
│ │ │ │ │ ├── ButtonBottomMenu.xaml
│ │ │ │ │ ├── ButtonTopMenu.xaml
│ │ │ │ │ ├── ListGameItemStyle.xaml
│ │ │ │ │ └── ListGameItemTemplate.xaml
│ │ │ │ ├── DescriptionView.html
│ │ │ │ ├── Images/
│ │ │ │ │ └── ButtonPrompts/
│ │ │ │ │ ├── PlayStation/
│ │ │ │ │ │ └── PlayStation.xaml
│ │ │ │ │ └── Xbox/
│ │ │ │ │ └── Xbox.xaml
│ │ │ │ ├── Media.xaml
│ │ │ │ ├── Views/
│ │ │ │ │ ├── CustomMenus.xaml
│ │ │ │ │ ├── FiltersAdditional.xaml
│ │ │ │ │ ├── FiltersView.xaml
│ │ │ │ │ ├── GameDetails.xaml
│ │ │ │ │ ├── GameMenu.xaml
│ │ │ │ │ ├── GameStatus.xaml
│ │ │ │ │ ├── HelpMenu.xaml
│ │ │ │ │ ├── ItemSelection.xaml
│ │ │ │ │ ├── Main.xaml
│ │ │ │ │ ├── MainMenu.xaml
│ │ │ │ │ ├── MessageBox.xaml
│ │ │ │ │ ├── NotificationsMenu.xaml
│ │ │ │ │ ├── SettingsMenus.xaml
│ │ │ │ │ └── TextInput.xaml
│ │ │ │ └── theme.yaml
│ │ │ └── Generic.xaml
│ │ ├── ViewModels/
│ │ │ ├── AddonsViewModel.cs
│ │ │ ├── DesignData/
│ │ │ │ └── DesignMainViewModel.cs
│ │ │ ├── ExtensionsMenuViewModels.cs
│ │ │ ├── FullscreenAppViewModel.cs
│ │ │ ├── FullscreenAppViewModel_Commands.cs
│ │ │ ├── GameClientsMenuViewModel.cs
│ │ │ ├── GameDetailsViewModel.cs
│ │ │ ├── GameMenuViewModel.cs
│ │ │ ├── GameStatusViewModel.cs
│ │ │ ├── HelpMenuViewModel.cs
│ │ │ ├── MainMenuViewModel.cs
│ │ │ ├── NotificationsViewModel.cs
│ │ │ ├── SettingsViewModel.cs
│ │ │ └── SoftwareToolsMenuViewModel.cs
│ │ ├── Windows/
│ │ │ ├── AddonsUpdateWindow.xaml
│ │ │ ├── AddonsUpdateWindow.xaml.cs
│ │ │ ├── CrashWindow.xaml
│ │ │ ├── CrashWindow.xaml.cs
│ │ │ ├── ExtensionCrashWindow.xaml
│ │ │ ├── ExtensionCrashWindow.xaml.cs
│ │ │ ├── ExtensionsMenuWindow.xaml
│ │ │ ├── ExtensionsMenuWindow.xaml.cs
│ │ │ ├── GameClientsMenuWindow.xaml
│ │ │ ├── GameClientsMenuWindow.xaml.cs
│ │ │ ├── GameMenuWindow.xaml
│ │ │ ├── GameMenuWindow.xaml.cs
│ │ │ ├── HelpMenuWindow.xaml
│ │ │ ├── HelpMenuWindow.xaml.cs
│ │ │ ├── LicenseAgreementWindow.xaml
│ │ │ ├── LicenseAgreementWindow.xaml.cs
│ │ │ ├── MainMenuWindow.xaml
│ │ │ ├── MainMenuWindow.xaml.cs
│ │ │ ├── MainWindow.xaml
│ │ │ ├── MainWindow.xaml.cs
│ │ │ ├── MessageBoxWindow.xaml
│ │ │ ├── MessageBoxWindow.xaml.cs
│ │ │ ├── MultiItemSelectionWindow.xaml
│ │ │ ├── MultiItemSelectionWindow.xaml.cs
│ │ │ ├── NotificationsWindow.xaml
│ │ │ ├── NotificationsWindow.xaml.cs
│ │ │ ├── ProgressWindow.xaml
│ │ │ ├── ProgressWindow.xaml.cs
│ │ │ ├── RandomGameSelectWindow.xaml
│ │ │ ├── RandomGameSelectWindow.xaml.cs
│ │ │ ├── SettingsWindow.xaml
│ │ │ ├── SettingsWindow.xaml.cs
│ │ │ ├── SingleItemSelectionWindow.xaml
│ │ │ ├── SingleItemSelectionWindow.xaml.cs
│ │ │ ├── SoftwareToolsMenuWindow.xaml
│ │ │ ├── SoftwareToolsMenuWindow.xaml.cs
│ │ │ ├── TextInputWindow.xaml
│ │ │ ├── TextInputWindow.xaml.cs
│ │ │ ├── UpdateWindow.xaml
│ │ │ ├── UpdateWindow.xaml.cs
│ │ │ └── WindowTools.cs
│ │ ├── app.manifest
│ │ └── packages.config
│ ├── Playnite.sln
│ ├── PlayniteSDK/
│ │ ├── ApplicationMode.cs
│ │ ├── BuiltInExtensions.cs
│ │ ├── Collections/
│ │ │ ├── ComparableList.cs
│ │ │ ├── ObservableConcurrentDictionary.cs
│ │ │ ├── ObservableObject.cs
│ │ │ └── RangeObservableCollection.cs
│ │ ├── Controls/
│ │ │ └── PluginUserControl.cs
│ │ ├── Data/
│ │ │ ├── DataSerialization.cs
│ │ │ ├── MarkupConverter.cs
│ │ │ └── SQLite.cs
│ │ ├── Database/
│ │ │ ├── IGameDatabase.cs
│ │ │ ├── IGameDatabaseAPI.cs
│ │ │ └── IItemCollection.cs
│ │ ├── Events/
│ │ │ ├── ApplicationEvents.cs
│ │ │ ├── PlayniteUriEventArgs.cs
│ │ │ └── WebViewEvents.cs
│ │ ├── Exceptions/
│ │ │ ├── LocalizedException.cs
│ │ │ ├── ReferenceException.cs
│ │ │ ├── ScriptRuntimeException.cs
│ │ │ └── TypeMismatchException.cs
│ │ ├── ExpandableVariables.cs
│ │ ├── ExtensionFunction.cs
│ │ ├── Extensions/
│ │ │ ├── ListExtensions.cs
│ │ │ └── StringExtensions.cs
│ │ ├── IAddons.cs
│ │ ├── IDialogsFactory.cs
│ │ ├── IEmulationAPI.cs
│ │ ├── ILogger.cs
│ │ ├── IMainViewAPI.cs
│ │ ├── INotificationsAPI.cs
│ │ ├── IPlayniteAPI.cs
│ │ ├── IPlayniteInfoAPI.cs
│ │ ├── IPlaynitePathsAPI.cs
│ │ ├── IPlayniteSettingsAPI.cs
│ │ ├── ISettings.cs
│ │ ├── IUriHandlerAPI.cs
│ │ ├── IWebView.cs
│ │ ├── LibraryClient.cs
│ │ ├── LogManager.cs
│ │ ├── MetadataProvider.cs
│ │ ├── Models/
│ │ │ ├── AgeRating.cs
│ │ │ ├── AgeRatingOrg.cs
│ │ │ ├── AppSoftware.cs
│ │ │ ├── Category.cs
│ │ │ ├── Company.cs
│ │ │ ├── CompletionStatus.cs
│ │ │ ├── DatabaseObject.cs
│ │ │ ├── Emulator.cs
│ │ │ ├── FilterPreset.cs
│ │ │ ├── Game.cs
│ │ │ ├── GameAction.cs
│ │ │ ├── GameFeature.cs
│ │ │ ├── GameMetadata.cs
│ │ │ ├── GameRom.cs
│ │ │ ├── GameScannerConfig.cs
│ │ │ ├── GameSource.cs
│ │ │ ├── Genre.cs
│ │ │ ├── IIdentifiable.cs
│ │ │ ├── ImportExclusionList.cs
│ │ │ ├── InstallSizeGroup.cs
│ │ │ ├── InstallationStatus.cs
│ │ │ ├── Link.cs
│ │ │ ├── PastTimeSegment.cs
│ │ │ ├── Platform.cs
│ │ │ ├── PlaytimeCategory.cs
│ │ │ ├── Region.cs
│ │ │ ├── ReleaseDate.cs
│ │ │ ├── ScoreGroup.cs
│ │ │ ├── Series.cs
│ │ │ └── Tag.cs
│ │ ├── Playnite.SDK.csproj
│ │ ├── Plugins/
│ │ │ ├── Actions.cs
│ │ │ ├── LibraryPlugin.cs
│ │ │ ├── MenuEntry.cs
│ │ │ ├── MetadataPlugin.cs
│ │ │ ├── Plugin.cs
│ │ │ ├── Search.cs
│ │ │ ├── SidebarItem.cs
│ │ │ └── TopPanelItem.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── RelayCommand.cs
│ │ ├── ResourceProvider.cs
│ │ ├── SdkVersions.cs
│ │ ├── WebViewModels.cs
│ │ └── readme.md
│ ├── Tests/
│ │ ├── Playnite.DesktopApp.Tests/
│ │ │ ├── GamesEditorTests.cs
│ │ │ ├── MainViewAPITests.cs
│ │ │ ├── Playnite.DesktopApp.Tests.csproj
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── SkinsTests.cs
│ │ │ ├── TestsSetupClass.cs
│ │ │ ├── ViewModels/
│ │ │ │ ├── DatabaseFieldsManagerViewModelTests.cs
│ │ │ │ └── GameEditViewModelTests.cs
│ │ │ ├── app.config
│ │ │ └── packages.config
│ │ ├── Playnite.FullscreenApp.Tests/
│ │ │ ├── Controls/
│ │ │ │ └── FullscreenTilePanelTests.cs
│ │ │ ├── Playnite.FullscreenApp.Tests.csproj
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── app.config
│ │ │ └── packages.config
│ │ ├── Playnite.Tests/
│ │ │ ├── Api/
│ │ │ │ └── PluginDescriptionTests.cs
│ │ │ ├── App/
│ │ │ │ └── UpdateTests.cs
│ │ │ ├── App.config
│ │ │ ├── ArchiveTests.cs
│ │ │ ├── BackupTests.cs
│ │ │ ├── CloneObjectTests.cs
│ │ │ ├── Converters/
│ │ │ │ └── PlayTimeToStringConverterTests.cs
│ │ │ ├── CueSheetTests.cs
│ │ │ ├── Database/
│ │ │ │ ├── EmulatorsCollectionTests.cs
│ │ │ │ ├── FiltersDatabaseTests.cs
│ │ │ │ ├── GameDatabaseFileTests.cs
│ │ │ │ ├── GameDatabaseMigrationTests.cs
│ │ │ │ ├── GameDatabasePlatformsTests.cs
│ │ │ │ ├── GameDatabaseTests.cs
│ │ │ │ ├── GameLibraryFilterTests.cs
│ │ │ │ ├── GameLibraryTests.cs
│ │ │ │ └── ItemCollectionTests.cs
│ │ │ ├── DictionaryTests.cs
│ │ │ ├── Emulators/
│ │ │ │ ├── EmulationDatabaseTests.cs
│ │ │ │ ├── EmulationTests.cs
│ │ │ │ ├── EmulatorDefinitionTests.cs
│ │ │ │ ├── EmulatorScannerTests.cs
│ │ │ │ ├── ScannedGameTests.cs
│ │ │ │ └── ScannerTests.cs
│ │ │ ├── ExtensionFactoryTests.cs
│ │ │ ├── Extensions/
│ │ │ │ ├── BitmapExtensionsTests.cs
│ │ │ │ ├── DateTimesTests.cs
│ │ │ │ ├── EnumsTests.cs
│ │ │ │ ├── NetExtensionsTests.cs
│ │ │ │ ├── ObjectExtensionsTests.cs
│ │ │ │ └── StringExtensionsTests.cs
│ │ │ ├── FileSystemTests.cs
│ │ │ ├── GameFieldComparerTests.cs
│ │ │ ├── GamesEditorTests.cs
│ │ │ ├── GamesStatsTests.cs
│ │ │ ├── ImageSourceManagerTests.cs
│ │ │ ├── ImagesTests.cs
│ │ │ ├── IniParserTests.cs
│ │ │ ├── InstallSizeScanTests.cs
│ │ │ ├── ListExtensionsTests.cs
│ │ │ ├── LocalizationTests.cs
│ │ │ ├── M3UTests.cs
│ │ │ ├── Manifests/
│ │ │ │ └── AddonManifestTests.cs
│ │ │ ├── Metadata/
│ │ │ │ └── MetadataDownloaderDownloadTests.cs
│ │ │ ├── Models/
│ │ │ │ ├── CopyDiffToTest.cs
│ │ │ │ ├── DatabaseObjectTests.cs
│ │ │ │ ├── GameActionTests.cs
│ │ │ │ ├── GameTests.cs
│ │ │ │ └── MetadataPropertyTests.cs
│ │ │ ├── PathsTests.cs
│ │ │ ├── Playnite.Tests.csproj
│ │ │ ├── PlayniteUriHandlerTests.cs
│ │ │ ├── Plugins/
│ │ │ │ └── ExtensionManifestTests.cs
│ │ │ ├── ProcessStarterTests.cs
│ │ │ ├── ProgramsTests.cs
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── ReleaseDateTests.cs
│ │ │ ├── Resources/
│ │ │ │ ├── GOG/
│ │ │ │ │ └── library_unreleased.json
│ │ │ │ ├── Serialization/
│ │ │ │ │ ├── invalid.json
│ │ │ │ │ ├── invalid.toml
│ │ │ │ │ ├── invalid.yaml
│ │ │ │ │ ├── valid.json
│ │ │ │ │ ├── valid.toml
│ │ │ │ │ └── valid.yaml
│ │ │ │ ├── SizeScan/
│ │ │ │ │ ├── CueNonExistingFiles.cue
│ │ │ │ │ └── CueTestFiles.cue
│ │ │ │ ├── TestIni.ini
│ │ │ │ ├── TestIni.md5
│ │ │ │ ├── TestIni.sfv
│ │ │ │ ├── TestUpdateManifest.json
│ │ │ │ ├── XmlTest/
│ │ │ │ │ ├── Xml1.xaml
│ │ │ │ │ ├── Xml2.xaml
│ │ │ │ │ ├── Xml3.xaml
│ │ │ │ │ └── Xml4.xaml
│ │ │ │ └── test.m3u
│ │ │ ├── SafeFileEnumeratorTests.cs
│ │ │ ├── Scripting/
│ │ │ │ └── PowerShell/
│ │ │ │ └── PowerShellTests.cs
│ │ │ ├── SearchViewModelTests.cs
│ │ │ ├── SelectableDbItemListTests.cs
│ │ │ ├── SerializationTests.cs
│ │ │ ├── Settings/
│ │ │ │ └── FilterSettingsTests.cs
│ │ │ ├── SettingsTests.cs
│ │ │ ├── SigningToolsTests.cs
│ │ │ ├── SizesTests.cs
│ │ │ ├── SortableNameConverterTests.cs
│ │ │ ├── StringExtensionsTests.cs
│ │ │ ├── System/
│ │ │ │ ├── ComputerTests.cs
│ │ │ │ └── ProcessExtensionsTests.cs
│ │ │ ├── TimerTests.cs
│ │ │ ├── Web/
│ │ │ │ └── HttpDownloaderTests.cs
│ │ │ ├── XmlTests.cs
│ │ │ ├── _TestTools/
│ │ │ │ ├── GameDbTestWrapper.cs
│ │ │ │ ├── MockDialogsFactory.cs
│ │ │ │ ├── MockWindowFactory.cs
│ │ │ │ ├── PlayniteTests.cs
│ │ │ │ ├── TestAppTools.cs
│ │ │ │ ├── TestDateTimes.cs
│ │ │ │ ├── TestEmulationDatabase.cs
│ │ │ │ ├── TestPlayniteApplication.cs
│ │ │ │ ├── TestResourceProvider.cs
│ │ │ │ └── TestsSetupClass.cs
│ │ │ └── packages.config
│ │ ├── Playnite.Toolbox.Tests/
│ │ │ ├── ExtensionsTests.cs
│ │ │ ├── PathsTests.cs
│ │ │ ├── Playnite.Toolbox.Tests.csproj
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── Resources/
│ │ │ │ └── Changelog/
│ │ │ │ ├── 1.1.0-1.2.0.txt
│ │ │ │ ├── 1.2.0-1.3.0.txt
│ │ │ │ └── 1.3.0-1.4.0.txt
│ │ │ ├── ThemesTests.cs
│ │ │ ├── app.config
│ │ │ └── packages.config
│ │ ├── TestApp/
│ │ │ ├── App.config
│ │ │ ├── Properties/
│ │ │ │ ├── AssemblyInfo.cs
│ │ │ │ ├── Resources.Designer.cs
│ │ │ │ ├── Resources.resx
│ │ │ │ ├── Settings.Designer.cs
│ │ │ │ └── Settings.settings
│ │ │ ├── TestApp.cs
│ │ │ ├── TestApp.csproj
│ │ │ ├── TestAppProcInfo.cs
│ │ │ ├── app.manifest
│ │ │ └── packages.config
│ │ ├── TestGameLibrary/
│ │ │ ├── BuildCopyExclude.txt
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── Resources/
│ │ │ │ └── icon.tga
│ │ │ ├── TestGameLibrary.cs
│ │ │ ├── TestGameLibrary.csproj
│ │ │ └── extension.yaml
│ │ ├── TestMetadataPlugin/
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── TestMetadataPlugin.cs
│ │ │ ├── TestMetadataPlugin.csproj
│ │ │ └── extension.yaml
│ │ └── TestPlugin/
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── TestPlugin.cs
│ │ ├── TestPlugin.csproj
│ │ ├── TestPluginSettings.cs
│ │ ├── TestPluginSettingsView.xaml
│ │ ├── TestPluginSettingsView.xaml.cs
│ │ ├── TestPluginUserControl.xaml
│ │ ├── TestPluginUserControl.xaml.cs
│ │ └── extension.yaml
│ └── Tools/
│ ├── Playnite.Toolbox/
│ │ ├── App.config
│ │ ├── CmdLineOptions.cs
│ │ ├── Extensions.cs
│ │ ├── NLog.config
│ │ ├── Paths.cs
│ │ ├── Playnite.Toolbox.csproj
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Strings.cs
│ │ ├── Templates/
│ │ │ ├── Extensions/
│ │ │ │ ├── CustomLibraryPlugin/
│ │ │ │ │ ├── App.xaml
│ │ │ │ │ ├── BuildInclude.txt
│ │ │ │ │ ├── CustomLibraryPlugin.csproj
│ │ │ │ │ ├── CustomLibraryPlugin.sln
│ │ │ │ │ ├── Localization/
│ │ │ │ │ │ └── en_US.xaml
│ │ │ │ │ ├── Properties/
│ │ │ │ │ │ └── AssemblyInfo.cs
│ │ │ │ │ ├── _name_.cs
│ │ │ │ │ ├── _name_Client.cs
│ │ │ │ │ ├── _name_Settings.cs
│ │ │ │ │ ├── _name_SettingsView.xaml
│ │ │ │ │ ├── _name_SettingsView.xaml.cs
│ │ │ │ │ ├── extension.yaml
│ │ │ │ │ └── packages.config
│ │ │ │ ├── CustomMetadataPlugin/
│ │ │ │ │ ├── App.xaml
│ │ │ │ │ ├── BuildInclude.txt
│ │ │ │ │ ├── CustomMetadataPlugin.csproj
│ │ │ │ │ ├── CustomMetadataPlugin.sln
│ │ │ │ │ ├── Localization/
│ │ │ │ │ │ └── en_US.xaml
│ │ │ │ │ ├── Properties/
│ │ │ │ │ │ └── AssemblyInfo.cs
│ │ │ │ │ ├── _name_.cs
│ │ │ │ │ ├── _name_Provider.cs
│ │ │ │ │ ├── _name_Settings.cs
│ │ │ │ │ ├── _name_SettingsView.xaml
│ │ │ │ │ ├── _name_SettingsView.xaml.cs
│ │ │ │ │ ├── extension.yaml
│ │ │ │ │ └── packages.config
│ │ │ │ ├── GenericPlugin/
│ │ │ │ │ ├── App.xaml
│ │ │ │ │ ├── BuildInclude.txt
│ │ │ │ │ ├── GenericPlugin.csproj
│ │ │ │ │ ├── GenericPlugin.sln
│ │ │ │ │ ├── Localization/
│ │ │ │ │ │ └── en_US.xaml
│ │ │ │ │ ├── Properties/
│ │ │ │ │ │ └── AssemblyInfo.cs
│ │ │ │ │ ├── _name_.cs
│ │ │ │ │ ├── _name_Settings.cs
│ │ │ │ │ ├── _name_SettingsView.xaml
│ │ │ │ │ ├── _name_SettingsView.xaml.cs
│ │ │ │ │ ├── extension.yaml
│ │ │ │ │ └── packages.config
│ │ │ │ └── PowerShellScript/
│ │ │ │ ├── BuildInclude.txt
│ │ │ │ ├── PowerShellScript.psm1
│ │ │ │ └── extension.yaml
│ │ │ └── Themes/
│ │ │ ├── Changelog/
│ │ │ │ ├── 1.0.0-1.1.0.txt
│ │ │ │ ├── 1.1.0-1.2.0.txt
│ │ │ │ ├── 1.2.0-1.3.0.txt
│ │ │ │ ├── 1.3.0-1.4.0.txt
│ │ │ │ ├── 1.4.0-1.4.1.txt
│ │ │ │ ├── 1.4.1-1.5.0.txt
│ │ │ │ ├── 1.5.0-1.6.0.txt
│ │ │ │ ├── 1.6.0-1.7.0.txt
│ │ │ │ ├── 1.7.0-1.8.0.txt
│ │ │ │ ├── 1.8.0-1.9.0.txt
│ │ │ │ ├── 1.9.0-2.0.0.txt
│ │ │ │ ├── 2.0.0-2.1.0.txt
│ │ │ │ ├── 2.1.0-2.2.0.txt
│ │ │ │ ├── 2.2.0-2.3.0.txt
│ │ │ │ ├── 2.3.0-2.4.0.txt
│ │ │ │ ├── 2.4.0-2.5.0.txt
│ │ │ │ ├── 2.5.0-2.6.0.txt
│ │ │ │ ├── 2.7.0-2.8.0.txt
│ │ │ │ └── 2.8.0-2.9.0.txt
│ │ │ ├── Desktop/
│ │ │ │ ├── Theme.csproj
│ │ │ │ └── Theme.sln
│ │ │ └── Fullscreen/
│ │ │ ├── Theme.csproj
│ │ │ └── Theme.sln
│ │ ├── Themes.cs
│ │ ├── Verify.cs
│ │ └── packages.config
│ ├── Playnite.Utilities/
│ │ ├── App.config
│ │ ├── DatParser.cs
│ │ ├── Playnite.Utilities.csproj
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ └── packages.config
│ └── PlayniteInstaller/
│ ├── App.config
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Classic.xaml
│ ├── Converters.cs
│ ├── Logger.cs
│ ├── MainViewModel.cs
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ ├── PlayniteInstaller.csproj
│ ├── Properties/
│ │ ├── AssemblyInfo.cs
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.resx
│ │ ├── Settings.Designer.cs
│ │ └── Settings.settings
│ ├── app.manifest
│ └── installer_mirrors.txt
└── tests/
├── Extensions/
│ ├── Plugins/
│ │ ├── FullTestPluginDev/
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── TestPluginDev.cs
│ │ │ ├── TestPluginDev.csproj
│ │ │ ├── TestPluginDev.sln
│ │ │ └── packages.config
│ │ ├── FullTestPluginNuget/
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── TestPluginNuget.cs
│ │ │ ├── TestPluginNuget.csproj
│ │ │ ├── TestPluginNuget.sln
│ │ │ └── packages.config
│ │ └── LibraryExporter/
│ │ ├── LibraryExporter.psm1
│ │ └── plugin.info
│ └── Scripts/
│ ├── FullPowerShellScript.ps1
│ └── FullPythonScript.py
├── Mapping/
│ ├── AboutWindow.ps1
│ ├── CategoryConfigWindow.ps1
│ ├── CrashHandlerWindow.ps1
│ ├── FirstTimeWizardWindow.ps1
│ ├── GameEditWindow.ps1
│ ├── InstalledGamesWindow.ps1
│ ├── MainWindow.ps1
│ ├── MetadataLookupWindow.ps1
│ ├── NotificationsWindow.ps1
│ ├── OpenFileWindow.ps1
│ ├── SettingsWindow.ps1
│ ├── SetupUninstallWindow.ps1
│ ├── SetupWindow.ps1
│ └── SystemDialog.ps1
├── PlayniteCommon.ps1
├── RunTests.ps1
├── Setup/
│ └── Setup.Tests.ps1
├── TestConfig.Template.yaml
├── TestExtensions.ps1
└── UI/
├── CustomGames.Tests.ps1
├── FirstTimeWizard.Tests.ps1
├── GameEditWindow.Tests.ps1
├── InstalledGamesImport.Tests.ps1
└── Startup.Tests.ps1
Showing preview only (725K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (7464 symbols across 733 files)
FILE: source/Playnite.DesktopApp/Api/MainViewAPI.cs
class MainViewAPI (line 15) | public class MainViewAPI : IMainViewAPI
method MainViewAPI (line 68) | public MainViewAPI(DesktopAppViewModel mainModel)
method OpenPluginSettings (line 73) | public bool OpenPluginSettings(Guid pluginId)
method SwitchToLibraryView (line 78) | public void SwitchToLibraryView()
method SelectGame (line 83) | public void SelectGame(Guid gameId)
method SelectGames (line 96) | public void SelectGames(IEnumerable<Guid> gameIds)
method ApplyFilterPreset (line 101) | public void ApplyFilterPreset(Guid filterId)
method ApplyFilterPreset (line 106) | public void ApplyFilterPreset(FilterPreset preset)
method GetActiveFilterPreset (line 111) | public Guid GetActiveFilterPreset()
method GetCurrentFilterSettings (line 116) | public FilterPresetSettings GetCurrentFilterSettings()
method OpenSearch (line 121) | public void OpenSearch(string searchTerm)
method OpenSearch (line 126) | public void OpenSearch(SearchContext context, string searchTerm)
method OpenEditDialog (line 131) | public bool? OpenEditDialog(Guid gameId)
method OpenEditDialog (line 140) | public bool? OpenEditDialog(List<Guid> gameIds)
method GetSortedFilterPresets (line 149) | public List<FilterPreset> GetSortedFilterPresets()
method GetSortedFilterFullscreenPresets (line 154) | public List<FilterPreset> GetSortedFilterFullscreenPresets()
method ToggleFullscreenView (line 159) | public void ToggleFullscreenView()
FILE: source/Playnite.DesktopApp/App.xaml.cs
class App (line 14) | public partial class App : Application
method App (line 16) | public App()
FILE: source/Playnite.DesktopApp/Controls/AddonsSections/AddonUpdates.xaml.cs
class AddonUpdates (line 21) | public partial class AddonUpdates : UserControl
method AddonUpdates (line 23) | public AddonUpdates()
FILE: source/Playnite.DesktopApp/Controls/AddonsSections/BrowseAddons.xaml.cs
class BrowseAddons (line 21) | public partial class BrowseAddons : UserControl
method BrowseAddons (line 23) | public BrowseAddons()
FILE: source/Playnite.DesktopApp/Controls/AddonsSections/InstalledExtensions.xaml.cs
class InstalledExtensions (line 21) | public partial class InstalledExtensions : UserControl
method InstalledExtensions (line 23) | public InstalledExtensions()
FILE: source/Playnite.DesktopApp/Controls/AddonsSections/InstalledThemes.xaml.cs
class InstalledThemes (line 21) | public partial class InstalledThemes : UserControl
method InstalledThemes (line 23) | public InstalledThemes()
FILE: source/Playnite.DesktopApp/Controls/ComboBoxList.cs
class ComboBoxList (line 16) | public class ComboBoxList : ComboBoxListBase
method ItemsSourcePropertyChangedCallback (line 44) | private static void ItemsSourcePropertyChangedCallback(DependencyObjec...
method SetSelectedItem (line 59) | internal void SetSelectedItem()
method SelectedItemsPropertyChangedCallback (line 113) | private static void SelectedItemsPropertyChangedCallback(DependencyObj...
method ComboBoxList (line 123) | static ComboBoxList()
method OnApplyTemplate (line 128) | public override void OnApplyTemplate()
method ClearButtonAction (line 148) | public override void ClearButtonAction(RoutedEventArgs e)
method List_SelectionChanged (line 153) | private void List_SelectionChanged(object sender, EventArgs e)
method UpdateTextStatus (line 165) | private void UpdateTextStatus()
FILE: source/Playnite.DesktopApp/Controls/ComboBoxListBase.cs
class ComboBoxListBase (line 14) | [TemplatePart(Name = "PART_ItemsPanel", Type = typeof(ItemsControl))]
method OnApplyTemplate (line 36) | public override void OnApplyTemplate()
method ClearButtonAction (line 86) | public virtual void ClearButtonAction(RoutedEventArgs e)
FILE: source/Playnite.DesktopApp/Controls/DdItemListSelectionBox.cs
class DdItemListSelectionBox (line 17) | [TemplatePart(Name = "PART_ToggleSelectedOnly", Type = typeof(ToggleButt...
method ItemsListPropertyChangedCallback (line 57) | private static void ItemsListPropertyChangedCallback(DependencyObject ...
method List_SelectionChanged (line 71) | private void List_SelectionChanged(object sender, EventArgs e)
method BoundIdsPropertyChangedCallback (line 101) | private static void BoundIdsPropertyChangedCallback(DependencyObject s...
method DdItemListSelectionBox (line 115) | static DdItemListSelectionBox()
method OnApplyTemplate (line 120) | public override void OnApplyTemplate()
method ClearButtonAction (line 207) | public override void ClearButtonAction(RoutedEventArgs e)
method UpdateTextStatus (line 213) | private void UpdateTextStatus()
FILE: source/Playnite.DesktopApp/Controls/ExpanderEx.cs
class ExpanderEx (line 12) | public class ExpanderEx : Expander
method ExpanderEx (line 30) | static ExpanderEx()
method ExpanderEx (line 35) | public ExpanderEx() : this(PlayniteApplication.Current?.AppSettings)
method ExpanderEx (line 39) | public ExpanderEx(PlayniteSettings settings) : base()
method ViewSettings_PropertyChanged (line 51) | private void ViewSettings_PropertyChanged(object sender, PropertyChang...
method ExpanderEx_Loaded (line 69) | private void ExpanderEx_Loaded(object sender, RoutedEventArgs e)
method ExpanderEx_Unloaded (line 88) | private void ExpanderEx_Unloaded(object sender, RoutedEventArgs e)
method ExpanderEx_Collapsed (line 99) | private void ExpanderEx_Collapsed(object sender, RoutedEventArgs e)
method ExpanderEx_Expanded (line 114) | private void ExpanderEx_Expanded(object sender, RoutedEventArgs e)
FILE: source/Playnite.DesktopApp/Controls/FilterEnumSelectionBox.cs
class FilterEnumSelectionBox (line 16) | public class FilterEnumSelectionBox : FilterSelectionBoxBase
class SelectionObject (line 20) | public class SelectionObject
method SelectionObject (line 25) | public SelectionObject(Enum enumValue)
method ToString (line 31) | public override string ToString()
method EnumTypePropertyChangedCallback (line 56) | private static void EnumTypePropertyChangedCallback(DependencyObject s...
method NewItem_PropertyChanged (line 85) | private void NewItem_PropertyChanged(object sender, PropertyChangedEve...
method FilterPropertiesPropertyChangedCallback (line 125) | private static void FilterPropertiesPropertyChangedCallback(Dependency...
method FilterEnumSelectionBox (line 146) | static FilterEnumSelectionBox()
method OnApplyTemplate (line 151) | public override void OnApplyTemplate()
method UpdateTextStatus (line 157) | private void UpdateTextStatus()
method ClearButtonAction (line 172) | public override void ClearButtonAction(RoutedEventArgs e)
FILE: source/Playnite.DesktopApp/Controls/FilterSelectionBox.cs
class FilterSelectionBoxBase (line 16) | [TemplatePart(Name = "PART_TextFilterInput", Type = typeof(TextBox))]
method OnApplyTemplate (line 33) | public override void OnApplyTemplate()
class FilterSelectionBox (line 72) | public class FilterSelectionBox : FilterSelectionBoxBase
method ItemsListPropertyChangedCallback (line 95) | private static void ItemsListPropertyChangedCallback(DependencyObject ...
method List_SelectionChanged (line 121) | public void List_SelectionChanged(object sender, EventArgs e)
method FilterPropertiesPropertyChangedCallback (line 151) | private static void FilterPropertiesPropertyChangedCallback(Dependency...
method FilterSelectionBox (line 210) | static FilterSelectionBox()
method OnApplyTemplate (line 215) | public override void OnApplyTemplate()
method ClearButtonAction (line 233) | public override void ClearButtonAction(RoutedEventArgs e)
method UpdateTextStatus (line 241) | private void UpdateTextStatus()
FILE: source/Playnite.DesktopApp/Controls/FilterStringSelectionBox.cs
class FilterStringSelectionBox (line 14) | public class FilterStringSelectionBox : FilterSelectionBoxBase
method ItemsListPropertyChangedCallback (line 35) | private static void ItemsListPropertyChangedCallback(DependencyObject ...
method List_SelectionChanged (line 56) | private void List_SelectionChanged(object sender, EventArgs e)
method FilterPropertiesPropertyChangedCallback (line 86) | private static void FilterPropertiesPropertyChangedCallback(Dependency...
method FilterStringSelectionBox (line 107) | static FilterStringSelectionBox()
method OnApplyTemplate (line 112) | public override void OnApplyTemplate()
method UpdateTextStatus (line 118) | private void UpdateTextStatus()
method ClearButtonAction (line 126) | public override void ClearButtonAction(RoutedEventArgs e)
FILE: source/Playnite.DesktopApp/Controls/GameListItem.cs
class GameListItem (line 24) | [TemplatePart(Name = "PART_PanelHost", Type = typeof(FrameworkElement))]
method GameListItem (line 38) | static GameListItem()
method GameListItem (line 43) | public GameListItem() : this(DesktopApplication.Current?.MainModel)
method GameListItem (line 47) | public GameListItem(DesktopAppViewModel mainModel)
method OnApplyTemplate (line 59) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/GameTaskView.xaml.cs
class GameTaskView (line 26) | public partial class GameTaskView : UserControl, INotifyPropertyChanged
method GameTaskView (line 310) | public GameTaskView()
method OnPropertyChanged (line 315) | public void OnPropertyChanged(string name)
method ButtonBrowsePath_Click (line 320) | private void ButtonBrowsePath_Click(object sender, RoutedEventArgs e)
method ComboType_SelectionChanged (line 331) | private void ComboType_SelectionChanged(object sender, SelectionChange...
method ComboTrackingMode_SelectionChanged (line 336) | private void ComboTrackingMode_SelectionChanged(object sender, Selecti...
method NotifyRowChange (line 342) | private void NotifyRowChange()
method CheckOverrideArgs_Checked (line 356) | private void CheckOverrideArgs_Checked(object sender, RoutedEventArgs e)
method ComboEmulator_SelectionChanged (line 370) | private void ComboEmulator_SelectionChanged(object sender, SelectionCh...
method ComboEmulatorConfig_SelectionChanged (line 388) | private void ComboEmulatorConfig_SelectionChanged(object sender, Selec...
method CheckBox_Checked (line 448) | private void CheckBox_Checked(object sender, RoutedEventArgs e)
FILE: source/Playnite.DesktopApp/Controls/GamesGridView.xaml.cs
class GamesGridViewColumn (line 24) | public class GamesGridViewColumn : GridViewColumn
method GamesGridViewColumn (line 30) | public GamesGridViewColumn() : base()
class GamesGridView (line 38) | public partial class GamesGridView : UserControl
method GamesGridView (line 91) | public GamesGridView()
method GamesGridView_Loaded (line 99) | private void GamesGridView_Loaded(object sender, RoutedEventArgs e)
method ListViewColumn_PropertyChanged (line 140) | private void ListViewColumn_PropertyChanged(object sender, PropertyCha...
method SelectedItemsListChanged (line 166) | public static void SelectedItemsListChanged(DependencyObject d, Depend...
method InitializeColumns (line 182) | private void InitializeColumns()
method Columns_CollectionChanged (line 198) | private void Columns_CollectionChanged(object sender, System.Collectio...
method GetColumn (line 208) | private GamesGridViewColumn GetColumn(GameField field)
method CreateColumn (line 335) | private GamesGridViewColumn CreateColumn(GameField field, SortOrder? s...
method GridGames_SelectionChanged (line 362) | private void GridGames_SelectionChanged(object sender, SelectionChange...
method Grid_MouseDoubleClick (line 369) | private void Grid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
method GridViewColumnHeader_Click (line 395) | private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e)
FILE: source/Playnite.DesktopApp/Controls/GridViewPanel.cs
class GridViewPanel (line 14) | public class GridViewPanel : VirtualizingPanel, IScrollInfo
method GridViewPanel (line 107) | public GridViewPanel() : base()
method MeasureOverride (line 111) | protected override Size MeasureOverride(Size availableSize)
method ArrangeOverride (line 208) | protected override Size ArrangeOverride(Size finalSize)
method GetItemRect (line 224) | private Rect GetItemRect(int itemIndex)
method GetVisibleRange (line 241) | private void GetVisibleRange(double expanderOffset, out int firstIndex...
method CleanUpItems (line 274) | private void CleanUpItems()
method CleanUpItems (line 279) | private void CleanUpItems(int firstIndex, int lastIndex)
method OnItemsChanged (line 306) | protected override void OnItemsChanged(object sender, ItemsChangedEven...
method GetExtent (line 320) | internal Size GetExtent()
method UpdateScrollInfo (line 356) | internal void UpdateScrollInfo(Size availableSize)
method SetHorizontalOffset (line 401) | public void SetHorizontalOffset(double newOffset)
method SetVerticalOffset (line 405) | public void SetVerticalOffset(double newOffset)
method BringIndexIntoView (line 424) | protected override void BringIndexIntoView(int index)
method MakeVisible (line 448) | public Rect MakeVisible(Visual visual, Rect rectangle)
method LineLeft (line 475) | public void LineLeft()
method LineRight (line 479) | public void LineRight()
method LineUp (line 483) | public void LineUp()
method LineDown (line 488) | public void LineDown()
method MouseWheelDown (line 493) | public void MouseWheelDown()
method MouseWheelLeft (line 498) | public void MouseWheelLeft()
method MouseWheelRight (line 503) | public void MouseWheelRight()
method MouseWheelUp (line 508) | public void MouseWheelUp()
method PageLeft (line 513) | public void PageLeft()
method PageRight (line 517) | public void PageRight()
method PageUp (line 521) | public void PageUp()
method PageDown (line 526) | public void PageDown()
FILE: source/Playnite.DesktopApp/Controls/LibraryStatistics.xaml.cs
class LibraryStatistics (line 22) | public partial class LibraryStatistics : UserControl
method LibraryStatistics (line 24) | public LibraryStatistics()
method LibraryStatistics (line 29) | public LibraryStatistics(StatisticsViewModel model)
FILE: source/Playnite.DesktopApp/Controls/LongNumericBox.cs
class UlongNumericBox (line 18) | public class UlongNumericBox : TextBox
method UlongNumericBox (line 73) | static UlongNumericBox()
method UlongNumericBox (line 78) | public UlongNumericBox()
method NumericBox_TextChanged (line 86) | private void NumericBox_TextChanged(object sender, TextChangedEventArg...
method NumericBox_Loaded (line 91) | private void NumericBox_Loaded(object sender, RoutedEventArgs e)
method NumericBox_LostFocus (line 96) | private void NumericBox_LostFocus(object sender, RoutedEventArgs e)
method CoerceUlongValue (line 122) | private static object CoerceUlongValue(DependencyObject element, objec...
method UlongValuePropertyChanged (line 130) | private static void UlongValuePropertyChanged(DependencyObject sender,...
method MinUlongValuePropertyChanged (line 134) | private static void MinUlongValuePropertyChanged(DependencyObject send...
method MaxUlongValuePropertyChanged (line 138) | private static void MaxUlongValuePropertyChanged(DependencyObject send...
class LongNumericBox (line 143) | public class LongNumericBox : TextBox
method LongNumericBox (line 198) | static LongNumericBox()
method LongNumericBox (line 203) | public LongNumericBox()
method NumericBox_TextChanged (line 211) | private void NumericBox_TextChanged(object sender, TextChangedEventArg...
method NumericBox_Loaded (line 216) | private void NumericBox_Loaded(object sender, RoutedEventArgs e)
method NumericBox_LostFocus (line 221) | private void NumericBox_LostFocus(object sender, RoutedEventArgs e)
method CoerceLongValue (line 247) | private static object CoerceLongValue(DependencyObject element, object...
method LongValuePropertyChanged (line 255) | private static void LongValuePropertyChanged(DependencyObject sender, ...
method MinLongValuePropertyChanged (line 259) | private static void MinLongValuePropertyChanged(DependencyObject sende...
method MaxLongValuePropertyChanged (line 263) | private static void MaxLongValuePropertyChanged(DependencyObject sende...
FILE: source/Playnite.DesktopApp/Controls/Menus/FilterPresetsMenu.cs
class FilterPresetsMenu (line 15) | public class FilterPresetsMenu : ContextMenu
method FilterPresetsMenu (line 19) | static FilterPresetsMenu()
method FilterPresetsMenu (line 24) | public FilterPresetsMenu() : this(DesktopApplication.Current?.MainModel)
method FilterPresetsMenu (line 28) | public FilterPresetsMenu(DesktopAppViewModel model)
method FilterPresetsMenu_Opened (line 44) | private void FilterPresetsMenu_Opened(object sender, RoutedEventArgs e)
FILE: source/Playnite.DesktopApp/Controls/Menus/GameGroupMenu.cs
class GameGroupMenu (line 14) | public class GameGroupMenu : ContextMenu
method GameGroupMenu (line 24) | static GameGroupMenu()
method GameGroupMenu (line 29) | public GameGroupMenu() : this(PlayniteApplication.Current?.AppSettings...
method GameGroupMenu (line 33) | public GameGroupMenu(PlayniteSettings settings, DesktopAppViewModel ma...
method GameGroupMenu_Opened (line 44) | private void GameGroupMenu_Opened(object sender, RoutedEventArgs e)
method InitializeItems (line 49) | public void InitializeItems()
method Collapse (line 92) | private void Collapse()
method Expand (line 100) | private void Expand()
method CollapseAll (line 108) | private void CollapseAll()
method ExpandAll (line 117) | private void ExpandAll()
FILE: source/Playnite.DesktopApp/Controls/Menus/GameMenu.cs
class GameMenu (line 29) | public class GameMenu : ContextMenu
method GameMenu (line 69) | static GameMenu()
method GameMenu (line 74) | public GameMenu() : this(DesktopApplication.Current?.MainModel)
method GameMenu (line 78) | public GameMenu(DesktopAppViewModel model)
method GameMenu_Closed (line 90) | private void GameMenu_Closed(object sender, RoutedEventArgs e)
method GameMenu_Opened (line 95) | private void GameMenu_Opened(object sender, RoutedEventArgs e)
method Deinitialize (line 100) | public void Deinitialize()
method InitializeItems (line 105) | private void InitializeItems(Game game)
method InitializeItems (line 327) | private void InitializeItems(List<Game> games)
method InitializeItems (line 461) | public void InitializeItems()
method LoadCompletionStatusItem (line 539) | private MenuItem LoadCompletionStatusItem(List<Game> games)
method LoadCompletionStatusItem (line 559) | private MenuItem LoadCompletionStatusItem(Game game)
method AddExtensionItems (line 580) | private void AddExtensionItems(List<Game> games)
FILE: source/Playnite.DesktopApp/Controls/Menus/GroupSettingsMenu.cs
class GroupSettingsMenu (line 20) | public class GroupSettingsMenu : ContextMenu
method GroupSettingsMenu (line 24) | static GroupSettingsMenu()
method GroupSettingsMenu (line 29) | public GroupSettingsMenu() : this(PlayniteApplication.Current?.AppSett...
method GroupSettingsMenu (line 33) | public GroupSettingsMenu(PlayniteSettings settings)
method InitializeItems (line 41) | public void InitializeItems()
FILE: source/Playnite.DesktopApp/Controls/Menus/MainMenu.cs
class MainMenu (line 26) | public class MainMenu : ContextMenu
method MainMenu (line 36) | static MainMenu()
method MainMenu (line 41) | public MainMenu() : this(DesktopApplication.Current?.MainModel)
method MainMenu (line 45) | public MainMenu(DesktopAppViewModel model)
method AddMenuChild (line 62) | public static MenuItem AddMenuChild(
method InitializeItems (line 95) | public void InitializeItems()
method MainMenu_Opened (line 212) | private void MainMenu_Opened(object sender, RoutedEventArgs e)
method AddEmulationUpdateItems (line 221) | private void AddEmulationUpdateItems()
method AddSidebarViewItems (line 239) | private void AddSidebarViewItems()
method AddToolsItems (line 252) | private void AddToolsItems()
method ClearExtensionItems (line 281) | private void ClearExtensionItems()
method AddExtensionItems (line 299) | private void AddExtensionItems()
FILE: source/Playnite.DesktopApp/Controls/Menus/SortSettingsMenu.cs
class SortSettingsMenu (line 20) | public class SortSettingsMenu : ContextMenu
method SortSettingsMenu (line 24) | static SortSettingsMenu()
method SortSettingsMenu (line 29) | public SortSettingsMenu() : this(PlayniteApplication.Current?.AppSetti...
method SortSettingsMenu (line 33) | public SortSettingsMenu(PlayniteSettings settings)
method InitializeItems (line 41) | public void InitializeItems()
FILE: source/Playnite.DesktopApp/Controls/Menus/TrayContextMenu.cs
class TrayContextMenu (line 22) | public class TrayContextMenu : ContextMenu
method TrayContextMenu (line 27) | static TrayContextMenu()
method TrayContextMenu (line 32) | public TrayContextMenu()
method TrayContextMenu (line 36) | public TrayContextMenu(DesktopAppViewModel model)
method TrayContextMenu_Opened (line 42) | private void TrayContextMenu_Opened(object sender, RoutedEventArgs e)
method AddMenuChild (line 47) | private MenuItem AddMenuChild(
method InitializeItems (line 82) | private void InitializeItems()
method GetGameIcon (line 141) | private object GetGameIcon(Game game)
FILE: source/Playnite.DesktopApp/Controls/Menus/ViewSelectionMenu.cs
class ViewSelectionMenu (line 20) | public class ViewSelectionMenu : ContextMenu
method ViewSelectionMenu (line 24) | static ViewSelectionMenu()
method ViewSelectionMenu (line 29) | public ViewSelectionMenu() : this(PlayniteApplication.Current?.AppSett...
method ViewSelectionMenu (line 33) | public ViewSelectionMenu(PlayniteSettings settings)
method InitializeItems (line 41) | public void InitializeItems()
FILE: source/Playnite.DesktopApp/Controls/Menus/ViewSettingsMenu.cs
class ViewSettingsMenu (line 21) | public class ViewSettingsMenu : ContextMenu
method ViewSettingsMenu (line 25) | static ViewSettingsMenu()
method ViewSettingsMenu (line 30) | public ViewSettingsMenu() : this(PlayniteApplication.Current?.AppSetti...
method ViewSettingsMenu (line 34) | public ViewSettingsMenu(PlayniteSettings settings)
method GenerateSortMenu (line 42) | public static void GenerateSortMenu(ItemCollection itemsRoot, Playnite...
method GenerateGroupMenu (line 49) | public static void GenerateGroupMenu(ItemCollection itemsRoot, Playnit...
method InitializeItems (line 59) | public void InitializeItems()
FILE: source/Playnite.DesktopApp/Controls/MetadataDownloadSettings.xaml.cs
class MetadataDownloadSettings (line 28) | public partial class MetadataDownloadSettings : UserControl, INotifyProp...
class MetadataSource (line 30) | public class MetadataSource : ObservableObject
class FieldsSelectionSettings (line 66) | public class FieldsSelectionSettings : ObservableObject
method FieldsSelectionSettings (line 106) | public FieldsSelectionSettings(ObservableCollection<MetadataSource> ...
method OnSettingsChanged (line 123) | private void OnSettingsChanged()
method SettingsPropertyChangedCallback (line 364) | private static void SettingsPropertyChangedCallback(DependencyObject s...
method OnPropertyChanged (line 509) | public void OnPropertyChanged([CallerMemberName]string name = null)
method MetadataDownloadSettings (line 514) | public MetadataDownloadSettings()
method SetupField (line 542) | internal FieldsSelectionSettings SetupField(
method SetAllProperties (line 602) | private void SetAllProperties()
method SelectAllSelectionImport (line 627) | private void SelectAllSelectionImport(bool select)
FILE: source/Playnite.DesktopApp/Controls/NullableIntBox.cs
class NullIntNumericBox (line 12) | public class NullIntNumericBox : TextBox
method NullIntNumericBox (line 67) | static NullIntNumericBox()
method NullIntNumericBox (line 72) | public NullIntNumericBox()
method NumericBox_Loaded (line 79) | private void NumericBox_Loaded(object sender, RoutedEventArgs e)
method NumericBox_LostFocus (line 84) | private void NumericBox_LostFocus(object sender, RoutedEventArgs e)
method CoerceValue (line 110) | private static object CoerceValue(DependencyObject element, object bas...
method ValuePropertyChanged (line 126) | private static void ValuePropertyChanged(DependencyObject sender, Depe...
method MinValuePropertyChanged (line 130) | private static void MinValuePropertyChanged(DependencyObject sender, D...
method MaxValuePropertyChanged (line 134) | private static void MaxValuePropertyChanged(DependencyObject sender, D...
FILE: source/Playnite.DesktopApp/Controls/NumericDoubleBox.cs
class DoubleNumericBox (line 20) | public class DoubleNumericBox : TextBox
method DoubleNumericBox (line 81) | static DoubleNumericBox()
method DoubleNumericBox (line 86) | public DoubleNumericBox()
method NumericDoubleBox_PreviewKeyDown (line 95) | private void NumericDoubleBox_PreviewKeyDown(object sender, KeyEventAr...
method NumericDoubleBox_TextChanged (line 108) | private void NumericDoubleBox_TextChanged(object sender, TextChangedEv...
method NumericDoubleBox_Loaded (line 113) | private void NumericDoubleBox_Loaded(object sender, RoutedEventArgs e)
method NumericDoubleBox_LostFocus (line 118) | private void NumericDoubleBox_LostFocus(object sender, RoutedEventArgs e)
method CoerceDoubleValue (line 146) | private static object CoerceDoubleValue(DependencyObject element, obje...
method DoubleValuePropertyChanged (line 163) | private static void DoubleValuePropertyChanged(DependencyObject sender...
method MinDoubleValuePropertyChanged (line 182) | private static void MinDoubleValuePropertyChanged(DependencyObject sen...
method MaxDoubleValuePropertyChanged (line 186) | private static void MaxDoubleValuePropertyChanged(DependencyObject sen...
method TryParseForCurrentCulture (line 190) | private static bool TryParseForCurrentCulture(string text, out double ...
FILE: source/Playnite.DesktopApp/Controls/PathSelectionBox.cs
class PathSelectionBox (line 14) | [TemplatePart(Name = "PART_ButtonDirectorySelect", Type = typeof(Button))]
method PathSelectionBox (line 45) | static PathSelectionBox()
method PathSelectionBox (line 50) | public PathSelectionBox()
method OnApplyTemplate (line 54) | public override void OnApplyTemplate()
method SetButtonVisibility (line 89) | private void SetButtonVisibility()
FILE: source/Playnite.DesktopApp/Controls/SearchBox.cs
class SearchBox (line 14) | [TemplatePart(Name = "PART_SeachIcon", Type = typeof(FrameworkElement))]
method SearchBox (line 72) | static SearchBox()
method SearchBox (line 77) | public SearchBox()
method OnApplyTemplate (line 81) | public override void OnApplyTemplate()
method TextInputText_GotFocus (line 116) | private void TextInputText_GotFocus(object sender, RoutedEventArgs e)
method UpdateIconStates (line 121) | private void UpdateIconStates()
method ClearFocus (line 146) | public void ClearFocus()
method TextFilter_KeyUp (line 161) | private void TextFilter_KeyUp(object sender, KeyEventArgs e)
method ClearImage_MouseUp (line 169) | private void ClearImage_MouseUp(object sender, MouseButtonEventArgs e)
method TextFilter_TextChanged (line 174) | private void TextFilter_TextChanged(object sender, TextChangedEventArg...
method TextPropertyChangedCallback (line 187) | private static void TextPropertyChangedCallback(DependencyObject sende...
method ShowImagePropertyChangedCallback (line 207) | private static void ShowImagePropertyChangedCallback(DependencyObject ...
method IsFocusedPropertyChangedCallback (line 213) | private static void IsFocusedPropertyChangedCallback(DependencyObject ...
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/AppearanceAdvanced.xaml.cs
class AppearanceAdvanced (line 21) | public partial class AppearanceAdvanced : UserControl
method AppearanceAdvanced (line 23) | public AppearanceAdvanced()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/AppearanceDetailsView.xaml.cs
class AppearanceDetailsView (line 21) | public partial class AppearanceDetailsView : UserControl
method AppearanceDetailsView (line 23) | public AppearanceDetailsView()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/AppearanceGeneral.xaml.cs
class AppearanceGeneral (line 21) | public partial class AppearanceGeneral : UserControl
method AppearanceGeneral (line 23) | public AppearanceGeneral()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/AppearanceGridView.xaml.cs
class AppearanceGridView (line 21) | public partial class AppearanceGridView : UserControl
method AppearanceGridView (line 23) | public AppearanceGridView()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/AppearanceLayout.xaml.cs
class AppearanceLayout (line 21) | public partial class AppearanceLayout : UserControl
method AppearanceLayout (line 23) | public AppearanceLayout()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/AppearanceListView.xaml.cs
class AppearanceListView (line 21) | public partial class AppearanceListView : UserControl
method AppearanceListView (line 23) | public AppearanceListView()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/AppearanceTopPanel.xaml.cs
class AppearanceTopPanel (line 21) | public partial class AppearanceTopPanel : UserControl
method AppearanceTopPanel (line 23) | public AppearanceTopPanel()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/Backup.xaml.cs
class Backup (line 21) | public partial class Backup : UserControl
method Backup (line 23) | public Backup()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/ClientShutdown.xaml.cs
class ClientShutdown (line 21) | public partial class ClientShutdown : UserControl
method ClientShutdown (line 23) | public ClientShutdown()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/Development.xaml.cs
class Development (line 21) | public partial class Development : UserControl
method Development (line 23) | public Development()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/EmptyParent.xaml.cs
class EmptyParent (line 21) | public partial class EmptyParent : UserControl
method EmptyParent (line 23) | public EmptyParent()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/ErrorLoading.xaml.cs
class ErrorLoading (line 21) | public partial class ErrorLoading : UserControl
method ErrorLoading (line 23) | public ErrorLoading()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/General.xaml.cs
class General (line 21) | public partial class General : UserControl
method General (line 23) | public General()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/GeneralAdvanced.xaml.cs
class GeneralAdvanced (line 21) | public partial class GeneralAdvanced : UserControl
method GeneralAdvanced (line 23) | public GeneralAdvanced()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/ImportExlusionList.xaml.cs
class ImportExlusionList (line 21) | public partial class ImportExlusionList : UserControl
method ImportExlusionList (line 23) | public ImportExlusionList()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/Input.xaml.cs
class Input (line 21) | public partial class Input : UserControl
method Input (line 23) | public Input()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/LibrariesConfigWindowInfo.xaml.cs
class LibrariesConfigWindowInfo (line 21) | public partial class LibrariesConfigWindowInfo : UserControl
method LibrariesConfigWindowInfo (line 23) | public LibrariesConfigWindowInfo()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/Metadata.xaml.cs
class Metadata (line 21) | public partial class Metadata : UserControl
method Metadata (line 23) | public Metadata()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/NoSettingsAvailable.xaml.cs
class NoSettingsAvailable (line 21) | public partial class NoSettingsAvailable : UserControl
method NoSettingsAvailable (line 23) | public NoSettingsAvailable()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/Performance.xaml.cs
class Performance (line 21) | public partial class Performance : UserControl
method Performance (line 23) | public Performance()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/Scripting.xaml.cs
class Scripting (line 21) | public partial class Scripting : UserControl
method Scripting (line 23) | public Scripting()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/Search.xaml.cs
class Search (line 21) | public partial class Search : UserControl
method Search (line 23) | public Search()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/Sorting.xaml.cs
class Sorting (line 21) | public partial class Sorting : UserControl
method Sorting (line 23) | public Sorting()
FILE: source/Playnite.DesktopApp/Controls/SettingsSections/Updates.xaml.cs
class Updates (line 21) | public partial class Updates : UserControl
method Updates (line 23) | public Updates()
FILE: source/Playnite.DesktopApp/Controls/SidebarItem.cs
class SidebarItem (line 13) | [TemplatePart(Name = "PART_ProgressStatus", Type = typeof(ProgressBar))]
method SidebarItem (line 18) | static SidebarItem()
method OnApplyTemplate (line 23) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/SliderEx.cs
class SliderEx (line 12) | public class SliderEx : Slider
method SliderEx (line 16) | public SliderEx() : base()
method SliderEx_KeyUp (line 21) | private void SliderEx_KeyUp(object sender, System.Windows.Input.KeyEve...
method OnThumbDragCompleted (line 46) | protected override void OnThumbDragCompleted(DragCompletedEventArgs e)
method FinalValueChangedCallback (line 52) | private static void FinalValueChangedCallback(DependencyObject sender,...
method UpdateFinalValue (line 63) | private void UpdateFinalValue()
method OnIncreaseLarge (line 70) | protected override void OnIncreaseLarge()
method OnIncreaseSmall (line 76) | protected override void OnIncreaseSmall()
method OnDecreaseLarge (line 82) | protected override void OnDecreaseLarge()
method OnDecreaseSmall (line 88) | protected override void OnDecreaseSmall()
FILE: source/Playnite.DesktopApp/Controls/SliderWithPopup.xaml.cs
class SliderWithPopup (line 10) | public partial class SliderWithPopup : UserControl
method SliderWithPopup (line 12) | public SliderWithPopup()
method Slider_MouseMove (line 42) | private void Slider_MouseMove(object sender, MouseEventArgs e)
method PositionPopupBelowTheEndOfTheSlider (line 52) | private void PositionPopupBelowTheEndOfTheSlider()
method Slider_MouseLeave (line 58) | private void Slider_MouseLeave(object sender, MouseEventArgs e)
FILE: source/Playnite.DesktopApp/Controls/TopPanelItem.cs
class TopPanelItem (line 13) | public class TopPanelItem : Button
method TopPanelItem (line 26) | static TopPanelItem()
method OnApplyTemplate (line 31) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/Views/BaseGamesView.cs
class BaseGamesView (line 20) | [TemplatePart(Name = "PART_ListGames", Type = typeof(ExtendedListBox))]
method BaseGamesView (line 30) | public BaseGamesView(DesktopView viewType) : this(viewType, DesktopApp...
method BaseGamesView (line 34) | public BaseGamesView(DesktopView viewType, DesktopAppViewModel mainModel)
method BaseGamesView_Loaded (line 50) | private void BaseGamesView_Loaded(object sender, RoutedEventArgs e)
method BaseGamesView_Unloaded (line 55) | private void BaseGamesView_Unloaded(object sender, RoutedEventArgs e)
method ViewSettings_PropertyChanged (line 60) | private void ViewSettings_PropertyChanged(object sender, PropertyChang...
method SetViewActiveBindings (line 68) | private void SetViewActiveBindings()
method OnApplyTemplate (line 110) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/Views/DetailsViewGameOverview.cs
class DetailsViewGameOverview (line 12) | public class DetailsViewGameOverview : GameOverview
method DetailsViewGameOverview (line 14) | static DetailsViewGameOverview()
method DetailsViewGameOverview (line 19) | public DetailsViewGameOverview() : base(DesktopView.Details)
method DetailsViewGameOverview (line 23) | public DetailsViewGameOverview(DesktopAppViewModel mainModel) : base(D...
method OnApplyTemplate (line 27) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/Views/ExplorerPanel.cs
class ExplorerPanel (line 21) | [TemplatePart(Name = "PART_SelectFields", Type = typeof(Selector))]
method ExplorerPanel (line 30) | static ExplorerPanel()
method ExplorerPanel (line 35) | public ExplorerPanel() : this(DesktopApplication.Current?.MainModel)
method ExplorerPanel (line 39) | public ExplorerPanel(DesktopAppViewModel mainModel)
method OnApplyTemplate (line 51) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/Views/FilterPanel.cs
class FilterPanel (line 22) | [TemplatePart(Name = "PART_ButtonClear", Type = typeof(ButtonBase))]
method FilterPanel (line 40) | static FilterPanel()
method FilterPanel (line 45) | public FilterPanel() : this(DesktopApplication.Current?.MainModel)
method FilterPanel (line 49) | public FilterPanel(DesktopAppViewModel mainModel)
method OnApplyTemplate (line 61) | public override void OnApplyTemplate()
method SetToggleFilterWithTooltip (line 210) | private void SetToggleFilterWithTooltip(string binding, string text, s...
method SetToggleFilter (line 224) | private void SetToggleFilter(string binding, string countBinding, stri...
method SetLabelTag (line 241) | private void SetLabelTag(string binding, string text, IValueConverter ...
method SetFilterSearchBoxFilter (line 260) | private void SetFilterSearchBoxFilter(string filterBinding)
method SetFilterSelectionBoxFilter (line 278) | private void SetFilterSelectionBoxFilter(string listBinding, string fi...
method SetFilterEnumSelectionBoxFilter (line 300) | private void SetFilterEnumSelectionBoxFilter(string filterBinding, Typ...
method SetFilterStringSelectionBoxFilter (line 318) | private void SetFilterStringSelectionBoxFilter(string listBinding, str...
FILE: source/Playnite.DesktopApp/Controls/Views/GameOverview.cs
class GameOverview (line 26) | [TemplatePart(Name = "PART_ElemPlayTime", Type = typeof(FrameworkElement))]
method GameOverview (line 154) | static GameOverview()
method GameOverview (line 159) | public GameOverview(DesktopView viewType) : this(viewType, DesktopAppl...
method GameOverview (line 163) | public GameOverview(DesktopView viewType, DesktopAppViewModel mainModel)
method GameOverview_DataContextChanged (line 181) | private void GameOverview_DataContextChanged(object sender, Dependency...
method GameOverview_Loaded (line 186) | private void GameOverview_Loaded(object sender, RoutedEventArgs e)
method GameOverview_Unloaded (line 192) | private void GameOverview_Unloaded(object sender, RoutedEventArgs e)
method ViewSettings_PropertyChanged (line 198) | private void ViewSettings_PropertyChanged(object sender, PropertyChang...
method AppSettings_PropertyChanged (line 209) | private void AppSettings_PropertyChanged(object sender, PropertyChange...
method OnApplyTemplate (line 220) | public override void OnApplyTemplate()
method SetBackgroundBinding (line 559) | private void SetBackgroundBinding()
method SetItemsControlBinding (line 576) | private void SetItemsControlBinding(ref ItemsControl elem, string part...
method SetElemVisibility (line 591) | private void SetElemVisibility(ref FrameworkElement elem, string partI...
method SetGameItemTextBinding (line 602) | private void SetGameItemTextBinding(ref TextBlock text, string partId,...
method SetGameItemButtonBinding (line 618) | private void SetGameItemButtonBinding(ref Button button, string partId...
method GetGameBindingPath (line 640) | private string GetGameBindingPath(string path)
method GetFieldItemTemplate (line 645) | private DataTemplate GetFieldItemTemplate(string command, string toolt...
FILE: source/Playnite.DesktopApp/Controls/Views/GridViewGameOverview.cs
class GridViewGameOverview (line 12) | public class GridViewGameOverview : GameOverview
method GridViewGameOverview (line 14) | static GridViewGameOverview()
method GridViewGameOverview (line 19) | public GridViewGameOverview() : base(DesktopView.Grid)
method GridViewGameOverview (line 23) | public GridViewGameOverview(DesktopAppViewModel mainModel) : base(Desk...
method OnApplyTemplate (line 27) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/Views/Library.cs
class Library (line 24) | [TemplatePart(Name = "PART_ImageBackground", Type = typeof(FadeImage))]
method Library (line 38) | static Library()
method Library (line 43) | public Library() : this(DesktopApplication.Current?.MainModel)
method Library (line 47) | public Library(DesktopAppViewModel mainModel)
method ViewSettings_PropertyChanged (line 62) | private void ViewSettings_PropertyChanged(object sender, PropertyChang...
method AppSettings_PropertyChanged (line 70) | private void AppSettings_PropertyChanged(object sender, PropertyChange...
method OnApplyTemplate (line 84) | public override void OnApplyTemplate()
method SetViewBinding (line 140) | private void SetViewBinding(ref Control elem, string partId, DesktopVi...
method SetBackgroundBinding (line 160) | private void SetBackgroundBinding()
method SetBackgroundEffect (line 183) | private void SetBackgroundEffect()
FILE: source/Playnite.DesktopApp/Controls/Views/LibraryDetailsView.cs
class LibraryDetailsView (line 21) | public class LibraryDetailsView : BaseGamesView
method LibraryDetailsView (line 23) | static LibraryDetailsView()
method LibraryDetailsView (line 28) | public LibraryDetailsView() : base(DesktopView.Details)
method LibraryDetailsView (line 32) | public LibraryDetailsView(DesktopAppViewModel mainModel) : base (Deskt...
method OnApplyTemplate (line 36) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/Views/LibraryGridView.cs
class LibraryGridView (line 23) | [TemplatePart(Name = "PART_SliderZoom", Type = typeof(SliderWithPopup))]
method LibraryGridView (line 31) | static LibraryGridView()
method LibraryGridView (line 36) | public LibraryGridView() : base(DesktopView.Grid)
method LibraryGridView (line 44) | public LibraryGridView(DesktopAppViewModel mainModel) : base(DesktopVi...
method LibraryGridView_Loaded (line 50) | private void LibraryGridView_Loaded(object sender, RoutedEventArgs e)
method LibraryGridView_Unloaded (line 56) | private void LibraryGridView_Unloaded(object sender, RoutedEventArgs e)
method ViewSettings_PropertyChanged (line 62) | private void ViewSettings_PropertyChanged(object sender, PropertyChang...
method FilterSettings_FilterChanged (line 77) | private void FilterSettings_FilterChanged(object sender, FilterChanged...
method OnApplyTemplate (line 88) | public override void OnApplyTemplate()
method GetItemsPanelTemplateCache (line 139) | private ItemsPanelTemplate GetItemsPanelTemplateCache()
method GetItemsPanelTemplate (line 146) | private ItemsPanelTemplate GetItemsPanelTemplate()
FILE: source/Playnite.DesktopApp/Controls/Views/LibraryListView.cs
class LibraryListView (line 17) | [TemplatePart(Name = "PART_ListGames", Type = typeof(GamesGridView))]
method LibraryListView (line 23) | static LibraryListView()
method LibraryListView (line 28) | public LibraryListView() : this(DesktopApplication.Current?.MainModel)
method LibraryListView (line 32) | public LibraryListView(DesktopAppViewModel mainModel)
method ViewSettings_PropertyChanged (line 46) | private void ViewSettings_PropertyChanged(object sender, PropertyChang...
method SetListGamesBinding (line 57) | private void SetListGamesBinding()
method OnApplyTemplate (line 77) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/Views/MainWindow.cs
class MainWindow (line 15) | [TemplatePart(Name = "PART_Sidebar", Type = typeof(Sidebar))]
method MainWindow (line 23) | static MainWindow()
method MainWindow (line 28) | public MainWindow() : this(DesktopApplication.Current?.MainModel)
method MainWindow (line 32) | public MainWindow(DesktopAppViewModel mainModel)
method OnApplyTemplate (line 46) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/Views/NotificationPanel.cs
class NotificationPanel (line 20) | [TemplatePart(Name = "PART_ButtonClose", Type = typeof(ButtonBase))]
method NotificationPanel (line 30) | static NotificationPanel()
method NotificationPanel (line 35) | public NotificationPanel() : this(DesktopApplication.Current?.MainModel)
method NotificationPanel (line 39) | public NotificationPanel(DesktopAppViewModel mainModel)
method OnApplyTemplate (line 51) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/Views/SearchWindow.cs
class SearchWindowGameItem (line 16) | [TemplatePart(Name = "PART_ImageGameIcon", Type = typeof(Image))]
method SearchWindowGameItem (line 31) | static SearchWindowGameItem()
method SearchWindowGameItem (line 36) | public SearchWindowGameItem() : this(DesktopApplication.Current?.MainM...
method SearchWindowGameItem (line 40) | public SearchWindowGameItem(DesktopAppViewModel mainModel)
method GetBindingPath (line 52) | private string GetBindingPath(string targetName)
method OnApplyTemplate (line 57) | public override void OnApplyTemplate()
class SearchWindowSearchItem (line 157) | [TemplatePart(Name = "PART_ContentIcon", Type = typeof(ContentControl))]
method SearchWindowSearchItem (line 166) | static SearchWindowSearchItem()
method OnApplyTemplate (line 171) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/Views/Sidebar.cs
class Sidebar (line 17) | [TemplatePart(Name = "PART_ElemMainMenu", Type = typeof(FrameworkElement))]
method Sidebar (line 25) | static Sidebar()
method Sidebar (line 30) | public Sidebar() : this(DesktopApplication.Current?.MainModel)
method Sidebar (line 34) | public Sidebar(DesktopAppViewModel mainModel)
method Sidebar_Loaded (line 50) | private void Sidebar_Loaded(object sender, RoutedEventArgs e)
method Sidebar_Unloaded (line 55) | private void Sidebar_Unloaded(object sender, RoutedEventArgs e)
method SidebarItems_CollectionChanged (line 60) | private void SidebarItems_CollectionChanged(object sender, System.Coll...
method LoadSidebarItems (line 65) | public void LoadSidebarItems()
method OnApplyTemplate (line 79) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/Controls/Views/TopPanel.cs
class TopPanel (line 23) | [TemplatePart(Name = "PART_ElemMainMenu", Type = typeof(FrameworkElement))]
method TopPanel (line 61) | static TopPanel()
method TopPanel (line 66) | public TopPanel() : this(DesktopApplication.Current?.MainModel)
method TopPanel (line 70) | public TopPanel(DesktopAppViewModel mainModel)
method TopPanel_Loaded (line 85) | private void TopPanel_Loaded(object sender, RoutedEventArgs e)
method TopPanel_Unloaded (line 90) | private void TopPanel_Unloaded(object sender, RoutedEventArgs e)
method AppSettings_PropertyChanged (line 95) | private void AppSettings_PropertyChanged(object sender, PropertyChange...
method SetButtonVisibility (line 108) | private void SetButtonVisibility()
method AssignPanelButton (line 128) | private TopPanelItem AssignPanelButton(string contentTemplate, Context...
method AssignPanelButton (line 140) | private TopPanelItem AssignPanelButton(string contentTemplate, RelayCo...
method AssignPluginButton (line 153) | private TopPanelItem AssignPluginButton(TopPanelWrapperItem item)
method OnApplyTemplate (line 159) | public override void OnApplyTemplate()
FILE: source/Playnite.DesktopApp/DesktopActionSelector.cs
class DesktopActionSelector (line 13) | public class DesktopActionSelector : IActionSelector
method SelectPlayAction (line 15) | public object SelectPlayAction(List<PlayController> controllers, List<...
method SelectInstallAction (line 20) | public InstallController SelectInstallAction(List<InstallController> p...
method SelectUninstallAction (line 25) | public UninstallController SelectUninstallAction(List<UninstallControl...
FILE: source/Playnite.DesktopApp/DesktopApplication.cs
class DesktopApplication (line 39) | public class DesktopApplication : PlayniteApplication
method DesktopApplication (line 63) | public DesktopApplication(Func<Application> appInitializer, SplashScre...
method ConfigureViews (line 69) | public override void ConfigureViews()
method Startup (line 82) | public override bool Startup()
method InitializeNative (line 108) | public override void InitializeNative()
method Restore (line 113) | public override void Restore()
method Minimize (line 118) | public override void Minimize()
method ReleaseResources (line 123) | public override void ReleaseResources(bool releaseCefSharp = true)
method Restart (line 133) | public override void Restart(bool saveSettings)
method Restart (line 138) | public override void Restart(CmdLineOptions options, bool saveSettings)
method InstantiateApp (line 145) | public override void InstantiateApp()
method LoadTrayIcon (line 174) | private void LoadTrayIcon()
method OpenMainViewAsync (line 196) | private async void OpenMainViewAsync(bool isFirstStart)
method ProcessStartupWizard (line 238) | private bool ProcessStartupWizard()
method ShowWindowsNotification (line 299) | public override void ShowWindowsNotification(string title, string body...
method GetTrayIcon (line 312) | private Icon GetTrayIcon()
method SwitchAppMode (line 320) | public override void SwitchAppMode(ApplicationMode mode)
method GetApiInstance (line 332) | public override PlayniteAPI GetApiInstance(ExtensionManifest pluginOwner)
method GetApiInstance (line 352) | public override PlayniteAPI GetApiInstance()
method InitSDL (line 373) | private void InitSDL()
method SDLEventLoop (line 397) | private void SDLEventLoop()
method SetupInputs (line 422) | public void SetupInputs()
FILE: source/Playnite.DesktopApp/DesktopCollectionView.cs
class DesktopCollectionView (line 16) | public class DesktopCollectionView : BaseCollectionView
type GamesViewType (line 18) | public enum GamesViewType
method DesktopCollectionView (line 83) | public DesktopCollectionView(
method Dispose (line 111) | public override void Dispose()
method Settings_PropertyChanged (line 140) | private void Settings_PropertyChanged(object sender, PropertyChangedEv...
method ViewSettings_PropertyChanged (line 149) | private void ViewSettings_PropertyChanged(object sender, PropertyChang...
method RefreshView (line 162) | public override void RefreshView()
method SetViewDescriptions (line 187) | private void SetViewDescriptions()
method GetGroupingId (line 256) | private Guid GetGroupingId(GroupableField orderField, Game sourceGame)
method GetGroupingIds (line 271) | private List<Guid> GetGroupingIds(GroupableField orderField, Game sour...
method SetViewType (line 302) | public void SetViewType(GamesViewType? viewType)
method ClearItems (line 351) | private void ClearItems()
method Database_PlatformUpdated (line 364) | private void Database_PlatformUpdated(object sender, ItemUpdatedEventA...
method Genres_ItemUpdated (line 372) | private void Genres_ItemUpdated(object sender, ItemUpdatedEventArgs<Ge...
method Tags_ItemUpdated (line 380) | private void Tags_ItemUpdated(object sender, ItemUpdatedEventArgs<Tag> e)
method Sources_ItemUpdated (line 388) | private void Sources_ItemUpdated(object sender, ItemUpdatedEventArgs<G...
method Series_ItemUpdated (line 395) | private void Series_ItemUpdated(object sender, ItemUpdatedEventArgs<Se...
method Regions_ItemUpdated (line 403) | private void Regions_ItemUpdated(object sender, ItemUpdatedEventArgs<R...
method Companies_ItemUpdated (line 411) | private void Companies_ItemUpdated(object sender, ItemUpdatedEventArgs...
method AgeRatings_ItemUpdated (line 424) | private void AgeRatings_ItemUpdated(object sender, ItemUpdatedEventArg...
method Categories_ItemUpdated (line 432) | private void Categories_ItemUpdated(object sender, ItemUpdatedEventArg...
method Features_ItemUpdated (line 440) | private void Features_ItemUpdated(object sender, ItemUpdatedEventArgs<...
method CompletionStatuses_ItemUpdated (line 448) | private void CompletionStatuses_ItemUpdated(object sender, ItemUpdated...
method DoGroupDbObjectsUpdate (line 455) | private void DoGroupDbObjectsUpdate<TItem>(
method GetRelevantDataDiffer (line 480) | private bool GetRelevantDataDiffer(Game oldData, Game newData)
method Database_GameUpdated (line 533) | private void Database_GameUpdated(object sender, ItemUpdatedEventArgs<...
method Database_GamesCollectionChanged (line 568) | private void Database_GamesCollectionChanged(object sender, ItemCollec...
FILE: source/Playnite.DesktopApp/DesktopDialogs.cs
class DesktopDialogs (line 18) | public class DesktopDialogs : IDialogsFactory
method DesktopDialogs (line 22) | public DesktopDialogs()
method Invoke (line 27) | private T Invoke<T>(Func<T> action)
method Invoke (line 38) | private void Invoke(Action action)
method SaveFile (line 46) | public string SaveFile(string filter)
method SaveFile (line 51) | public string SaveFile(string filter, string initialDir)
method SaveFile (line 56) | public string SaveFile(string filter, bool promptOverwrite)
method SaveFile (line 61) | public string SaveFile(string filter, bool promptOverwrite, string ini...
method SelectFile (line 66) | public string SelectFile(string filter)
method SelectFile (line 71) | public string SelectFile(string filter, string initialDir)
method SelectFiles (line 76) | public List<string> SelectFiles(string filter)
method SelectFiles (line 81) | public List<string> SelectFiles(string filter, string initialDir)
method SelectFolder (line 86) | public string SelectFolder()
method SelectFolder (line 91) | public string SelectFolder(string initialDir)
method SelectIconFile (line 96) | public string SelectIconFile()
method SelectIconFile (line 101) | public string SelectIconFile(string initialDir)
method SelectImagefile (line 106) | public string SelectImagefile()
method SelectImagefile (line 111) | public string SelectImagefile(string initialDir)
method SelectString (line 116) | public StringSelectionDialogResult SelectString(string messageBoxText,...
method SelectString (line 121) | public StringSelectionDialogResult SelectString(string messageBoxText,...
method ShowMessage (line 126) | public MessageBoxResult ShowMessage(string messageBoxText, string capt...
method ShowMessage (line 131) | public MessageBoxResult ShowMessage(string messageBoxText, string capt...
method ShowMessage (line 136) | public MessageBoxResult ShowMessage(string messageBoxText, string capt...
method ShowMessage (line 141) | public MessageBoxResult ShowMessage(string messageBoxText, string capt...
method ShowMessage (line 146) | public MessageBoxResult ShowMessage(string messageBoxText, string capt...
method ShowMessage (line 151) | public MessageBoxResult ShowMessage(string messageBoxText)
method ShowSelectableString (line 156) | public void ShowSelectableString(string messageBoxText, string caption...
method ShowErrorMessage (line 161) | public MessageBoxResult ShowErrorMessage(string messageBoxText, string...
method ShowErrorMessage (line 166) | public MessageBoxResult ShowErrorMessage(string messageBoxText)
method ShowMessage (line 171) | public MessageBoxOption ShowMessage(string messageBoxText, string capt...
method ChooseImageFile (line 176) | public ImageFileOption ChooseImageFile(List<ImageFileOption> files, st...
method ChooseItemWithSearch (line 192) | public GenericItemOption ChooseItemWithSearch(List<GenericItemOption> ...
method ActivateGlobalProgress (line 208) | public GlobalProgressResult ActivateGlobalProgress(Action<GlobalProgre...
method ActivateGlobalProgress (line 213) | public GlobalProgressResult ActivateGlobalProgress(Func<GlobalProgress...
method CreateWindow (line 218) | public Window CreateWindow(WindowCreationOptions options)
method GetCurrentAppWindow (line 229) | public Window GetCurrentAppWindow()
FILE: source/Playnite.DesktopApp/DesktopGamesEditor.cs
class DesktopGamesEditor (line 18) | public class DesktopGamesEditor : GamesEditor
method DesktopGamesEditor (line 20) | public DesktopGamesEditor(
method SetGameCategories (line 38) | public bool? SetGameCategories(Game game)
method SetGamesCategories (line 44) | public bool? SetGamesCategories(List<Game> games)
method EditGame (line 50) | public bool? EditGame(Game game)
method EditGames (line 63) | public bool? EditGames(List<Game> games)
FILE: source/Playnite.DesktopApp/Markups.cs
class Api (line 11) | public class Api : Extensions.Markup.Api
method Api (line 13) | public Api() : base()
method Api (line 17) | public Api(string path) : base(path)
class MainViewModel (line 22) | public class MainViewModel : Extensions.Markup.MainViewModel<DesktopAppV...
method MainViewModel (line 24) | public MainViewModel() : base()
method MainViewModel (line 28) | public MainViewModel(string path) : base(path)
class PluginSettings (line 33) | public class PluginSettings : Extensions.Markup.PluginSettings
method PluginSettings (line 35) | public PluginSettings() : base()
method PluginSettings (line 39) | public PluginSettings(string path) : base(path)
class Settings (line 44) | public class Settings : Extensions.Markup.Settings
method Settings (line 46) | public Settings() : base()
method Settings (line 50) | public Settings(string path) : base(path)
class SettingsBinding (line 55) | public class SettingsBinding : Extensions.Markup.SettingsBinding
method SettingsBinding (line 57) | public SettingsBinding() : base()
method SettingsBinding (line 61) | public SettingsBinding(string path) : base(path)
class ThemeFile (line 66) | public class ThemeFile : Extensions.Markup.ThemeFile
method ThemeFile (line 68) | public ThemeFile() : base(ApplicationMode.Desktop)
method ThemeFile (line 72) | public ThemeFile(string path) : base(path, ApplicationMode.Desktop)
method GetDesignTimeDefaultTheme (line 76) | public static ThemeManifest GetDesignTimeDefaultTheme()
class ThemeFileBinding (line 82) | public class ThemeFileBinding : Extensions.Markup.ThemeFileBinding
method ThemeFileBinding (line 84) | public ThemeFileBinding() : base()
method ThemeFileBinding (line 88) | public ThemeFileBinding(string path) : base(path)
class PluginStatus (line 93) | public class PluginStatus : Extensions.Markup.PluginStatus
class PluginConverter (line 97) | public class PluginConverter : Extensions.Markup.PluginConverter
FILE: source/Playnite.DesktopApp/PluginSettingsHelper.cs
class PluginSettingsItem (line 21) | public class PluginSettingsItem
class PluginSettingsHelper (line 29) | public abstract class PluginSettingsHelper
method GetPluginSettingsView (line 33) | public static UserControl GetPluginSettingsView(Guid pluginId, Extensi...
method VerifyPluginSettings (line 69) | public static Tuple<bool, List<string>> VerifyPluginSettings(Dictionar...
FILE: source/Playnite.DesktopApp/ProgramEntry.cs
class ProgramEntry (line 15) | public class ProgramEntry
method Main (line 17) | [STAThread]
FILE: source/Playnite.DesktopApp/Properties/Resources.Designer.cs
class Resources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
method Resources (line 32) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...
FILE: source/Playnite.DesktopApp/Properties/Settings.Designer.cs
class Settings (line 15) | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
FILE: source/Playnite.DesktopApp/ViewModels/AboutViewModel.cs
class AboutViewModel (line 17) | public class AboutViewModel : ObservableObject
method AboutViewModel (line 132) | public AboutViewModel(IWindowFactory window, IDialogsFactory dialogs, ...
method OpenView (line 140) | public void OpenView()
method CloseView (line 145) | public void CloseView()
method CreateDiagPackage (line 150) | public void CreateDiagPackage()
FILE: source/Playnite.DesktopApp/ViewModels/ActionSelectionViewModel.cs
class ActionSelectionViewModel (line 15) | public class ActionSelectionViewModel : ObservableObject
method ActionSelectionViewModel (line 49) | public ActionSelectionViewModel(IWindowFactory window)
method SelectPlayAction (line 54) | public object SelectPlayAction(List<PlayController> controllers, List<...
method SelectInstallAction (line 83) | public InstallController SelectInstallAction(List<InstallController> p...
method SelectUninstallAction (line 102) | public UninstallController SelectUninstallAction(List<UninstallControl...
FILE: source/Playnite.DesktopApp/ViewModels/AddonsViewModel.cs
class AddonsViewModel (line 19) | public partial class AddonsViewModel : Playnite.ViewModels.AddonsViewMod...
type View (line 21) | private enum View : int
method AddonsViewModel (line 153) | public AddonsViewModel(
method AddonsViewModel (line 173) | public AddonsViewModel(
method Init (line 197) | private void Init(
method OpenView (line 267) | public bool? OpenView()
method SectionChanged (line 272) | private void SectionChanged(RoutedPropertyChangedEventArgs<object> sel...
method UninstallExtension (line 358) | private void UninstallExtension(InstalledPlugin a)
method UninstallTheme (line 371) | private void UninstallTheme(ThemeManifest a)
method UpdateDisabledExtensions (line 384) | internal void UpdateDisabledExtensions()
method ConfirmDialog (line 396) | public void ConfirmDialog()
method CancelClose (line 426) | public void CancelClose()
method WindowClosing (line 437) | public void WindowClosing()
FILE: source/Playnite.DesktopApp/ViewModels/AddonsViewModel_Installed.cs
class InstalledPlugin (line 12) | public class InstalledPlugin : ObservableObject
method InstalledPlugin (line 31) | public InstalledPlugin()
method InstalledPlugin (line 35) | public InstalledPlugin(bool selected, Plugin plugin, ExtensionManifest...
method ToString (line 55) | public override string ToString()
class AddonsViewModel (line 72) | public partial class AddonsViewModel : Playnite.ViewModels.AddonsViewMod...
FILE: source/Playnite.DesktopApp/ViewModels/AddonsViewModel_Online.cs
class AddonsViewModel (line 19) | public partial class AddonsViewModel : Playnite.ViewModels.AddonsViewMo...
method InstallAddon (line 177) | private void InstallAddon(AddonManifest addon)
method SearchAddon (line 231) | private void SearchAddon()
method CheckUpdates (line 262) | private void CheckUpdates()
FILE: source/Playnite.DesktopApp/ViewModels/CategoryConfigViewModel.cs
class CategoryConfigViewModel (line 15) | public class CategoryConfigViewModel : ObservableObject
method CategoryConfigViewModel (line 91) | public CategoryConfigViewModel(IWindowFactory window, GameDatabase dat...
method CategoryConfigViewModel (line 101) | public CategoryConfigViewModel(IWindowFactory window, GameDatabase dat...
method OpenView (line 111) | public bool? OpenView()
method CloseView (line 116) | public void CloseView()
method AddCategory (line 121) | public void AddCategory()
method SetCategories (line 142) | public void SetCategories()
method SetCategoryStates (line 205) | private void SetCategoryStates()
method GetAllCategories (line 262) | private ObservableCollection<SelectableItem<Category>> GetAllCategories()
FILE: source/Playnite.DesktopApp/ViewModels/DatabaseFieldsManagerViewModel.cs
class DatabaseFieldsManagerViewModel (line 23) | public class DatabaseFieldsManagerViewModel : ObservableObject
method DatabaseFieldsManagerViewModel (line 632) | public DatabaseFieldsManagerViewModel(IGameDatabaseMain database, IWin...
method OpenView (line 680) | public void OpenView()
method CloseView (line 685) | public void CloseView()
method SaveChanges (line 690) | internal void SaveChanges()
method UpdateDbCollection (line 713) | private void UpdateDbCollection<TItem>(IItemCollection<TItem> dbCollec...
method UpdatePlatformsCollection (line 740) | private void UpdatePlatformsCollection()
method RemoveUnusedItems (line 806) | public void RemoveUnusedItems<TItem>(IList<TItem> sourceCollection, Fu...
method RemoveUnusedItems (line 838) | public void RemoveUnusedItems<TItem>(IList<TItem> sourceCollection, Fu...
method RemoveUnusedPlatforms (line 870) | public void RemoveUnusedPlatforms()
method AddItem (line 919) | public TItem AddItem<TItem>(IList<TItem> collection) where TItem : Dat...
method RenameItem (line 942) | public void RenameItem<TItem>(IList<TItem> collection, TItem item) whe...
method RemoveItem (line 961) | public void RemoveItem<TItem>(IList<TItem> collection, IList<TItem> it...
method SelectPlatformIcon (line 969) | public void SelectPlatformIcon(Platform platform)
method SelectPlatformCover (line 993) | public void SelectPlatformCover(Platform platform)
method SelectPlatformBackground (line 1002) | public void SelectPlatformBackground(Platform platform)
method RemovePlatformIcon (line 1011) | public void RemovePlatformIcon(Platform platform)
method RemovePlatformCover (line 1016) | public void RemovePlatformCover(Platform platform)
method RemovePlatformBackground (line 1021) | public void RemovePlatformBackground(Platform platform)
method UpdateCompletionStatusSettings (line 1026) | private void UpdateCompletionStatusSettings()
method UpdateFilterPresetsSettings (line 1035) | private void UpdateFilterPresetsSettings()
FILE: source/Playnite.DesktopApp/ViewModels/DesignData/DesignMainViewModel.cs
class DesignMainViewModel (line 17) | public class DesignMainViewModel : DesktopAppViewModel
method DesignMainViewModel (line 64) | public DesignMainViewModel() : base(new InMemoryGameDatabase(), null, ...
FILE: source/Playnite.DesktopApp/ViewModels/DesktopAppViewModel.cs
class DesktopAppViewModel (line 40) | public partial class DesktopAppViewModel : MainViewModelBase, IDisposabl...
method DesktopAppViewModel (line 228) | public DesktopAppViewModel(
method DesktopAppViewModel (line 237) | public DesktopAppViewModel(
method FilterSettings_FilterChanged (line 260) | private void FilterSettings_FilterChanged(object sender, FilterChanged...
method DesktopAppViewModel_ActivationRequested (line 268) | private void DesktopAppViewModel_ActivationRequested(object sender, No...
method Notifications_CloseRequested (line 278) | private void Notifications_CloseRequested(object sender, Notifications...
method ViewSettings_PropertyChanged (line 287) | private void ViewSettings_PropertyChanged(object sender, PropertyChang...
method AppSettings_PropertyChanged (line 308) | private void AppSettings_PropertyChanged(object sender, PropertyChange...
method FilterSettings_PropertyChanged (line 347) | private void FilterSettings_PropertyChanged(object sender, System.Comp...
method RemoveGameSelection (line 351) | public void RemoveGameSelection()
method OpenSteamFriends (line 356) | public void OpenSteamFriends()
method ReportIssue (line 368) | public static void ReportIssue()
method ShutdownApp (line 373) | public void ShutdownApp()
method InitializeView (line 379) | protected void InitializeView()
method Games_ItemCollectionChanged (line 474) | private void Games_ItemCollectionChanged(object sender, ItemCollection...
method GetAddonUpdatesFoundMessage (line 486) | public override NotificationMessage GetAddonUpdatesFoundMessage(List<A...
method DownloadMetadata (line 502) | public async Task DownloadMetadata(MetadataDownloaderSettings settings...
method SetSortingNames (line 542) | public async Task SetSortingNames(List<Game> games)
method DownloadMetadata (line 598) | public async Task DownloadMetadata(MetadataDownloaderSettings settings)
method DownloadMetadata (line 624) | public async void DownloadMetadata(MetadataDownloadViewModel model)
method RestoreWindow (line 634) | public void RestoreWindow()
method AddCustomGame (line 639) | public void AddCustomGame(IWindowFactory window)
method ImportWindowsStoreGames (line 658) | public async void ImportWindowsStoreGames(InstalledGamesViewModel model)
method ImportInstalledGames (line 686) | public async void ImportInstalledGames(InstalledGamesViewModel model, ...
method ImportEmulatedGames (line 714) | public async void ImportEmulatedGames(EmulatedGamesImportViewModel model)
method OpenAboutWindow (line 743) | public void OpenAboutWindow(AboutViewModel model)
method OpenIntegrationSettings (line 748) | public void OpenIntegrationSettings(LibraryIntegrationsViewModel model)
method ConfigureEmulators (line 753) | public void ConfigureEmulators(EmulatorsViewModel model)
method ConfigureSoftwareTools (line 758) | private void ConfigureSoftwareTools(ToolsConfigViewModel model)
method ConfigureDatabaseFields (line 763) | public void ConfigureDatabaseFields(DatabaseFieldsManagerViewModel model)
method SelectGameImpl (line 768) | public bool SelectGameImpl(Guid id, bool restoreView = false)
method SelectGame (line 784) | public override void SelectGame(Guid id, bool restoreView = false)
method SelectGames (line 789) | public void SelectGames(IEnumerable<Guid> gameIds, bool restoreView = ...
method OnClosing (line 808) | protected virtual void OnClosing(CancelEventArgs args)
method OnFileDropped (line 839) | private void OnFileDropped(DragEventArgs args)
method ClearMessages (line 918) | public void ClearMessages()
method CheckForUpdate (line 924) | public void CheckForUpdate()
method SwitchToFullscreenMode (line 963) | public void SwitchToFullscreenMode()
method PlayRandomGame (line 1004) | public void PlayRandomGame()
method ViewSelectRandomGame (line 1035) | public void ViewSelectRandomGame()
method OpenView (line 1057) | public void OpenView()
method CloseView (line 1080) | public override void CloseView()
method ClearFilters (line 1088) | public virtual void ClearFilters()
method Dispose (line 1094) | public void Dispose()
method Window_LocationChanged (line 1103) | private void Window_LocationChanged(object sender, EventArgs e)
method OpenPluginSettings (line 1108) | public bool OpenPluginSettings(Guid pluginId)
method SwitchToLibraryView (line 1125) | public void SwitchToLibraryView()
method ProcessUriRequest (line 1130) | internal void ProcessUriRequest(PlayniteUriEventArgs args)
method GetSearchCommands (line 1173) | public override IEnumerable<SearchItem> GetSearchCommands()
method OpenSettings (line 1276) | public override void OpenSettings(int settingsPageIndex)
method OpenSettings (line 1287) | public void OpenSettings()
method EditGame (line 1292) | public override void EditGame(Game game)
method AssignCategories (line 1300) | public override void AssignCategories(Game game)
method OpenSearch (line 1308) | public void OpenSearch()
method FocusSearchBox (line 1324) | public void FocusSearchBox()
method OpenGlobalSearch (line 1330) | public void OpenGlobalSearch()
method OpenSearch (line 1350) | public void OpenSearch(string searchTerm)
method OpenSearch (line 1357) | public void OpenSearch(SearchContext context, string searchTerm)
method CreateAndSetGlobalSearchView (line 1364) | private SearchViewModel CreateAndSetGlobalSearchView()
method RegisterSystemSearchHotkey (line 1375) | public void RegisterSystemSearchHotkey()
method UnregisterSystemSearchHotkey (line 1396) | public void UnregisterSystemSearchHotkey()
method GameControllerInputButtonChanged (line 1408) | private void GameControllerInputButtonChanged(object sender, OnControl...
method GameControllerOnControllerDisconnected (line 1423) | private void GameControllerOnControllerDisconnected(object sender, OnC...
method GameControllerOnControllerConnected (line 1438) | private void GameControllerOnControllerConnected(object sender, OnCont...
FILE: source/Playnite.DesktopApp/ViewModels/DesktopAppViewModel_Commands.cs
class DesktopAppViewModel (line 18) | public partial class DesktopAppViewModel
method InitializeCommands (line 102) | private void InitializeCommands()
FILE: source/Playnite.DesktopApp/ViewModels/DesktopAppViewModel_Sidebar.cs
class SidebarWrapperItem (line 22) | public class SidebarWrapperItem : ObservableObject
type SourceType (line 24) | public enum SourceType
method SidebarWrapperItem (line 97) | public SidebarWrapperItem(SidebarItem item, DesktopAppViewModel model)
method Item_PropertyChanged (line 105) | private void Item_PropertyChanged(object sender, System.ComponentModel...
method Activation (line 110) | private void Activation(object arg)
class MainSidebarViewItem (line 154) | public class MainSidebarViewItem : SidebarItem
method MainSidebarViewItem (line 161) | public MainSidebarViewItem(Control view, DesktopAppViewModel model, Ap...
class SoftwareToolSidebarItem (line 179) | public class SoftwareToolSidebarItem : SidebarItem
method SoftwareToolSidebarItem (line 184) | public SoftwareToolSidebarItem(AppSoftware app, DesktopAppViewModel mo...
class DesktopAppViewModel (line 195) | public partial class DesktopAppViewModel
method LoadSideBarItems (line 208) | public void LoadSideBarItems()
method LoadSoftwareToolsSidebarItems (line 249) | public void LoadSoftwareToolsSidebarItems()
method RefreshSoftwareToolsSidebarItems (line 267) | public void RefreshSoftwareToolsSidebarItems()
FILE: source/Playnite.DesktopApp/ViewModels/DesktopAppViewModel_TopPanel.cs
class TopPanelWrapperItem (line 19) | public class TopPanelWrapperItem : ObservableObject
method TopPanelWrapperItem (line 40) | public TopPanelWrapperItem(TopPanelItem item, DesktopAppViewModel model)
method Item_PropertyChanged (line 58) | private void Item_PropertyChanged(object sender, System.ComponentModel...
class DesktopAppViewModel (line 64) | public partial class DesktopAppViewModel
method GetTopPanelPluginItems (line 66) | public List<TopPanelWrapperItem> GetTopPanelPluginItems()
FILE: source/Playnite.DesktopApp/ViewModels/EmulatedGamesImportViewModel.cs
class EmulatedGamesImportViewModel (line 25) | public class EmulatedGamesImportViewModel : ObservableObject
class ImportGameScannerConfig (line 27) | public class ImportGameScannerConfig : GameScannerConfig
class MenuItem (line 33) | public class MenuItem
method ToString (line 39) | public override string ToString()
method EmulatedGamesImportViewModel (line 192) | public EmulatedGamesImportViewModel(
method OpenView (line 275) | public bool? OpenView()
method CloseView (line 280) | public void CloseView(bool? result)
method SplitSelectedGames (line 285) | private void SplitSelectedGames()
method MergeSelectedGames (line 312) | private void MergeSelectedGames()
method StartScan (line 331) | private void StartScan()
method ImportGames (line 466) | private void ImportGames()
method AddFileToExclusionList (line 509) | private void AddFileToExclusionList(ScannedRom rom)
method AddDirToExclusionList (line 516) | private void AddDirToExclusionList(ScannedRom rom)
method AddFilesToExclusionList (line 523) | private void AddFilesToExclusionList(IEnumerable<ScannedGame> games)
method AddDirsToExclusionList (line 532) | private void AddDirsToExclusionList(IEnumerable<ScannedGame> games)
method ExcludeFiles (line 541) | private void ExcludeFiles(IEnumerable<string> romPaths, Guid scannerId)
method ExcludeDirectories (line 577) | private void ExcludeDirectories(IEnumerable<string> romPaths, Guid sca...
FILE: source/Playnite.DesktopApp/ViewModels/EmulatorImportViewModel.cs
class EmulatorImportViewModel (line 24) | public class EmulatorImportViewModel : ObservableObject
method EmulatorImportViewModel (line 89) | public EmulatorImportViewModel(
method OpenView (line 105) | public bool? OpenView()
method CloseView (line 110) | public void CloseView(bool? result)
method ListFilter (line 115) | private bool ListFilter(object item)
method ScanEmulators (line 126) | public void ScanEmulators()
method ImportEmulators (line 151) | public void ImportEmulators()
FILE: source/Playnite.DesktopApp/ViewModels/EmulatorsViewModel.cs
class EmulatorsViewModel (line 25) | public class EmulatorsViewModel : ObservableObject
class DownloadPlatform (line 29) | class DownloadPlatform : EmulatedPlatform
class DownloadEmu (line 34) | public class DownloadEmu
method EmulatorsViewModel (line 317) | public EmulatorsViewModel(IGameDatabaseMain database, IWindowFactory w...
method OpenView (line 342) | public bool? OpenView()
method WindowClosing (line 348) | private void WindowClosing(CancelEventArgs e)
method CheckUnsavedChanges (line 368) | private MessageBoxResult CheckUnsavedChanges()
method CancelDialog (line 433) | public void CancelDialog()
method ConfirmDialog (line 450) | public void ConfirmDialog()
method ConfirmDataChanges (line 457) | private void ConfirmDataChanges()
method AddEmulator (line 514) | public void AddEmulator()
method RemoveEmulator (line 521) | public void RemoveEmulator(Emulator emulator)
method CopyEmulator (line 546) | public void CopyEmulator(Emulator emulator)
method AddCustomEmulatorProfile (line 563) | public void AddCustomEmulatorProfile(Emulator emulator)
method AddBuiltinEmulatorProfile (line 578) | private void AddBuiltinEmulatorProfile(Emulator emulator, string profi...
method RemoveEmulatorProfile (line 593) | public void RemoveEmulatorProfile(Emulator parent, object profile)
method CopyEmulatorProfile (line 605) | public void CopyEmulatorProfile(Emulator emulator, CustomEmulatorProfi...
method SelectEmulatorExecutable (line 614) | public void SelectEmulatorExecutable(CustomEmulatorProfile profile)
method DownloadEmulators (line 623) | public void DownloadEmulators()
method ImportEmulators (line 641) | public void ImportEmulators()
method SelectedEmulator_PropertyChanged (line 683) | private void SelectedEmulator_PropertyChanged(object sender, PropertyC...
method UpdateSelectedEmulatorBuiltInProfiles (line 691) | private void UpdateSelectedEmulatorBuiltInProfiles()
method AddNewScannerConfig (line 703) | private void AddNewScannerConfig()
method CopyScanConfig (line 710) | private void CopyScanConfig(GameScannerConfig config)
method RemoveScanConfig (line 719) | private void RemoveScanConfig(GameScannerConfig config)
FILE: source/Playnite.DesktopApp/ViewModels/FirstTimeStartupViewModel.cs
class FirstTimeStartupViewModel (line 23) | public class FirstTimeStartupViewModel : ObservableObject
class Pages (line 25) | public class Pages
class RecommendedAddon (line 33) | public class RecommendedAddon : SelectableItem<string>
method RecommendedAddon (line 37) | public RecommendedAddon(string addonId, string name) : base(addonId)
method FirstTimeStartupViewModel (line 151) | public FirstTimeStartupViewModel(
method OpenView (line 165) | public bool? OpenView()
method CloseView (line 170) | public void CloseView(bool? result)
method SetPluginConfiguration (line 181) | private void SetPluginConfiguration(PluginSettingsItem plugin)
method NavigateNext (line 190) | public void NavigateNext()
method DownloadAndInstallAddon (line 300) | private bool DownloadAndInstallAddon(string addonId)
FILE: source/Playnite.DesktopApp/ViewModels/GameDetailsViewModel.cs
class GameDetailsViewModel (line 16) | public class GameDetailsViewModel : ObservableObject, IDisposable
method GameDetailsViewModel (line 311) | public GameDetailsViewModel(GamesCollectionViewEntry game, PlayniteSet...
method GameDetailsViewModel (line 318) | public GameDetailsViewModel(GamesCollectionViewEntry game, PlayniteSet...
method Dispose (line 390) | public void Dispose()
method Settings_PropertyChanged (line 400) | private void Settings_PropertyChanged(object sender, System.ComponentM...
method Game_PropertyChanged (line 405) | private void Game_PropertyChanged(object sender, System.ComponentModel...
method NotifyVisibilityChange (line 418) | private void NotifyVisibilityChange()
method SetFilter (line 426) | public void SetFilter(DatabaseObject value, GameField filterField)
method SetReleaseDateFilter (line 474) | public void SetReleaseDateFilter(ReleaseDate? date)
method SetVersionFilter (line 483) | public void SetVersionFilter(string version)
method SetLibraryFilter (line 492) | public void SetLibraryFilter(Guid LibraryId)
method Play (line 499) | public void Play()
method Install (line 504) | public void Install()
method EditGame (line 509) | public void EditGame()
method CheckSetup (line 514) | public void CheckSetup()
method CheckExecution (line 525) | public void CheckExecution()
FILE: source/Playnite.DesktopApp/ViewModels/GameEditViewModel.cs
class GameEditViewModel (line 34) | public partial class GameEditViewModel : ObservableObject
class MetadataDownloadOption (line 36) | public class MetadataDownloadOption
method MetadataDownloadOption (line 66) | public MetadataDownloadOption(GameEditViewModel model, IDialogsFacto...
method ToString (line 73) | public override string ToString()
method GameEditViewModel (line 282) | public GameEditViewModel(
method GameEditViewModel (line 300) | public GameEditViewModel(
method Init (line 319) | private void Init(
method OpenView (line 452) | public bool? OpenView()
method WindowClosing (line 458) | private void WindowClosing(CancelEventArgs e)
method CheckUnsavedChanges (line 478) | private MessageBoxResult CheckUnsavedChanges()
method CancelDialog (line 489) | public void CancelDialog()
method CloseView (line 506) | public void CloseView(bool result, bool alreadyClosing)
method ConfirmDialog (line 525) | public void ConfirmDialog(bool alreadyClosing)
method CleanupTempFiles (line 946) | internal void CleanupTempFiles()
method GetDroppedImage (line 991) | public string GetDroppedImage(DragEventArgs args, List<string> compati...
method DropIcon (line 1016) | public void DropIcon(DragEventArgs args)
method SelectIcon (line 1027) | public void SelectIcon()
method SelectCover (line 1037) | public void SelectCover()
method DropCover (line 1047) | public void DropCover(DragEventArgs args)
method SelectBackground (line 1058) | public void SelectBackground()
method DropBackground (line 1068) | public void DropBackground(DragEventArgs args)
method SetBackgroundUrl (line 1079) | public void SetBackgroundUrl()
method SetIconUrl (line 1088) | public void SetIconUrl()
method SetCoverUrl (line 1097) | public void SetCoverUrl()
method SelectUrlImage (line 1106) | public string SelectUrlImage(string tempFileName)
method AddAction (line 1127) | public void AddAction()
method RemoveAction (line 1145) | public void RemoveAction(GameAction action)
method MoveActionUp (line 1151) | public void MoveActionUp(GameAction action)
method MoveActionDown (line 1160) | public void MoveActionDown(GameAction action)
method Link_PropertyChanged (line 1169) | private void Link_PropertyChanged(object sender, PropertyChangedEventA...
method Links_CollectionChanged (line 1174) | private void Links_CollectionChanged(object sender, System.Collections...
method AddLink (line 1179) | public void AddLink()
method RemoveLink (line 1192) | public void RemoveLink(Link link)
method MoveLinkUp (line 1202) | public void MoveLinkUp(Link link)
method MoveLinkDown (line 1211) | public void MoveLinkDown(Link link)
method Rom_PropertyChanged (line 1220) | private void Rom_PropertyChanged(object sender, PropertyChangedEventAr...
method Roms_CollectionChanged (line 1225) | private void Roms_CollectionChanged(object sender, System.Collections....
method AddRom (line 1230) | public void AddRom()
method RemoveRom (line 1243) | public void RemoveRom(GameRom rom)
method MoveRomUp (line 1249) | public void MoveRomUp(GameRom rom)
method MoveRomDown (line 1258) | public void MoveRomDown(GameRom rom)
method SelectInstallDir (line 1267) | public void SelectInstallDir()
method SelectGameImage (line 1276) | public string SelectGameImage()
method RemoveIcon (line 1287) | public void RemoveIcon()
method RemoveImage (line 1292) | public void RemoveImage()
method RemoveBackground (line 1297) | public void RemoveBackground()
method OpenMetadataFolder (line 1302) | public void OpenMetadataFolder()
method AddNewItemsToDb (line 1322) | public void AddNewItemsToDb<TItem>(SelectableDbItemList sourceList, Li...
method AddNewItemToDb (line 1336) | public void AddNewItemToDb<TItem>(ObservableCollection<TItem> sourceLi...
method CreateNewItem (line 1350) | public TItem CreateNewItem<TItem>(string itemName = null) where TItem ...
method CreateNewItemInCollection (line 1371) | public TItem CreateNewItemInCollection<TItem>(ObservableCollection<TIt...
method CreateNewItemInCollection (line 1393) | public TItem CreateNewItemInCollection<TItem>(
method AddNewPlatform (line 1428) | public Platform AddNewPlatform(string item = null)
method AddNewPlatforms (line 1433) | public void AddNewPlatforms(List<string> items)
method AddNewSeries (line 1443) | public Series AddNewSeries(string item = null)
method AddNewSeries (line 1448) | public void AddNewSeries(List<string> items)
method AddNewAgeRating (line 1458) | public AgeRating AddNewAgeRating(string item = null)
method AddNewAgeRatings (line 1463) | public void AddNewAgeRatings(List<string> items)
method AddNewRegion (line 1473) | public Region AddNewRegion(string item = null)
method AddNewRegions (line 1478) | public void AddNewRegions(List<string> items)
method AddNewSource (line 1488) | public void AddNewSource(string source = null)
method AddNewCategory (line 1493) | public void AddNewCategory()
method AddNewPublisher (line 1498) | public Company AddNewPublisher(string publisher = null)
method AddNewPublishers (line 1512) | public void AddNewPublishers(List<string> publishers)
method AddNewDeveloper (line 1522) | public Company AddNewDeveloper(string developer = null)
method AddNewDevelopers (line 1536) | public void AddNewDevelopers(List<string> developers)
method AddNewGenre (line 1546) | public Genre AddNewGenre(string item = null)
method AddNewGenres (line 1551) | public void AddNewGenres(List<string> items)
method AddNewTag (line 1561) | public Tag AddNewTag(string tag = null)
method AddNewTags (line 1566) | public void AddNewTags(List<string> tags)
method AddNewFeature (line 1576) | public GameFeature AddNewFeature(string feature = null)
method AddNewCompletionStatus (line 1581) | public void AddNewCompletionStatus(string status = null)
method AddNewFeatures (line 1586) | public void AddNewFeatures(List<string> features)
method LooseDbNameComparer (line 1596) | private bool LooseDbNameComparer(SelectableItem<DatabaseObject> existi...
method GetImageProperties (line 1603) | private Tuple<string, ImageProperties> GetImageProperties(string image)
method CheckImagePerformanceRestrains (line 1625) | private void CheckImagePerformanceRestrains(string imagePath, double m...
method TestScript (line 1657) | public void TestScript(string script)
method CalculateInstallSizeWithDialog (line 1696) | public void CalculateInstallSizeWithDialog()
FILE: source/Playnite.DesktopApp/ViewModels/GameEditViewModelCommands.cs
class GameEditViewModel (line 13) | public partial class GameEditViewModel
FILE: source/Playnite.DesktopApp/ViewModels/GameEditViewModelFieldChecks.cs
class GameEditViewModel (line 11) | public partial class GameEditViewModel
method EditingGame_PropertyChanged (line 849) | private void EditingGame_PropertyChanged(object sender, PropertyChange...
method OtherActions_CollectionChanged (line 1306) | private void OtherActions_CollectionChanged(object sender, System.Coll...
method GameAction_PropertyChanged (line 1311) | private void GameAction_PropertyChanged(object sender, PropertyChanged...
FILE: source/Playnite.DesktopApp/ViewModels/GameEditViewModelMetadata.cs
class ComparableMetadatGameData (line 23) | public class ComparableMetadatGameData
class GameEditViewModel (line 46) | public partial class GameEditViewModel
method GetDisplayDiffFields (line 56) | private List<GameField> GetDisplayDiffFields(Game oldGame, ComparableM...
method PreviewGameData (line 215) | public void PreviewGameData(ComparableMetadatGameData metadata)
method AddNewAndSetFieldList (line 239) | public void AddNewAndSetFieldList<T>(List<T> items, SelectableDbItemLi...
method LoadNewMetadata (line 252) | private void LoadNewMetadata(ComparableMetadatGameData newData)
method ProcessMetadataFile (line 363) | private string ProcessMetadataFile(string file, string tempFileName)
method ProcessMetadataFile (line 368) | private string ProcessMetadataFile(MetadataFile file, string tempFileN...
method GetOrGenerateNewFieldItem (line 406) | public IEnumerable<T> GetOrGenerateNewFieldItem<T>(HashSet<MetadataPro...
method ConvertGameInfo (line 481) | ComparableMetadatGameData ConvertGameInfo(GameMetadata game)
method DownloadPluginData (line 568) | public void DownloadPluginData(MetadataPlugin plugin)
method DownloadStoreData (line 624) | public void DownloadStoreData()
method ReplaceImageSearchVariables (line 667) | private string ReplaceImageSearchVariables(string input)
method SelectGoogleIcon (line 675) | public void SelectGoogleIcon()
method SelectGoogleCover (line 686) | public void SelectGoogleCover()
method SelectGoogleBackground (line 697) | public void SelectGoogleBackground()
method SelectGoogleImage (line 708) | public string SelectGoogleImage(string searchTerm, string tempFileName...
FILE: source/Playnite.DesktopApp/ViewModels/GoogleImageDownloadViewModel.cs
class GoogleImageDownloadViewModel (line 14) | public class GoogleImageDownloadViewModel : ObservableObject
method GoogleImageDownloadViewModel (line 192) | public GoogleImageDownloadViewModel(
method OpenView (line 221) | public bool? OpenView()
method CloseView (line 226) | public void CloseView(bool? result)
method ConfirmDialog (line 233) | public void ConfirmDialog()
method Search (line 240) | public void Search()
method SetSearchResolution (line 275) | public void SetSearchResolution(string resolution)
method ClearSearchResolution (line 285) | public void ClearSearchResolution()
method LoadMore (line 291) | public void LoadMore()
method WindowClosing (line 307) | public void WindowClosing()
FILE: source/Playnite.DesktopApp/ViewModels/ImageSelectionViewModel.cs
class ImageSelectionViewModel (line 12) | public class ImageSelectionViewModel : ObservableObject
method ImageSelectionViewModel (line 71) | public ImageSelectionViewModel(
method OpenView (line 93) | public bool? OpenView()
method CloseView (line 98) | public void CloseView(bool? result)
method ConfirmDialog (line 103) | public void ConfirmDialog()
FILE: source/Playnite.DesktopApp/ViewModels/InstalledGamesViewModel.cs
class InstalledGamesViewModel (line 27) | public class InstalledGamesViewModel : ObservableObject
type ProgramType (line 29) | public enum ProgramType
class ImportableProgram (line 35) | public class ImportableProgram : SelectableItem<Program>
method ImportableProgram (line 136) | public ImportableProgram(Program program, ProgramType type) : base(p...
method InstalledGamesViewModel (line 260) | public InstalledGamesViewModel(IWindowFactory window, IDialogsFactory ...
method OpenView (line 271) | public bool? OpenView()
method OpenView (line 276) | public bool? OpenView(string directory)
method OpenViewOnWindowsApps (line 288) | public bool? OpenViewOnWindowsApps()
method CloseView (line 294) | public void CloseView(bool? result)
method ConfirmDialog (line 299) | public void ConfirmDialog()
method SelectExecutable (line 350) | public void SelectExecutable()
method DetectInstalled (line 385) | public void DetectInstalled()
method DetectWindowsStoreApps (line 415) | public void DetectWindowsStoreApps()
method ScanFolder (line 429) | public void ScanFolder()
method ScanFolder (line 440) | public void ScanFolder(string path)
method AddImportableGamesToDb (line 464) | public static List<Game> AddImportableGamesToDb(List<GameMetadata> gam...
method ListFilter (line 486) | private bool ListFilter(object item)
FILE: source/Playnite.DesktopApp/ViewModels/ItemSelectionWithSearchViewModel.cs
class ItemSelectionWithSearchViewModel (line 16) | public class ItemSelectionWithSearchViewModel : ObservableObject
method ItemSelectionWithSearchViewModel (line 98) | public ItemSelectionWithSearchViewModel(
method OpenView (line 117) | public bool? OpenView()
method CloseView (line 122) | public void CloseView(bool? result)
method ConfirmDialog (line 127) | public void ConfirmDialog()
method Search (line 132) | public void Search()
method SearchForResults (line 139) | private ObservableCollection<GenericItemOption> SearchForResults(strin...
FILE: source/Playnite.DesktopApp/ViewModels/LibraryIntegrationsViewModel.cs
class LibraryIntegrationsViewModel (line 17) | public class LibraryIntegrationsViewModel : ObservableObject
method LibraryIntegrationsViewModel (line 73) | public LibraryIntegrationsViewModel(
method LibraryItemChanged (line 87) | private void LibraryItemChanged(SelectionChangedEventArgs args)
method OpenView (line 105) | public bool? OpenView()
method CloseView (line 110) | public void CloseView()
method WindowClosing (line 121) | public void WindowClosing()
method ConfirmDialog (line 132) | public void ConfirmDialog()
FILE: source/Playnite.DesktopApp/ViewModels/MetadataComparisonViewModel.cs
type MetadataChangeDataSource (line 19) | public enum MetadataChangeDataSource
class MetadataComparisonViewModel (line 25) | public class MetadataComparisonViewModel : ObservableObject
class DiffItem (line 27) | public class DiffItem : ObservableObject
class ListDiffItem (line 60) | public class ListDiffItem<T> : DiffItem where T : DatabaseObject
class ListObjectItem (line 66) | public class ListObjectItem<T> : DiffItem
method MetadataComparisonViewModel (line 148) | public MetadataComparisonViewModel(
method OpenView (line 254) | public bool? OpenView()
method CloseView (line 259) | public void CloseView()
method ConfirmDialog (line 264) | public void ConfirmDialog()
method ConsolidateGenericListSources (line 366) | private List<T> ConsolidateGenericListSources<T>(List<SelectableItem<T...
method ConsolidateDbListSources (line 390) | private List<T> ConsolidateDbListSources<T>(List<SelectableItem<T>> so...
method GetImageProperties (line 414) | private Tuple<string, ImageProperties> GetImageProperties(string image)
method SelectAllCurrent (line 436) | private void SelectAllCurrent()
method SelectAllNew (line 441) | private void SelectAllNew()
method SetSelection (line 446) | private void SetSelection(MetadataChangeDataSource source)
FILE: source/Playnite.DesktopApp/ViewModels/MetadataDownloadViewModel.cs
class MetadataDownloadViewModel (line 9) | public class MetadataDownloadViewModel : ObservableObject
type ViewMode (line 11) | public enum ViewMode
method MetadataDownloadViewModel (line 125) | public MetadataDownloadViewModel(IWindowFactory window, IResourceProvi...
method OpenView (line 131) | public bool? OpenView(ViewMode mode, MetadataDownloaderSettings settings)
method CloseView (line 138) | public void CloseView(bool success)
method Next (line 155) | public void Next()
method Back (line 160) | public void Back()
method CanDownloadData (line 165) | private bool CanDownloadData()
method CanDownloadData (line 188) | private static bool CanDownloadData(MetadataFieldSettings fieldSettings)
FILE: source/Playnite.DesktopApp/ViewModels/PluginSettingsViewModel.cs
class PluginSettingsViewModel (line 14) | public class PluginSettingsViewModel : ObservableObject
method PluginSettingsViewModel (line 69) | public PluginSettingsViewModel(
method OpenView (line 116) | public bool? OpenView()
method CloseView (line 121) | public void CloseView()
method ConfirmDialog (line 128) | public void ConfirmDialog()
method WindowClosing (line 145) | public void WindowClosing()
FILE: source/Playnite.DesktopApp/ViewModels/SettingsViewModel.cs
class SelectableTrayIcon (line 34) | public class SelectableTrayIcon
method SelectableTrayIcon (line 39) | public SelectableTrayIcon(TrayIconType trayIcon)
class SearchSupportSettings (line 46) | public class SearchSupportSettings : SearchSupport
method SearchSupportSettings (line 51) | public SearchSupportSettings(LoadedPlugin plugin, SearchSupport suppor...
class SettingsViewModel (line 61) | public class SettingsViewModel : ObservableObject
method SettingsViewModel (line 374) | public SettingsViewModel(
method SettingsTreeSelectedItemChanged (line 485) | private void SettingsTreeSelectedItemChanged(RoutedPropertyChangedEven...
method OpenView (line 504) | public bool? OpenView()
method OpenView (line 509) | public bool? OpenView(DesktopSettingsPage viewIndex)
method CloseView (line 519) | public void CloseView()
method ConfirmDialog (line 525) | public void ConfirmDialog()
method SelectDbFile (line 612) | public void SelectDbFile()
method ClearWebcache (line 622) | public void ClearWebcache()
method SetCoverArtAspectRatio (line 637) | public void SetCoverArtAspectRatio(string ratio)
method SetDefaults (line 647) | private void SetDefaults()
method EndEdit (line 662) | public void EndEdit()
method TestScript (line 677) | public void TestScript(string script)
FILE: source/Playnite.DesktopApp/ViewModels/StatisticsViewModel.cs
class StatisticsViewModel (line 14) | public class StatisticsViewModel : ObservableObject
class FilterSection (line 44) | public class FilterSection
method FilterSection (line 49) | public FilterSection(GameField field, string name)
method ToString (line 55) | public override string ToString()
class FilterObject (line 61) | public class FilterObject : ObservableObject
method FilterObject (line 71) | public FilterObject(object value, string displayName)
method FilterObject (line 77) | public FilterObject(object value)
class BaseStatInfo (line 83) | public class BaseStatInfo
method BaseStatInfo (line 90) | public BaseStatInfo(string name, ulong value)
method BaseStatInfo (line 96) | public BaseStatInfo(string name, ulong value, ulong total) : this(na...
class GameStats (line 161) | public class GameStats
method StatisticsViewModel (line 219) | public StatisticsViewModel()
method StatisticsViewModel (line 223) | public StatisticsViewModel(
method Calculate (line 246) | public void Calculate()
method LoadFilterObjects (line 257) | private void LoadFilterObjects()
method FillData (line 325) | private GameStats FillData(bool filtered)
method PassesFilter (line 434) | private bool PassesFilter(Game game)
method ReloadFilteredData (line 488) | private void ReloadFilteredData()
FILE: source/Playnite.DesktopApp/ViewModels/ToolsConfigViewModel.cs
class ToolsConfigViewModel (line 19) | public class ToolsConfigViewModel : ObservableObject
method ToolsConfigViewModel (line 99) | public ToolsConfigViewModel(
method OpenView (line 114) | public bool? OpenView()
method CloseView (line 119) | public void CloseView()
method ConfirmDialog (line 124) | public void ConfirmDialog()
method AddApp (line 175) | private void AddApp()
method AddAppFromExe (line 182) | private void AddAppFromExe()
method RemoveApp (line 229) | private void RemoveApp(AppSoftware a)
method SelectIcon (line 234) | private void SelectIcon()
method RemoveIcon (line 258) | private void RemoveIcon()
FILE: source/Playnite.DesktopApp/Windows/AboutWindow.xaml.cs
class AboutWindowFactory (line 6) | public class AboutWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class AboutWindow (line 17) | public partial class AboutWindow : WindowBase
method AboutWindow (line 19) | public AboutWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/ActionSelectionWindow.xaml.cs
class ActionSelectionWindowFactory (line 6) | public class ActionSelectionWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class ActionSelectionWindow (line 17) | public partial class ActionSelectionWindow : WindowBase
method ActionSelectionWindow (line 19) | public ActionSelectionWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/AddonsWindow.xaml.cs
class AddonsWindowFactory (line 6) | public class AddonsWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class AddonsWindow (line 17) | public partial class AddonsWindow : WindowBase
method AddonsWindow (line 21) | public AddonsWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/CategoryConfigWindow.xaml.cs
class CategoryConfigWindowFactory (line 6) | public class CategoryConfigWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class CategoryConfigWindow (line 17) | public partial class CategoryConfigWindow : WindowBase
method CategoryConfigWindow (line 21) | public CategoryConfigWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/ControlGallery.xaml.cs
class ControlGallery (line 20) | public partial class ControlGallery : Window
method ControlGallery (line 22) | public ControlGallery() : base()
FILE: source/Playnite.DesktopApp/Windows/CrashHandlerWindow.xaml.cs
class CrashHandlerWindow (line 8) | public partial class CrashHandlerWindow : WindowBase
method CrashHandlerWindow (line 10) | public CrashHandlerWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/DatabaseFieldsManagerWindow.xaml.cs
class DatabaseFieldsManagerWindowFactory (line 6) | public class DatabaseFieldsManagerWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class DatabaseFieldsManagerWindow (line 14) | public partial class DatabaseFieldsManagerWindow : WindowBase
method DatabaseFieldsManagerWindow (line 16) | public DatabaseFieldsManagerWindow() : base("DatabaseFieldsManagerWind...
FILE: source/Playnite.DesktopApp/Windows/EmulatedGameImportWindow.xaml.cs
class EmulatedGameImportWindowFactory (line 6) | public class EmulatedGameImportWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class EmulatedGameImportWindow (line 17) | public partial class EmulatedGameImportWindow : WindowBase
method EmulatedGameImportWindow (line 19) | public EmulatedGameImportWindow() : base("EmulatedGameImportWindow_V2")
FILE: source/Playnite.DesktopApp/Windows/EmulatorDownloadWindow.xaml.cs
class EmulatorDownloadWindowFactory (line 6) | public class EmulatorDownloadWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class EmulatorDownloadWindow (line 17) | public partial class EmulatorDownloadWindow : WindowBase
method EmulatorDownloadWindow (line 19) | public EmulatorDownloadWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/EmulatorImportWindow.xaml.cs
class EmulatorImportWindowFactory (line 6) | public class EmulatorImportWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class EmulatorImportWindow (line 17) | public partial class EmulatorImportWindow : WindowBase
method EmulatorImportWindow (line 19) | public EmulatorImportWindow() : base("EmulatorImportWindow_V2")
FILE: source/Playnite.DesktopApp/Windows/EmulatorsWindow.xaml.cs
class EmulatorsWindowFactory (line 6) | public class EmulatorsWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class EmulatorsWindow (line 17) | public partial class EmulatorsWindow : WindowBase
method EmulatorsWindow (line 19) | public EmulatorsWindow() : base("EmulatorsWindow_V2")
FILE: source/Playnite.DesktopApp/Windows/ExtensionCrashHandlerWindow.xaml.cs
class ExtensionCrashHandlerWindow (line 8) | public partial class ExtensionCrashHandlerWindow : WindowBase
method ExtensionCrashHandlerWindow (line 10) | public ExtensionCrashHandlerWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/FirstTimeStartupWindow.xaml.cs
class FirstTimeStartupWindowFactory (line 6) | public class FirstTimeStartupWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class FirstTimeStartupWindow (line 17) | public partial class FirstTimeStartupWindow : WindowBase
method FirstTimeStartupWindow (line 19) | public FirstTimeStartupWindow() : base()
method ButtonFinish_IsVisibleChanged (line 24) | private void ButtonFinish_IsVisibleChanged(object sender, System.Windo...
FILE: source/Playnite.DesktopApp/Windows/GameEditWindow.xaml.cs
class GameEditWindowFactory (line 6) | public class GameEditWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class GameEditWindow (line 17) | public partial class GameEditWindow : WindowBase
method GameEditWindow (line 21) | public GameEditWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/GoogleImageDownloadWindow.xaml.cs
class GoogleImageDownloadWindowFactory (line 6) | public class GoogleImageDownloadWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class GoogleImageDownloadWindow (line 17) | public partial class GoogleImageDownloadWindow : WindowBase
method GoogleImageDownloadWindow (line 21) | public GoogleImageDownloadWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/ImageSelectionWindow.xaml.cs
class ImageSelectionWindowFactory (line 6) | public class ImageSelectionWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class ImageSelectionWindow (line 17) | public partial class ImageSelectionWindow : WindowBase
method ImageSelectionWindow (line 19) | public ImageSelectionWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/InstalledGamesWindow.xaml.cs
class InstalledGamesWindowFactory (line 6) | public class InstalledGamesWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class InstalledGamesWindow (line 17) | public partial class InstalledGamesWindow : WindowBase
method InstalledGamesWindow (line 19) | public InstalledGamesWindow() : base(nameof(InstalledGamesWindow), true)
FILE: source/Playnite.DesktopApp/Windows/ItemSelectionWithSearchWindow.xaml.cs
class ItemSelectionWithSearchWindowFactory (line 6) | public class ItemSelectionWithSearchWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class ItemSelectionWithSearchWindow (line 17) | public partial class ItemSelectionWithSearchWindow : WindowBase
method ItemSelectionWithSearchWindow (line 19) | public ItemSelectionWithSearchWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/LibraryIntegrationsWindow.xaml.cs
class LibraryIntegrationsWindowFactory (line 12) | public class LibraryIntegrationsWindowFactory : WindowFactory
method CreateNewWindowInstance (line 14) | public override WindowBase CreateNewWindowInstance()
class LibraryIntegrationsWindow (line 23) | public partial class LibraryIntegrationsWindow : WindowBase
method LibraryIntegrationsWindow (line 25) | public LibraryIntegrationsWindow() : base("LibraryIntegrationsWindow_V2")
FILE: source/Playnite.DesktopApp/Windows/LicenseAgreementWindow.xaml.cs
class LicenseAgreementWindow (line 9) | public partial class LicenseAgreementWindow : WindowBase
method LicenseAgreementWindow (line 11) | public LicenseAgreementWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/MainWindow.xaml.cs
class MainWindowFactory (line 6) | public class MainWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class MainWindow (line 17) | public partial class MainWindow : WindowBase
method MainWindow (line 21) | public MainWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/MessageBoxWindow.xaml.cs
class MessageBoxWindow (line 24) | public partial class MessageBoxWindow : WindowBase
method MessageBoxWindow (line 150) | public MessageBoxWindow() : base()
method ShowInputReadOnly (line 155) | public void ShowInputReadOnly(
method ShowInput (line 182) | public StringSelectionDialogResult ShowInput(
method Show (line 225) | public MessageBoxResult Show(
method ShowCustom (line 293) | public MessageBoxOption ShowCustom(
method SetStrings (line 350) | private void SetStrings(string messageText, string messageCaption)
method ButtonOK_Click (line 371) | private void ButtonOK_Click(object sender, RoutedEventArgs e)
method ButtonYes_Click (line 377) | private void ButtonYes_Click(object sender, RoutedEventArgs e)
method ButtonNo_Click (line 383) | private void ButtonNo_Click(object sender, RoutedEventArgs e)
method ButtonCancel_Click (line 389) | private void ButtonCancel_Click(object sender, RoutedEventArgs e)
FILE: source/Playnite.DesktopApp/Windows/MetadataComparisonWindow.xaml.cs
class MetadataComparisonWindowFactory (line 6) | public class MetadataComparisonWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class MetadataComparisonWindow (line 17) | public partial class MetadataComparisonWindow : WindowBase
method MetadataComparisonWindow (line 21) | public MetadataComparisonWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/MetadataDownloadWindow.xaml.cs
class MetadataDownloadWindowFactory (line 6) | public class MetadataDownloadWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class MetadataDownloadWindow (line 17) | public partial class MetadataDownloadWindow : WindowBase
method MetadataDownloadWindow (line 19) | public MetadataDownloadWindow() : base(nameof(MetadataDownloadWindow),...
FILE: source/Playnite.DesktopApp/Windows/MultiItemSelectionWindow.xaml.cs
class MultiItemSelectionWindow (line 9) | public partial class MultiItemSelectionWindow : WindowBase
method MultiItemSelectionWindow (line 11) | public MultiItemSelectionWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/PluginSettingsWindow.xaml.cs
class PluginSettingsWindowFactory (line 19) | public class PluginSettingsWindowFactory : WindowFactory
method CreateNewWindowInstance (line 21) | public override WindowBase CreateNewWindowInstance()
class PluginSettingsWindow (line 30) | public partial class PluginSettingsWindow : WindowBase
method PluginSettingsWindow (line 32) | public PluginSettingsWindow()
FILE: source/Playnite.DesktopApp/Windows/ProgressWindow.xaml.cs
class ProgressWindow (line 11) | public partial class ProgressWindow : WindowBase
method ProgressWindow (line 13) | public ProgressWindow() : base()
method ProgressWindow_Loaded (line 19) | private void ProgressWindow_Loaded(object sender, System.Windows.Route...
FILE: source/Playnite.DesktopApp/Windows/RandomGameSelectWindow.xaml.cs
class RandomGameSelectWindowFactory (line 11) | public class RandomGameSelectWindowFactory : WindowFactory
method CreateNewWindowInstance (line 13) | public override WindowBase CreateNewWindowInstance()
class RandomGameSelectWindow (line 22) | public partial class RandomGameSelectWindow : WindowBase
method RandomGameSelectWindow (line 24) | public RandomGameSelectWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/SearchWindow.xaml.cs
class SearchWindowFactory (line 14) | public class SearchWindowFactory : WindowFactory
method CreateNewWindowInstance (line 16) | public override WindowBase CreateNewWindowInstance()
class SearchWindow (line 22) | public partial class SearchWindow : WindowBase
method SearchWindow (line 24) | public SearchWindow() : base("SearchWindow", false)
method SearchWindow_Loaded (line 32) | private void SearchWindow_Loaded(object sender, RoutedEventArgs e)
method SearchWindow_Activated (line 45) | private void SearchWindow_Activated(object sender, System.EventArgs e)
method TextSearchBox_IsEnabledChanged (line 51) | private void TextSearchBox_IsEnabledChanged(object sender, DependencyP...
class SearchItemTemplateSelector (line 60) | public class SearchItemTemplateSelector : DataTemplateSelector
method SearchItemTemplateSelector (line 65) | public SearchItemTemplateSelector()
method SelectTemplate (line 71) | public override DataTemplate SelectTemplate(object item, DependencyObj...
FILE: source/Playnite.DesktopApp/Windows/SettingsWindow.xaml.cs
class SettingsWindowFactory (line 12) | public class SettingsWindowFactory : WindowFactory
method CreateNewWindowInstance (line 14) | public override WindowBase CreateNewWindowInstance()
class SettingsWindow (line 23) | public partial class SettingsWindow : WindowBase
method SettingsWindow (line 27) | public SettingsWindow() : base(nameof(SettingsWindow), true)
FILE: source/Playnite.DesktopApp/Windows/SingleItemSelectionWindow.xaml.cs
class SingleItemSelectionWindow (line 9) | public partial class SingleItemSelectionWindow : WindowBase
method SingleItemSelectionWindow (line 11) | public SingleItemSelectionWindow() : base()
FILE: source/Playnite.DesktopApp/Windows/ToolsConfigWindow.xaml.cs
class ToolsConfigWindowFactory (line 6) | public class ToolsConfigWindowFactory : WindowFactory
method CreateNewWindowInstance (line 8) | public override WindowBase CreateNewWindowInstance()
class ToolsConfigWindow (line 17) | public partial class ToolsConfigWindow : WindowBase
method ToolsConfigWindow (line 19) | public ToolsConfigWindow() : base(nameof(ToolsConfigWindow), true)
FILE: source/Playnite.DesktopApp/Windows/UpdateWindow.xaml.cs
class UpdateWindow (line 8) | public partial class UpdateWindow : WindowBase
method UpdateWindow (line 10) | public UpdateWindow() : base()
FILE: source/Playnite.FullscreenApp/Api/MainViewAPI.cs
class MainViewAPI (line 15) | public class MainViewAPI : IMainViewAPI
method MainViewAPI (line 68) | public MainViewAPI(FullscreenAppViewModel mainModel)
method OpenPluginSettings (line 73) | public bool OpenPluginSettings(Guid pluginId)
method SwitchToLibraryView (line 78) | public void SwitchToLibraryView()
method SelectGame (line 83) | public void SelectGame(Guid gameId)
method SelectGames (line 96) | public void SelectGames(IEnumerable<Guid> gameIds)
method ApplyFilterPreset (line 101) | public void ApplyFilterPreset(Guid filterId)
method ApplyFilterPreset (line 106) | public void ApplyFilterPreset(FilterPreset preset)
method GetActiveFilterPreset (line 111) | public Guid GetActiveFilterPreset()
method GetCurrentFilterSettings (line 116) | public FilterPresetSettings GetCurrentFilterSettings()
method OpenSearch (line 121) | public void OpenSearch(string searchTerm)
method OpenSearch (line 126) | public void OpenSearch(SearchContext context, string searchTerm)
method OpenEditDialog (line 131) | public bool? OpenEditDialog(Guid gameId)
method OpenEditDialog (line 136) | public bool? OpenEditDialog(List<Guid> gameIds)
method GetSortedFilterPresets (line 141) | public List<FilterPreset> GetSortedFilterPresets()
method GetSortedFilterFullscreenPresets (line 146) | public List<FilterPreset> GetSortedFilterFullscreenPresets()
method ToggleFullscreenView (line 151) | public void ToggleFullscreenView()
FILE: source/Playnite.FullscreenApp/App.xaml.cs
class App (line 14) | public partial class App : Application
method App (line 16) | public App()
FILE: source/Playnite.FullscreenApp/Commands/GlobalCommands.cs
class NavigateUrlCommand (line 15) | public class NavigateUrlCommand : RelayCommand<object>
method NavigateUrlCommand (line 17) | public NavigateUrlCommand() : base(Navigate)
method Navigate (line 21) | public static void Navigate(object link)
FILE: source/Playnite.FullscreenApp/Controls/ButtonEx.cs
class ButtonEx (line 13) | public class ButtonEx : Button
method ButtonEx (line 53) | static ButtonEx()
method ButtonEx (line 58) | public ButtonEx() : base()
method ButtonEx_LostFocus (line 65) | private void ButtonEx_LostFocus(object sender, RoutedEventArgs e)
method ButtonEx_GotFocus (line 75) | private void ButtonEx_GotFocus(object sender, RoutedEventArgs e)
method Ex_KeyDown (line 92) | private void Ex_KeyDown(object sender, KeyEventArgs e)
FILE: source/Playnite.FullscreenApp/Controls/CheckBoxEx.cs
class CheckBoxEx (line 13) | public class CheckBoxEx : CheckBox
method CheckBoxEx (line 15) | static CheckBoxEx()
method CheckBoxEx (line 20) | public CheckBoxEx() : base()
method Ex_KeyDown (line 25) | private void Ex_KeyDown(object sender, KeyEventArgs e)
FILE: source/Playnite.FullscreenApp/Controls/ComboBoxEx.cs
class ComboBoxEx (line 13) | public class ComboBoxEx : ComboBox
method ComboBoxEx (line 15) | static ComboBoxEx()
method ComboBoxEx (line 20) | public ComboBoxEx() : base()
method ComboBoxEx_KeyDown (line 26) | private void ComboBoxEx_KeyDown(object sender, KeyEventArgs e)
method ComboBoxEx_PreviewKeyDown (line 58) | private void ComboBoxEx_PreviewKeyDown(object sender, KeyEventArgs e)
FILE: source/Playnite.FullscreenApp/Controls/FilterDbItemtSelection.cs
class FilterDbItemtSelection (line 24) | [TemplatePart(Name = "PART_MenuHost", Type = typeof(FrameworkElement))]
method ItemsListPropertyChangedCallback (line 59) | private static void ItemsListPropertyChangedCallback(DependencyObject ...
method List_SelectionChanged (line 86) | public void List_SelectionChanged(object sender, EventArgs e)
method FilterPropertiesPropertyChangedCallback (line 115) | private static void FilterPropertiesPropertyChangedCallback(Dependency...
method FilterDbItemtSelection (line 136) | static FilterDbItemtSelection()
method FilterDbItemtSelection (line 141) | public FilterDbItemtSelection() : this(FullscreenApplication.Current?....
method FilterDbItemtSelection (line 145) | public FilterDbItemtSelection(FullscreenAppViewModel mainModel, bool i...
method OnApplyTemplate (line 165) | public override void OnApplyTemplate()
method Dispose (line 221) | public void Dispose()
method AssignItemListPanel (line 235) | public static void AssignItemListPanel(ItemsControl itemsHost)
FILE: source/Playnite.FullscreenApp/Controls/FilterEnumListSelection.cs
class FilterEnumListSelection (line 23) | [TemplatePart(Name = "PART_MenuHost", Type = typeof(FrameworkElement))]
class SelectionObject (line 29) | public class SelectionObject
method SelectionObject (line 34) | public SelectionObject(Enum enumValue)
method EnumTypePropertyChangedCallback (line 71) | private static void EnumTypePropertyChangedCallback(DependencyObject s...
method FilterPropertiesPropertyChangedCallback (line 130) | private static void FilterPropertiesPropertyChangedCallback(Dependency...
method FilterEnumListSelection (line 151) | static FilterEnumListSelection()
method FilterEnumListSelection (line 156) | public FilterEnumListSelection() : this(FullscreenApplication.Current?...
method FilterEnumListSelection (line 160) | public FilterEnumListSelection(FullscreenAppViewModel mainModel, bool ...
method OnApplyTemplate (line 167) | public override void OnApplyTemplate()
method Dispose (line 223) | public void Dispose()
FILE: source/Playnite.FullscreenApp/Controls/FilterPresetSelector.cs
class FilterPresetSelector (line 18) | [TemplatePart(Name = "PART_ItemsFilterPresets", Type = typeof(ItemsContr...
method FilterPresetSelector (line 24) | static FilterPresetSelector()
method FilterPresetSelector (line 29) | public FilterPresetSelector() : this(FullscreenApplication.Current?.Ma...
method FilterPresetSelector (line 33) | public FilterPresetSelector(FullscreenAppViewModel mainModel)
method MainModel_PropertyChanged (line 46) | private void MainModel_PropertyChanged(object sender, PropertyChangedE...
method OnApplyTemplate (line 94) | public override void OnApplyTemplate()
FILE: source/Playnite.FullscreenApp/Controls/FilterStringListSelection.cs
class FilterStringListSelection (line 23) | [TemplatePart(Name = "PART_MenuHost", Type = typeof(FrameworkElement))]
method ItemsListPropertyChangedCallback (line 58) | private static void ItemsListPropertyChangedCallback(DependencyObject ...
method List_SelectionChanged (line 85) | public void List_SelectionChanged(object sender, EventArgs e)
method FilterPropertiesPropertyChangedCallback (line 114) | private static void FilterPropertiesPropertyChangedCallback(Dependency...
method FilterStringListSelection (line 134) | static FilterStringListSelection()
method FilterStringListSelection (line 139) | public FilterStringListSelection() : this(FullscreenApplication.Curren...
method FilterStringListSelection (line 143) | public FilterStringListSelection(FullscreenAppViewModel mainModel, boo...
method OnApplyTemplate (line 150) | public override void OnApplyTemplate()
method Dispose (line 206) | public void Dispose()
FILE: source/Playnite.FullscreenApp/Controls/FullscreenTilePanel.cs
class InternalChildrenGeneratedArgs (line 17) | public class InternalChildrenGeneratedArgs
class FullscreenTilePanel (line 21) | public class FullscreenTilePanel : VirtualizingPanel, IScrollInfo
method OnInternalChildrenGenerated (line 35) | private void OnInternalChildrenGenerated()
method SetVerticalOffset (line 75) | public static void SetVerticalOffset(FrameworkElement target, double v...
method GetVerticalOffset (line 80) | public static double GetVerticalOffset(FrameworkElement target)
method OnVerticalOffsetChanged (line 85) | private static void OnVerticalOffsetChanged(DependencyObject target, D...
method SetHorizontalOffset (line 99) | public static void SetHorizontalOffset(FrameworkElement target, double...
method GetHorizontalOffset (line 104) | public static double GetHorizontalOffset(FrameworkElement target)
method OnHorizontalOffsetChanged (line 109) | private static void OnHorizontalOffsetChanged(DependencyObject target,...
method FullscreenTilePanel (line 223) | public FullscreenTilePanel() : base()
method OnLayoutPropertyChanged (line 228) | private static void OnLayoutPropertyChanged(DependencyObject obj, Depe...
method MeasureOverride (line 239) | protected override Size MeasureOverride(Size availableSize)
method ArrangeOverride (line 307) | protected override Size ArrangeOverride(Size finalSize)
method GetItemRect (line 326) | private Rect GetItemRect(int itemIndex)
method GetVisibleRange (line 364) | private void GetVisibleRange(out int firstIndex, out int lastIndex)
method CleanUpItems (line 405) | private void CleanUpItems(int firstIndex, int lastIndex)
method OnItemsChanged (line 435) | protected override void OnItemsChanged(object sender, ItemsChangedEven...
method GetExtent (line 449) | internal Size GetExtent()
method GetItemHeight (line 478) | internal double GetItemHeight()
method GetItemWidth (line 490) | internal double GetItemWidth()
method GetCenterMargin (line 502) | internal double GetCenterMargin()
method UpdateScrollInfo (line 531) | internal void UpdateScrollInfo(Size availableSize)
method BeginAnimation (line 594) | public void BeginAnimation(double from, double to, TimeSpan speed, Dep...
method SetHorizontalOffset (line 602) | public void SetHorizontalOffset(double newOffset)
method SetVerticalOffset (line 622) | public void SetVerticalOffset(double newOffset)
method ScrollToItem (line 642) | public void ScrollToItem(object item)
method MakeVisible (line 656) | public Rect MakeVisible(Visual visual, Rect rectangle)
method LineLeft (line 705) | public void LineLeft()
method LineRight (line 717) | public void LineRight()
method LineUp (line 729) | public void LineUp()
method LineDown (line 741) | public void LineDown()
method MouseWheelDown (line 753) | public void MouseWheelDown()
method MouseWheelLeft (line 757) | public void MouseWheelLeft()
method MouseWheelRight (line 761) | public void MouseWheelRight()
method MouseWheelUp (line 765) | public void MouseWheelUp()
method PageLeft (line 769) | public void PageLeft()
method PageRight (line 774) | public void PageRight()
method PageUp (line 779) | public void PageUp()
method PageDown (line 791) | public void PageDown()
FILE: source/Playnite.FullscreenApp/Controls/GameListItem.cs
class GameListItem (line 24) | [TemplatePart(Name = "PART_ImageCover", Type = typeof(Image))]
method GameListItem (line 30) | static GameListItem()
method GameListItem (line 35) | public GameListItem() : this(FullscreenApplication.Current?.MainModel)
method GameListItem (line 39) | public GameListItem(FullscreenAppViewModel mainModel)
method GameListItem_MouseRightButtonUp (line 53) | private void GameListItem_MouseRightButtonUp(object sender, MouseButto...
method OnApplyTemplate (line 61) | public override void OnApplyTemplate()
FILE: source/Playnite.FullscreenApp/Controls/ItemsControlEx.cs
class ItemsControlEx (line 14) | public class ItemsControlEx : ItemsControl
method ItemsControlEx (line 28) | static ItemsControlEx()
method ItemsControlEx (line 33) | public ItemsControlEx() : base()
method ItemsControlEx_PreviewKeyDown (line 38) | private void ItemsControlEx_PreviewKeyDown(object sender, KeyEventArgs e)
FILE: source/Playnite.FullscreenApp/Controls/ListBoxEx.cs
class ListBoxEx (line 14) | public class ListBoxEx : ListBox
method ListBoxEx (line 22) | static ListBoxEx()
method ListBoxEx (line 27) | public ListBoxEx() : base()
method ListBoxEx_PreviewKeyDown (line 41) | private void ListBoxEx_PreviewKeyDown(object sender, KeyEventArgs e)
method ListBoxEx_MouseWheel (line 62) | private void ListBoxEx_MouseWheel(object sender, MouseWheelEventArgs e)
method ListBoxEx_Unloaded (line 112) | private void ListBoxEx_Unloaded(object sender, RoutedEventArgs e)
method ListBoxEx_Loaded (line 120) | private void ListBoxEx_Loaded(object sender, RoutedEventArgs e)
method ItemsPanel_InternalChildrenGenerated (line 129) | private void ItemsPanel_InternalChildrenGenerated(object sender, Inter...
method ListBoxEx_GotFocus (line 134) | private void ListBoxEx_GotFocus(object sender, RoutedEventArgs e)
method ListBoxEx_SelectionChanged (line 139) | private void ListBoxEx_SelectionChanged(object sender, SelectionChange...
method FocusSelected (line 144) | private void FocusSelected()
FILE: source/Playnite.FullscreenApp/Controls/ScrollViewerEx.cs
class ScrollViewerEx (line 13) | public class ScrollViewerEx : ScrollViewer
method ScrollViewerEx (line 15) | static ScrollViewerEx()
method ScrollViewerEx (line 20) | public ScrollViewerEx() : base()
method ScrollViewerEx_Loaded (line 26) | private void ScrollViewerEx_Loaded(object sender, RoutedEventArgs e)
method ScrollViewerEx_Unloaded (line 32) | private void ScrollViewerEx_Unloaded(object sender, RoutedEventArgs e)
method ScrollViewerEx_PreviewKeyDown (line 38) | private void ScrollViewerEx_PreviewKeyDown(object sender, KeyEventArgs e)
method ScrollViewerEx_ScrollChanged (line 70) | private void ScrollViewerEx_ScrollChanged(object sender, ScrollChanged...
FILE: source/Playnite.FullscreenApp/Controls/SettingsSections/Audio.xaml.cs
class Audio (line 26) | public partial class Audio : SettingsSectionControl
method Audio (line 28) | public Audio()
method Audio (line 33) | public Audio(FullscreenAppViewModel mainModel)
FILE: source/Playnite.FullscreenApp/Controls/SettingsSections/General.xaml.cs
class General (line 25) | public partial class General : SettingsSectionControl
method General (line 27) | public General()
method General (line 32) | public General(FullscreenAppViewModel mainModel)
FILE: source/Playnite.FullscreenApp/Controls/SettingsSections/Input.xaml.cs
class Input (line 25) | public partial class Input : SettingsSectionControl
method Input (line 29) | public Input()
method Input (line 34) | public Input(FullscreenAppViewModel mainModel)
method LoadControllers (line 86) | private void LoadControllers()
method GameController_ControllersChanged (line 118) | private void GameController_ControllersChanged(object sender, EventArg...
method Dispose (line 124) | public override void Dispose()
FILE: source/Playnite.FullscreenApp/Controls/SettingsSections/Layout.xaml.cs
class Layout (line 24) | public partial class Layout : SettingsSectionControl
method Layout (line 26) | public Layout()
method Layout (line 31) | public Layout(FullscreenAppViewModel mainModel)
FILE: source/Playnite.FullscreenApp/Controls/SettingsSections/Menus.xaml.cs
class Menus (line 24) | public partial class Menus : SettingsSectionControl
method Menus (line 26) | public Menus()
method Menus (line 31) | public Menus(FullscreenAppViewModel mainModel)
FILE: source/Playnite.FullscreenApp/Controls/SettingsSections/SettingsSectionControl.cs
class SettingsSectionControl (line 10) | public class SettingsSectionControl : UserControl, IDisposable
method Dispose (line 12) | public virtual void Dispose()
FILE: source/Playnite.FullscreenApp/Controls/SettingsSections/Visuals.xaml.cs
class Visuals (line 24) | public partial class Visuals : SettingsSectionControl
method Visuals (line 26) | public Visuals()
method Visuals (line 31) | public Visuals(FullscreenAppViewModel mainModel)
FILE: source/Playnite.FullscreenApp/Controls/SliderEx.cs
class SliderEx (line 12) | public class SliderEx : Slider
method SliderEx (line 14) | static SliderEx()
method SliderEx (line 19) | public SliderEx() : base()
method ComboBoxEx_PreviewKeyDown (line 24) | private void ComboBoxEx_PreviewKeyDown(object sender, KeyEventArgs e)
FILE: source/Playnite.FullscreenApp/Controls/ToggleButtonEx.cs
class ToggleButtonEx (line 14) | public class ToggleButtonEx : ToggleButton
method ToggleButtonEx (line 16) | static ToggleButtonEx()
method ToggleButtonEx (line 21) | public ToggleButtonEx() : base()
method Ex_KeyDown (line 26) | private void Ex_KeyDown(object sender, KeyEventArgs e)
FILE: source/Playnite.FullscreenApp/Controls/Views/Filters.cs
class Filters (line 22) | [TemplatePart(Name = "PART_ItemsHost", Type = typeof(ItemsControl))]
method Filters (line 28) | static Filters()
method Filters (line 33) | public Filters() : this(FullscreenApplication.Current?.MainModel)
method Filters (line 37) | public Filters(FullscreenAppViewModel mainModel) : base()
method OnApplyTemplate (line 49) | public override void OnApplyTemplate()
method AssignBoolFilter (line 199) | private void AssignBoolFilter(string bindBased, string text)
method AssignFilter (line 214) | private void AssignFilter(GameField field, string bindBased, string text)
FILE: source/Playnite.FullscreenApp/Controls/Views/FiltersAdditional.cs
class FiltersAdditional (line 22) | [TemplatePart(Name = "PART_MenuHost", Type = typeof(FrameworkElement))]
method FiltersAdditional (line 32) | static FiltersAdditional()
method FiltersAdditional (line 37) | public FiltersAdditional() : this(FullscreenApplication.Current?.MainM...
method FiltersAdditional (line 41) | public FiltersAdditional(FullscreenAppViewModel mainModel) : base()
method Dispose (line 53) | public void Dispose()
method OnApplyTemplate (line 57) | public override void OnApplyTemplate()
method AssignFilter (line 130) | private void AssignFilter(string title, string partId, GameField field...
FILE: source/Playnite.FullscreenApp/Controls/Views/GameDetails.cs
class GameDetails (line 24) | [TemplatePart(Name = "PART_ViewHost", Type = typeof(FrameworkElement))]
method GameDetails (line 42) | static GameDetails()
method GameDetails (line 47) | public GameDetails() : this(FullscreenApplication.Current?.MainModel)
method GameDetails_DataContextChanged (line 52) | private void GameDetails_DataContextChanged(object sender, DependencyP...
method GameDetails (line 58) | public GameDetails(FullscreenAppViewModel mainModel) : base()
method MainModel_PropertyChanged (line 73) | private void MainModel_PropertyChanged(object sender, PropertyChangedE...
method OnApplyTemplate (line 100) | public override void OnApplyTemplate()
FILE: source/Playnite.FullscreenApp/Controls/Views/GameStatus.cs
class GameStatus (line 18) | [TemplatePart(Name = "PART_ViewHost", Type = typeof(FrameworkElement))]
method GameStatus (line 30) | static GameStatus()
method GameStatus (line 35) | public GameStatus() : this(FullscreenApplication.Current?.MainModel)
method GameStatus (line 39) | public GameStatus(FullscreenAppViewModel mainModel) : base()
method OnApplyTemplate (line 50) | public override void OnApplyTemplate()
FILE: source/Playnite.FullscreenApp/Controls/Views/Main.cs
class Main (line 26) | [TemplatePart(Name = "PART_ViewHost", Type = typeof(FrameworkElement))]
method Main (line 81) | static Main()
method Main (line 86) | public Main() : this(FullscreenApplication.Current?.MainModel)
method Main (line 90) | public Main(FullscreenAppViewModel mainModel) : base()
method MainModel_PropertyChanged (line 106) | private void MainModel_PropertyChanged(object sender, PropertyChangedE...
method Fullscreen_PropertyChanged (line 132) | private void Fullscreen_PropertyChanged(object sender, PropertyChanged...
method SetListCommandBindings (line 149) | private void SetListCommandBindings()
method SetBackgroundBinding (line 170) | private void SetBackgroundBinding()
method SetBackgroundEffect (line 191) | private void SetBackgroundEffect()
method OnApplyTemplate (line 226) | public override void OnApplyTemplate()
method SetDetailsElemBindings (line 529) | private void SetDetailsElemBindings()
method AssignButtonWithCommand (line 549) | private void AssignButtonWithCommand(ref ButtonEx button, string partI...
method AssignButtonWithCommand (line 558) | private void AssignButtonWithCommand(ref ButtonBase button, string par...
FILE: source/Playnite.FullscreenApp/FullscreenActionSelector.cs
class FullscreenActionSelector (line 14) | public class FullscreenActionSelector : IActionSelector
method SelectPlayAction (line 16) | public object SelectPlayAction(List<PlayController> controllers, List<...
method SelectInstallAction (line 33) | public InstallController SelectInstallAction(List<InstallController> p...
method SelectUninstallAction (line 39) | public UninstallController SelectUninstallAction(List<UninstallControl...
FILE: source/Playnite.FullscreenApp/FullscreenApplication.cs
class FullscreenApplication (line 29) | public class FullscreenApplication : PlayniteApplication
method FullscreenApplication (line 58) | public FullscreenApplication(Func<Application> appInitializer, SplashS...
method ConfigureViews (line 64) | public override void ConfigureViews()
method Startup (line 77) | public override bool Startup()
method InstantiateApp (line 109) | public override void InstantiateApp()
method FullscreenApplication_PropertyChanged (line 138) | private void FullscreenApplication_PropertyChanged(object sender, Syst...
method OpenMainViewAsync (line 169) | private async void OpenMainViewAsync()
method InitializeNative (line 193) | public override void InitializeNative()
method Restore (line 198) | public override void Restore()
method Minimize (line 203) | public override void Minimize()
method Restart (line 208) | public override void Restart(bool saveSettings)
method Restart (line 213) | public override void Restart(CmdLineOptions options, bool saveSettings)
method ShowWindowsNotification (line 220) | public override void ShowWindowsNotification(string title, string body...
method SwitchAppMode (line 225) | public override void SwitchAppMode(ApplicationMode mode)
method ReleaseResources (line 237) | public override void ReleaseResources(bool releaseCefSharp = true)
method PlayNavigateSound (line 258) | public static void PlayNavigateSound()
method PlayActivateSound (line 268) | public static void PlayActivateSound()
method InitSDL (line 278) | private void InitSDL()
method SDLEventLoop (line 303) | private void SDLEventLoop()
method SetupInputs (line 336) | public void SetupInputs()
method UpdateConfirmCancelBindings (line 363) | public void UpdateConfirmCancelBindings()
method InitializeAudio (line 369) | private void InitializeAudio()
method GetApiInstance (line 434) | public override PlayniteAPI GetApiInstance(ExtensionManifest pluginOwner)
method GetApiInstance (line 454) | public override PlayniteAPI GetApiInstance()
FILE: source/Playnite.FullscreenApp/FullscreenCollectionView.cs
class FullscreenCollectionView (line 14) | public class FullscreenCollectionView : BaseCollectionView
method FullscreenCollectionView (line 19) | public FullscreenCollectionView(
method Dispose (line 36) | public override void Dispose()
method ViewSettings_PropertyChanged (line 44) | private void ViewSettings_PropertyChanged(object sender, PropertyChang...
method SetViewDescriptions (line 56) | private void SetViewDescriptions()
method Database_GameUpdated (line 66) | private void Database_GameUpdated(object sender, ItemUpdatedEventArgs<...
method Database_GamesCollectionChanged (line 79) | private void Database_GamesCollectionChanged(object sender, ItemCollec...
method RefreshView (line 114) | public override void RefreshView()
FILE: source/Playnite.FullscreenApp/FullscreenDialogs.cs
class FullscreenDialogs (line 17) | public class FullscreenDialogs : IDialogsFactory
method FullscreenDialogs (line 21) | public FullscreenDialogs()
method Invoke (line 26) | private T Invoke<T>(Func<T> action)
method Invoke (line 37) | private void Invoke(Action action)
method SaveFile (line 45) | public string SaveFile(string filter)
method SaveFile (line 50) | public string SaveFile(string filter, string initialDir)
method SaveFile (line 55) | public string SaveFile(string filter, bool promptOverwrite)
method SaveFile (line 60) | public string SaveFile(string filter, bool promptOverwrite, string ini...
method SelectFile (line 65) | public string SelectFile(string filter)
method SelectFile (line 70) | public string SelectFile(string filter, string initialDir)
method SelectFiles (line 75) | public List<string> SelectFiles(string filter)
method SelectFiles (line 80) | public List<string> SelectFiles(string filter, string initialDir)
method SelectFolder (line 85) | public string SelectFolder()
method SelectFolder (line 90) | public string SelectFolder(string initialDir)
method SelectIconFile (line 95) | public string SelectIconFile()
method SelectIconFile (line 100) | public string SelectIconFile(string initialDir)
method SelectImagefile (line 105) | public string SelectImagefile()
method SelectImagefile (line 110) | public string SelectImagefile(string initialDir)
method SelectString (line 115) | public StringSelectionDialogResult SelectString(string messageBoxText,...
method SelectString (line 120) | public StringSelectionDialogResult SelectString(string messageBoxText,...
method ShowMessage (line 125) | public MessageBoxResult ShowMessage(string messageBoxText, string capt...
method ShowMessage (line 130) | public MessageBoxResult ShowMessage(string messageBoxText, string capt...
method ShowMessage (line 135) | public MessageBoxResult ShowMessage(string messageBoxText, string capt...
method ShowMessage (line 140) | public MessageBoxResult ShowMessage(string messageBoxText, string capt...
method ShowMessage (line 145) | public MessageBoxResult ShowMessage(string messageBoxText, string capt...
method ShowMessage (line 150) | public MessageBoxResult ShowMessage(string messageBoxText)
method ShowSelectableString (line 155) | public void ShowSelectableString(string messageBoxText, string caption...
method ShowErrorMessage (line 160) | public MessageBoxResult ShowErrorMessage(string messageBoxText, string...
method ShowErrorMessage (line 165) | public MessageBoxResult ShowErrorMessage(string messageBoxText)
method ShowMessage (line 170) | public MessageBoxOption ShowMessage(string messageBoxText, string capt...
method ChooseImageFile (line 175) | public ImageFileOption ChooseImageFile(List<ImageFileOption> files, st...
method ChooseItemWithSearch (line 180) | public GenericItemOption ChooseItemWithSearch(List<GenericItemOption> ...
method ActivateGlobalProgress (line 185) | public GlobalProgressResult ActivateGlobalProgress(Action<GlobalProgre...
method ActivateGlobalProgress (line 190) | public GlobalProgressResult ActivateGlobalProgress(Func<GlobalProgress...
method CreateWindow (line 195) | public Window CreateWindow(WindowCreationOptions options)
method GetCurrentAppWindow (line 204) | public Window GetCurrentAppWindow()
FILE: source/Playnite.FullscreenApp/Markup/Markups.cs
class Api (line 11) | public class Api : Extensions.Markup.Api
method Api (line 13) | public Api() : base()
method Api (line 17) | public Api(string path) : base(path)
class MainViewModel (line 22) | public class MainViewModel : Extensions.Markup.MainViewModel<FullscreenA...
method MainViewModel (line 24) | public MainViewModel() : base()
method MainViewModel (line 28) | public MainViewModel(string path) : base(path)
class PluginSettings (line 33) | public class PluginSettings : Extensions.Markup.PluginSettings
method PluginSettings (line 35) | public PluginSettings() : base()
method PluginSettings (line 39) | public PluginSettings(string path) : base(path)
class Settings (line 44) | public class Settings : Extensions.Markup.Settings
method Settings (line 46) | public Settings() : base()
method Settings (line 50) | public Settings(string path) : base(path)
class SettingsBinding (line 55) | public class SettingsBinding : Extensions.Markup.SettingsBinding
method SettingsBinding (line 57) | public SettingsBinding() : base()
method SettingsBinding (line 61) | public SettingsBinding(string path) : base(path)
class ThemeFile (line 66) | public class ThemeFile : Extensions.Markup.ThemeFile
method ThemeFile (line 68) | public ThemeFile() : base(ApplicationMode.Fullscreen)
method ThemeFile (line 72) | public ThemeFile(string path) : base(path, ApplicationMode.Fullscreen)
method GetDesignTimeDefaultTheme (line 76) | public static ThemeManifest GetDesignTimeDefaultTheme()
class ThemeFileBinding (line 82) | public class ThemeFileBinding : Extensions.Markup.ThemeFileBinding
method ThemeFileBinding (line 84) | public ThemeFileBinding() : base()
method ThemeFileBinding (line 88) | public ThemeFileBinding(string path) : base(path)
class PluginStatus (line 93) | public class PluginStatus : Extensions.Markup.PluginStatus
class PluginConverter (line 97) | public class PluginConverter : Extensions.Markup.PluginConverter
FILE: source/Playnite.FullscreenApp/ProgramEntry.cs
class ProgramEntry (line 15) | public class ProgramEntry
method Main (line 17) | [STAThread]
FILE: source/Playnite.FullscreenApp/Properties/Resources.Designer.cs
class Resources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
method Resources (line 32) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...
FILE: source/Playnite.FullscreenApp/Properties/Settings.Designer.cs
class Settings (line 15) | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
FILE: source/Playnite.FullscreenApp/ViewModels/AddonsViewModel.cs
class AddonsViewModel (line 14) | public class AddonsViewModel : Playnite.ViewModels.AddonsViewModelBase
method AddonsViewModel (line 52) | public AddonsViewModel(
method OpenView (line 69) | public bool? OpenView()
method ConfirmDialog (line 74) | public void ConfirmDialog()
FILE: source/Playnite.FullscreenApp/ViewModels/DesignData/DesignMainViewModel.cs
class DesignMainViewModel (line 19) | public class DesignMainViewModel : FullscreenAppViewModel
method DesignMainViewModel (line 69) | public DesignMainViewModel() : base(new InMemoryGameDatabase(), null, ...
FILE: source/Playnite.FullscreenApp/ViewModels/ExtensionsMenuViewModels.cs
class ExtensionsMenuViewModels (line 19) | public class ExtensionsMenuViewModels : ObservableObject
class MainMenuItemWrapper (line 21) | public class MainMenuItemWrapper
method MainMenuItemWrapper (line 31) | public MainMenuItemWrapper(List<MenuItem> items, ICommand switchList...
method MainMenuItemWrapper (line 45) | public MainMenuItemWrapper(MenuItem menuItem, ICommand switchListCom...
method PopulateChildren (line 59) | private void PopulateChildren(MainMenuItemWrapper wrapper, MenuItem ...
method ExtensionsMenuViewModels (line 83) | public ExtensionsMenuViewModels(
method ExtensionsMenuViewModels (line 222) | public ExtensionsMenuViewModels(
method OpenView (line 371) | public bool? OpenView()
method Close (line 376) | public void Close()
method SwitchList (line 390) | public void SwitchList(MainMenuItemWrapper item)
FILE: source/Playnite.FullscreenApp/ViewModels/FullscreenAppViewModel.cs
class FullscreenAppViewModel (line 35) | public partial class FullscreenAppViewModel : MainViewModelBase, IDispos...
method FullscreenAppViewModel (line 366) | public FullscreenAppViewModel(
method FullscreenAppViewModel (line 376) | public FullscreenAppViewModel(
method SystemEvents_DisplaySettingsChanged (line 409) | private void SystemEvents_DisplaySettingsChanged(object sender, EventA...
method GameControllerInputButtonChanged (line 416) | private void GameControllerInputButtonChanged(object sender, OnControl...
method GameControllerOnControllerDisconnected (line 439) | private void GameControllerOnControllerDisconnected(object sender, OnC...
method GameControllerOnControllerConnected (line 454) | private void GameControllerOnControllerConnected(object sender, OnCont...
method Controllers_StartupCancelled (line 469) | private void Controllers_StartupCancelled(object sender, OnGameStartup...
method Controllers_Stopped (line 474) | private void Controllers_Stopped(object sender, GameStoppedEventArgs e)
method Controllers_Starting (line 492) | private void Controllers_Starting(object sender, OnGameStartingEventAr...
method Controllers_Started (line 519) | private void Controllers_Started(object sender, GameStartedEventArgs e)
method ElementGotFocusHandler (line 527) | private void ElementGotFocusHandler(object sender, RoutedEventArgs e)
method ElemestateChangedHander (line 561) | private void ElemestateChangedHander(object sender, RoutedEventArgs e)
method WindowBaseCloseHandler (line 568) | private void WindowBaseCloseHandler(object sender, RoutedEventArgs e)
method WindowBaseLoadedHandler (line 573) | private void WindowBaseLoadedHandler(object sender, RoutedEventArgs e)
method Fullscreen_PropertyChanged (line 578) | private void Fullscreen_PropertyChanged(object sender, PropertyChanged...
method FilterSettings_FilterChanged (line 668) | private void FilterSettings_FilterChanged(object sender, FilterChanged...
method AdjustGameItemsToScreenChanges (line 679) | private void AdjustGameItemsToScreenChanges()
method UpdateCursorSettings (line 691) | private void UpdateCursorSettings()
method OpenMainMenu (line 697) | public void OpenMainMenu()
method OpenNotificationsMenu (line 705) | public void OpenNotificationsMenu()
method OpenGameMenu (line 713) | public void OpenGameMenu()
method SwitchToDesktopMode (line 719) | public void SwitchToDesktopMode()
method SearchText_PropertyChanged (line 760) | private void SearchText_PropertyChanged(object sender, PropertyChanged...
method OpenSubEnumFilter (line 777) | private void OpenSubEnumFilter(string title, Type enumType, string fil...
method OpenSubStringFilter (line 796) | private void OpenSubStringFilter(string title, string itemsListPath, s...
method OpenSubFilter (line 820) | private void OpenSubFilter(string title, string itemsListPath, string ...
method OpenView (line 844) | public void OpenView()
method CloseView (line 854) | public override void CloseView()
method ToggleFullscreen (line 862) | public void ToggleFullscreen()
method SetViewSizeAndPosition (line 876) | public void SetViewSizeAndPosition(bool fullscreen)
method InitializeView (line 933) | protected void InitializeView()
method SelectGame (line 997) | public override void SelectGame(Guid id, bool restoreView = false)
method SelectGameIndex (line 1003) | public void SelectGameIndex(int index)
method GetAddonUpdatesFoundMessage (line 1017) | public override NotificationMessage GetAddonUpdatesFoundMessage(List<A...
method OnFileDropped (line 1033) | private void OnFileDropped(DragEventArgs args)
method RestoreWindow (line 1059) | public void RestoreWindow()
method MinimizeWindow (line 1064) | public void MinimizeWindow()
method Dispose (line 1069) | public void Dispose()
method Window_LocationChanged (line 1078) | private void Window_LocationChanged(object sender, EventArgs e)
method Window_StateChanged (line 1085) | private void Window_StateChanged(object sender, EventArgs e)
method ProcessUriRequest (line 1103) | internal void ProcessUriRequest(PlayniteUriEventArgs args)
method OpenSettings (line 1127) | public override void OpenSettings(int settingsPageIndex)
method EditGame (line 1131) | public override void EditGame(Game game)
method AssignCategories (line 1135) | public override void AssignCategories(Game game)
method SelectFilterPreset (line 1139) | private void SelectFilterPreset()
method SelectRandomGame (line 1156) | public void SelectRandomGame()
FILE: source/Playnite.FullscreenApp/ViewModels/FullscreenAppViewModel_Commands.cs
class FullscreenAppViewModel (line 16) | public partial class FullscreenAppViewModel
method InitializeCommands (line 45) | private void InitializeCommands()
FILE: source/Playnite.FullscreenApp/ViewModels/GameClientsMenuViewModel.cs
class GameClientsMenuViewModel (line 15) | public class GameClientsMenuViewModel : ObservableObject
method GameClientsMenuViewModel (line 31) | public GameClientsMenuViewModel(
method OpenView (line 42) | public bool? OpenView()
method Close (line 47) | public void Close()
FILE: source/Playnite.FullscreenApp/ViewModels/GameDetailsViewModel.cs
class GameDetailsViewModel (line 13) | public class GameDetailsViewModel : ObservableObject, IDisposable
method GameDetailsViewModel (line 69) | public GameDetailsViewModel(
method GameDetailsViewModel (line 76) | public GameDetailsViewModel(
method Dispose (line 92) | public void Dispose()
method Game_PropertyChanged (line 97) | private void Game_PropertyChanged(object sender, System.ComponentModel...
method InitializeCommands (line 102) | public void InitializeCommands()
method CheckSetup (line 125) | public void CheckSetup()
method CheckExecution (line 136) | public void CheckExecution()
FILE: source/Playnite.FullscreenApp/ViewModels/GameMenuViewModel.cs
class GameActionItem (line 15) | public class GameActionItem
method GameActionItem (line 22) | public GameActionItem(RelayCommandBase command, string title)
method GameActionItem (line 28) | public GameActionItem(RelayCommandBase command, string title, string t...
method GameActionItem (line 35) | public GameActionItem(RelayCommandBase command, object commandParamete...
method GameActionItem (line 42) | public GameActionItem(RelayCommandBase command, object commandParamete...
class GameMenuViewModel (line 51) | public class GameMenuViewModel : ObservableObject
method GameMenuViewModel (line 73) | public GameMenuViewModel(
method OpenView (line 113) | public bool? OpenView()
method Close (line 118) | public void Close()
method ActivateAction (line 123) | public void ActivateAction(GameAction action)
method StartGame (line 129) | public void StartGame()
method InstallGame (line 135) | public void InstallGame()
method UninstallGame (line 141) | public void UninstallGame()
method ToggleFavorites (line 147) | public void ToggleFavorites()
method ToggleVisibility (line 153) | public void ToggleVisibility()
method ToggleHdr (line 159) | public void ToggleHdr()
method RemoveGame (line 165) | public void RemoveGame()
method SelectSingleAndSet (line 171) | private void SelectSingleAndSet<T>(IItemCollection<T> dbCollection, st...
method SelectMultiAndSet (line 184) | private void SelectMultiAndSet<T>(IItemCollection<T> dbCollection, str...
method AssignScore (line 198) | private void AssignScore(string header, Action<int?> setter)
method SetFields (line 210) | private void SetFields()
method OpenExtensions (line 282) | public void OpenExtensions()
FILE: source/Playnite.FullscreenApp/ViewModels/GameStatusViewModel.cs
class GameStatusViewModel (line 9) | public class GameStatusViewModel : ObservableObject
method GameStatusViewModel (line 24) | public GameStatusViewModel(GamesCollectionViewEntry game)
FILE: source/Playnite.FullscreenApp/ViewModels/HelpMenuViewModel.cs
class HelpMenuViewModel (line 15) | public class HelpMenuViewModel : ObservableObject
method HelpMenuViewModel (line 26) | public HelpMenuViewModel(
method OpenView (line 34) | public bool? OpenView()
method Close (line 39) | public void Close()
method SendFeedback (line 44) | public void SendFeedback()
method RestartApp (line 50) | public void RestartApp()
method RestartInSafeMode (line 56) | public void RestartInSafeMode()
FILE: source/Playnite.FullscreenApp/ViewModels/MainMenuViewModel.cs
class MainMenuViewModel (line 15) | public class MainMenuViewModel : ObservableObject
method MainMenuViewModel (line 50) | public MainMenuViewModel(
method OpenView (line 58) | public bool? OpenView()
method Close (line 63) | public void Close()
method Shutdown (line 68) | public void Shutdown()
method SwitchToDesktopMode (line 75) | public void SwitchToDesktopMode()
method CancelProgress (line 81) | public void CancelProgress()
method PlayRandomGame (line 87) | public void PlayRandomGame()
method OpenSettings (line 93) | public void OpenSettings()
method OpenHelp (line 100) | public void OpenHelp()
method OpenPatreon (line 107) | public void OpenPatreon()
method OpenKofi (line 113) | public void OpenKofi()
method ShutdownSystem (line 119) | public void ShutdownSystem()
method HibernateSystem (line 133) | public void HibernateSystem()
method SleepSystem (line 154) | public void SleepSystem()
method RestartSystem (line 175) | public void RestartSystem()
method LockSystem (line 189) | public void LockSystem()
method LogoutUser (line 210) | public void LogoutUser()
method CancelLibraryUpdate (line 232) | public async void CancelLibraryUpdate()
method OpenClients (line 237) | public void OpenClients()
method OpenTools (line 244) | public void OpenTools()
method OpenExtensions (line 251) | public void OpenExtensions()
FILE: source/Playnite.FullscreenApp/ViewModels/NotificationsViewModel.cs
class NotificationsViewModel (line 16) | public class NotificationsViewModel : ObservableObject
method NotificationsViewModel (line 29) | public NotificationsViewModel(
method OpenView (line 37) | public bool? OpenView()
method Close (line 43) | public void Close()
method FullscreenAppViewModel_ActivationRequested (line 49) | private void FullscreenAppViewModel_ActivationRequested(object sender,...
FILE: source/Playnite.FullscreenApp/ViewModels/SettingsViewModel.cs
class SettingsViewModel (line 15) | public class SettingsViewModel : ObservableObject
method SettingsViewModel (line 80) | public SettingsViewModel(
method OpenView (line 97) | public bool? OpenView()
method Close (line 102) | public void Close()
method OpenSection (line 127) | private void OpenSection(string section)
method PreviewGotKeyboardFocus (line 136) | private void PreviewGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
FILE: source/Playnite.FullscreenApp/ViewModels/SoftwareToolsMenuViewModel.cs
class SoftwareToolsMenuViewModel (line 16) | public class SoftwareToolsMenuViewModel : ObservableObject
method SoftwareToolsMenuViewModel (line 32) | public SoftwareToolsMenuViewModel(
method OpenView (line 43) | public bool? OpenView()
method Close (line 48) | public void Close()
FILE: source/Playnite.FullscreenApp/Windows/AddonsUpdateWindow.xaml.cs
class AddonsUpdateWindowFactory (line 19) | public class AddonsUpdateWindowFactory : WindowFactory
method CreateNewWindowInstance (line 21) | public override WindowBase CreateNewWindowInstance()
class AddonsUpdateWindow (line 30) | public partial class AddonsUpdateWindow : WindowBase
method AddonsUpdateWindow (line 32) | public AddonsUpdateWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/CrashWindow.xaml.cs
class CrashWindow (line 21) | public partial class CrashWindow : WindowBase
method CrashWindow (line 23) | public CrashWindow() : base()
method CrashWindow_Loaded (line 30) | private void CrashWindow_Loaded(object sender, RoutedEventArgs e)
FILE: source/Playnite.FullscreenApp/Windows/ExtensionCrashWindow.xaml.cs
class ExtensionCrashWindow (line 21) | public partial class ExtensionCrashWindow : WindowBase
method ExtensionCrashWindow (line 23) | public ExtensionCrashWindow() : base()
method CrashWindow_Loaded (line 30) | private void CrashWindow_Loaded(object sender, RoutedEventArgs e)
FILE: source/Playnite.FullscreenApp/Windows/ExtensionsMenuWindow.xaml.cs
class ExtensionsMenuWindowFactory (line 22) | public class ExtensionsMenuWindowFactory : WindowFactory
method CreateNewWindowInstance (line 24) | public override WindowBase CreateNewWindowInstance()
class ExtensionsMenuWindow (line 33) | public partial class ExtensionsMenuWindow : WindowBase
method ExtensionsMenuWindow (line 37) | public ExtensionsMenuWindow() : base()
method PART_ItemsHost_LayoutUpdated (line 45) | private void PART_ItemsHost_LayoutUpdated(object sender, EventArgs e)
FILE: source/Playnite.FullscreenApp/Windows/GameClientsMenuWindow.xaml.cs
class GameClientsMenuWindowFactory (line 20) | public class GameClientsMenuWindowFactory : WindowFactory
method CreateNewWindowInstance (line 22) | public override WindowBase CreateNewWindowInstance()
class GameClientsMenuWindow (line 31) | public partial class GameClientsMenuWindow : WindowBase
method GameClientsMenuWindow (line 33) | public GameClientsMenuWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/GameMenuWindow.xaml.cs
class GameMenuWindowFactory (line 19) | public class GameMenuWindowFactory : WindowFactory
method CreateNewWindowInstance (line 21) | public override WindowBase CreateNewWindowInstance()
class GameMenuWindow (line 30) | public partial class GameMenuWindow : WindowBase
method GameMenuWindow (line 32) | public GameMenuWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/HelpMenuWindow.xaml.cs
class HelpMenuWindowFactory (line 19) | public class HelpMenuWindowFactory : WindowFactory
method CreateNewWindowInstance (line 21) | public override WindowBase CreateNewWindowInstance()
class HelpMenuWindow (line 30) | public partial class HelpMenuWindow : WindowBase
method HelpMenuWindow (line 32) | public HelpMenuWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/LicenseAgreementWindow.xaml.cs
class LicenseAgreementWindow (line 22) | public partial class LicenseAgreementWindow : WindowBase
method LicenseAgreementWindow (line 24) | public LicenseAgreementWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/MainMenuWindow.xaml.cs
class MainMenuWindowFactory (line 19) | public class MainMenuWindowFactory : WindowFactory
method CreateNewWindowInstance (line 21) | public override WindowBase CreateNewWindowInstance()
class MainMenuWindow (line 30) | public partial class MainMenuWindow : WindowBase
method MainMenuWindow (line 32) | public MainMenuWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/MainWindow.xaml.cs
class MainWindowFactory (line 21) | public class MainWindowFactory : WindowFactory
method CreateNewWindowInstance (line 23) | public override WindowBase CreateNewWindowInstance()
class MainWindow (line 32) | public partial class MainWindow : WindowBase
method MainWindow (line 34) | public MainWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/MessageBoxWindow.xaml.cs
class MessageBoxWindow (line 22) | public partial class MessageBoxWindow : WindowBase
method MessageBoxWindow (line 126) | public MessageBoxWindow() : base()
method Show (line 132) | public MessageBoxResult Show(Window owner, string messageBoxText, stri...
method ShowCustom (line 186) | public MessageBoxOption ShowCustom(
method SetStrings (line 243) | private void SetStrings(string messageText, string messageCaption)
method ButtonOK_Click (line 264) | private void ButtonOK_Click(object sender, RoutedEventArgs e)
method ButtonYes_Click (line 270) | private void ButtonYes_Click(object sender, RoutedEventArgs e)
method ButtonNo_Click (line 276) | private void ButtonNo_Click(object sender, RoutedEventArgs e)
method ButtonCancel_Click (line 282) | private void ButtonCancel_Click(object sender, RoutedEventArgs e)
FILE: source/Playnite.FullscreenApp/Windows/MultiItemSelectionWindow.xaml.cs
class MultiItemSelectionWindow (line 22) | public partial class MultiItemSelectionWindow : WindowBase
method MultiItemSelectionWindow (line 24) | public MultiItemSelectionWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/NotificationsWindow.xaml.cs
class NotificationsWindowFactory (line 19) | public class NotificationsWindowFactory : WindowFactory
method CreateNewWindowInstance (line 21) | public override WindowBase CreateNewWindowInstance()
class NotificationsWindow (line 30) | public partial class NotificationsWindow : WindowBase
method NotificationsWindow (line 32) | public NotificationsWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/ProgressWindow.xaml.cs
class ProgressWindow (line 21) | public partial class ProgressWindow : WindowBase
method ProgressWindow (line 23) | public ProgressWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/RandomGameSelectWindow.xaml.cs
class RandomGameSelectWindowFactory (line 19) | public class RandomGameSelectWindowFactory : WindowFactory
method CreateNewWindowInstance (line 21) | public override WindowBase CreateNewWindowInstance()
class RandomGameSelectWindow (line 30) | public partial class RandomGameSelectWindow : WindowBase
method RandomGameSelectWindow (line 32) | public RandomGameSelectWindow()
method RandomGameSelectWindow_Loaded (line 39) | private void RandomGameSelectWindow_Loaded(object sender, RoutedEventA...
FILE: source/Playnite.FullscreenApp/Windows/SettingsWindow.xaml.cs
class SettingsWindowFactory (line 19) | public class SettingsWindowFactory : WindowFactory
method CreateNewWindowInstance (line 21) | public override WindowBase CreateNewWindowInstance()
class SettingsWindow (line 30) | public partial class SettingsWindow : WindowBase
method SettingsWindow (line 32) | public SettingsWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/SingleItemSelectionWindow.xaml.cs
class SingleItemSelectionWindow (line 23) | public partial class SingleItemSelectionWindow : WindowBase
method SingleItemSelectionWindow (line 25) | public SingleItemSelectionWindow() : base()
method PART_ItemsHost_Loaded (line 31) | private void PART_ItemsHost_Loaded(object sender, RoutedEventArgs e)
FILE: source/Playnite.FullscreenApp/Windows/SoftwareToolsMenuWindow.xaml.cs
class SoftwareToolsMenuWindowFactory (line 20) | public class SoftwareToolsMenuWindowFactory : WindowFactory
method CreateNewWindowInstance (line 22) | public override WindowBase CreateNewWindowInstance()
class SoftwareToolsMenuWindow (line 31) | public partial class SoftwareToolsMenuWindow : WindowBase
method SoftwareToolsMenuWindow (line 33) | public SoftwareToolsMenuWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/TextInputWindow.xaml.cs
class TextInputWindow (line 23) | public partial class TextInputWindow : WindowBase
method TextInputWindow (line 125) | public TextInputWindow() : base()
method ShowInput (line 132) | public StringSelectionDialogResult ShowInput(
method Confirm (line 170) | public void Confirm()
method Cancel (line 176) | public void Cancel()
method Button_Click (line 182) | private void Button_Click(object sender, RoutedEventArgs e)
method BackSpace (line 192) | public void BackSpace()
method ClearText (line 200) | public void ClearText()
method TextInputText_PreviewKeyDown (line 205) | private void TextInputText_PreviewKeyDown(object sender, KeyEventArgs e)
method ToggleCaps (line 226) | private void ToggleCaps()
method AddSpace (line 245) | private void AddSpace()
method ProcessPreviewKeyUpDown (line 250) | private void ProcessPreviewKeyUpDown(KeyEventArgs a)
method ProcessTextInput (line 259) | private void ProcessTextInput(TextCompositionEventArgs a)
FILE: source/Playnite.FullscreenApp/Windows/UpdateWindow.xaml.cs
class UpdateWindow (line 21) | public partial class UpdateWindow : WindowBase
method UpdateWindow (line 23) | public UpdateWindow() : base()
FILE: source/Playnite.FullscreenApp/Windows/WindowTools.cs
class WindowTools (line 11) | public class WindowTools
method ConfigureChildWindow (line 13) | public static void ConfigureChildWindow(WindowBase window)
FILE: source/Playnite/API/AddonsAPI.cs
class AddonsAPI (line 12) | public class AddonsAPI : IAddons
method AddonsAPI (line 23) | public AddonsAPI(ExtensionFactory extensions, PlayniteSettings settings)
FILE: source/Playnite/API/DatabaseAPI.cs
class DatabaseAPI (line 16) | public class DatabaseAPI : IGameDatabaseAPI
method DatabaseAPI (line 51) | public DatabaseAPI(GameDatabase database)
method AddFile (line 56) | public string AddFile(string path, Guid parentId)
method SaveFile (line 66) | public void SaveFile(string id, string path)
method RemoveFile (line 71) | public void RemoveFile(string id)
method BufferedUpdate (line 76) | public IDisposable BufferedUpdate()
method GetFileStoragePath (line 81) | public string GetFileStoragePath(Guid parentId)
method GetFullFilePath (line 86) | public string GetFullFilePath(string databasePath)
method ImportGame (line 91) | public Game ImportGame(GameMetadata game)
method ImportGame (line 96) | public Game ImportGame(GameMetadata game, LibraryPlugin sourcePlugin)
method BeginBufferUpdate (line 101) | public void BeginBufferUpdate()
method EndBufferUpdate (line 106) | public void EndBufferUpdate()
method GetGameMatchesFilter (line 111) | public bool GetGameMatchesFilter(Game game, FilterPresetSettings filte...
method GetFilteredGames (line 116) | public IEnumerable<Game> GetFilteredGames(FilterPresetSettings filterS...
method GetGameMatchesFilter (line 121) | public bool GetGameMatchesFilter(Game game, FilterPresetSettings filte...
method GetFilteredGames (line 126) | public IEnumerable<Game> GetFilteredGames(FilterPresetSettings filterS...
FILE: source/Playnite/API/DesignData/DesignNotificationsAPI.cs
class DesignNotificationsAPI (line 12) | public class DesignNotificationsAPI : ObservableObject, INotificationsAPI
method DesignNotificationsAPI (line 26) | public DesignNotificationsAPI()
method Add (line 37) | public void Add(NotificationMessage message)
method Add (line 42) | public void Add(string id, string text, NotificationType type)
method Remove (line 47) | public void Remove(string id)
method RemoveAll (line 52) | public void RemoveAll()
FILE: source/Playnite/API/DesignData/DesignPlayniteAPI.cs
class DesignPlayniteAPI (line 13) | public class DesignPlayniteAPI : IPlayniteAPI
method AddCustomElementSupport (line 39) | public void AddCustomElementSupport(Plugin source, AddCustomElementSup...
method CreateLogger (line 44) | public ILogger CreateLogger(string name)
method CreateLogger (line 49) | public ILogger CreateLogger()
method ExpandGameVariables (line 54) | public string ExpandGameVariables(Game game, string inputString)
method ExpandGameVariables (line 59) | public GameAction ExpandGameVariables(Game game, GameAction action)
method StartGame (line 64) | public void StartGame(Guid gameId)
method InstallGame (line 69) | public void InstallGame(Guid gameId)
method UninstallGame (line 74) | public void UninstallGame(Guid gameId)
method AddSettingsSupport (line 79) | public void AddSettingsSupport(Plugin source, AddSettingsSupportArgs a...
method AddConvertersSupport (line 84) | public void AddConvertersSupport(Plugin source, AddConvertersSupportAr...
method GetConnectedControllers (line 89) | public List<GamepadController> GetConnectedControllers()
method ExpandGameVariables (line 94) | public string ExpandGameVariables(Game game, string inputString, strin...
FILE: source/Playnite/API/NotificationsAPI.cs
class NotificationsAPI (line 13) | public class NotificationsAPI : ObservableObject, INotificationsAPI
class MessageEventArgs (line 15) | public class MessageEventArgs : EventArgs
method MessageEventArgs (line 19) | public MessageEventArgs(NotificationMessage message)
method NotificationsAPI (line 40) | public NotificationsAPI()
method Message_Activated (line 46) | private void Message_Activated(object sender, EventArgs e)
method Message_Closed (line 51) | private void Message_Closed(object sender, EventArgs e)
method Add (line 56) | public void Add(NotificationMessage message)
method Add (line 70) | public void Add(string id, string text, NotificationType type)
method Remove (line 81) | public void Remove(string id)
method RemoveAll (line 96) | public void RemoveAll()
FILE: source/Playnite/API/PlayniteAPI.cs
type IPlayniteAPIRoot (line 24) | public interface IPlayniteAPIRoot
method ExpandGameVariables (line 26) | string ExpandGameVariables(Game game, string inputString);
method ExpandGameVariables (line 27) | GameAction ExpandGameVariables(Game game, GameAction action);
method ExpandGameVariables (line 28) | string ExpandGameVariables(Game game, string inputString, string emula...
method StartGame (line 29) | void StartGame(Guid gameId);
method InstallGame (line 30) | void InstallGame(Guid gameId);
method UninstallGame (line 31) | void UninstallGame(Guid gameId);
method AddCustomElementSupport (line 32) | void AddCustomElementSupport(Plugin source, AddCustomElementSupportArg...
method AddSettingsSupport (line 33) | void AddSettingsSupport(Plugin source, AddSettingsSupportArgs args);
method AddConvertersSupport (line 34) | void AddConvertersSupport(Plugin source, AddConvertersSupportArgs args);
method GetConnectedControllers (line 35) | List<GamepadController> GetConnectedControllers();
class PlayniteApiRoot (line 38) | public class PlayniteApiRoot : IPlayniteAPIRoot
method PlayniteApiRoot (line 47) | public PlayniteApiRoot(
method ExpandGameVariables (line 60) | public string ExpandGameVariables(Game game, string inputString)
method ExpandGameVariables (line 65) | public string ExpandGameVariables(Game game, string inputString, strin...
method ExpandGameVariables (line 70) | public GameAction ExpandGameVariables(Game game, GameAction action)
method StartGame (line 75) | public void StartGame(Guid gameId)
method InstallGame (line 90) | public void InstallGame(Guid gameId)
method UninstallGame (line 103) | public void UninstallGame(Guid gameId)
method AddCustomElementSupport (line 116) | public void AddCustomElementSupport(Plugin source, AddCustomElementSup...
method AddSettingsSupport (line 121) | public void AddSettingsSupport(Plugin source, AddSettingsSupportArgs a...
method AddConvertersSupport (line 126) | public void AddConvertersSupport(Plugin source, AddConvertersSupportAr...
method GetConnectedControllers (line 131) | public List<GamepadController> GetConnectedControllers()
class PlayniteAPI (line 137) | public class PlayniteAPI : IPlayniteAPI
method PlayniteAPI (line 153) | public PlayniteAPI()
method ExpandGameVariables (line 157) | public string ExpandGameVariables(Game game, string inputString)
method ExpandGameVariables (line 162) | public string ExpandGameVariables(Game game, string inputString, strin...
method ExpandGameVariables (line 167) | public GameAction ExpandGameVariables(Game game, GameAction action)
method StartGame (line 172) | public void StartGame(Guid gameId)
method InstallGame (line 177) | public void InstallGame(Guid gameId)
method UninstallGame (line 182) | public void UninstallGame(Guid gameId)
method AddCustomElementSupport (line 187) | public void AddCustomElementSupport(Plugin source, AddCustomElementSup...
method AddSettingsSupport (line 192) | public void AddSettingsSupport(Plugin source, AddSettingsSupportArgs a...
method AddConvertersSupport (line 197) | public void AddConvertersSupport(Plugin source, AddConvertersSupportAr...
method GetConnectedControllers (line 202) | public List<GamepadController> GetConnectedControllers()
FILE: source/Playnite/API/PlayniteInfoAPI.cs
class PlayniteInfoAPI (line 10) | public class PlayniteInfoAPI : IPlayniteInfoAPI
FILE: source/Playnite/API/PlaynitePathsAPI.cs
class PlaynitePathsAPI (line 11) | public class PlaynitePathsAPI : IPlaynitePathsAPI
FILE: source/Playnite/API/PlayniteSettingsAPI.cs
class FullscreenSettingsAPI (line 13) | public class FullscreenSettingsAPI : IFullscreenSettingsAPI
method FullscreenSettingsAPI (line 27) | public FullscreenSettingsAPI(FullscreenSettings settings)
class CompletionStatusSettignsApi (line 33) | public class CompletionStatusSettignsApi : ICompletionStatusSettignsApi
method CompletionStatusSettignsApi (line 36) | public CompletionStatusSettignsApi(GameDatabase database)
class PlayniteSettingsAPI (line 45) | public class PlayniteSettingsAPI : IPlayniteSettingsAPI
method PlayniteSettingsAPI (line 80) | public PlayniteSettingsAPI(PlayniteSettings settings, GameDatabase db)
method GetGameExcludedFromImport (line 88) | public bool GetGameExcludedFromImport(string gameId, Guid libraryId)
FILE: source/Playnite/Addons/Addons.cs
type AddonUpdateStatus (line 14) | public enum AddonUpdateStatus
class AddonUpdate (line 26) | public class AddonUpdate : SelectableItem<AddonManifest>
method AddonUpdate (line 54) | public AddonUpdate(AddonManifest item) : base(item)
class Addons (line 59) | public static class Addons
method CheckAddonsForUpdate (line 63) | private static List<AddonUpdate> CheckAddonsForUpdate(IEnumerable<Base...
method CheckAddonUpdates (line 115) | public static List<AddonUpdate> CheckAddonUpdates(ServicesClient servi...
FILE: source/Playnite/App/CmdLineOptions.cs
class CmdLineOptions (line 10) | public class CmdLineOptions
method ToString (line 72) | public override string ToString()
FILE: source/Playnite/App/IPlayniteApplication.cs
type IPlayniteApplication (line 9) | public interface IPlayniteApplication
method Quit (line 11) | void Quit(bool saveSettings);
method Restart (line 12) | void Restart(bool saveSettings);
method QuitAndStart (line 13) | void QuitAndStart(string path, string arguments, bool asAdmin = false,...
FILE: source/Playnite/App/PlayniteApplication.cs
class PlayniteApplication (line 35) | public abstract class PlayniteApplication : ObservableObject, IPlayniteA...
method PlayniteApplication (line 87) | public PlayniteApplication()
method PlayniteApplication (line 91) | public PlayniteApplication(
method InstantiateApp (line 441) | public abstract void InstantiateApp();
method InitializeNative (line 443) | public abstract void InitializeNative();
method Restore (line 445) | public abstract void Restore();
method Minimize (line 447) | public abstract void Minimize();
method ShowWindowsNotification (line 449) | public abstract void ShowWindowsNotification(string title, string body...
method SwitchAppMode (line 451) | public abstract void SwitchAppMode(ApplicationMode mode);
method ConfigureViews (line 453) | public abstract void ConfigureViews();
method Application_SessionEnding (line 455) | private void Application_SessionEnding(object sender, SessionEndingCan...
method Application_Exit (line 465) | private void Application_Exit(object sender, ExitEventArgs e)
method CurrentDomain_UnhandledException (line 470) | private void CurrentDomain_UnhandledException(object sender, Unhandled...
method Application_Startup (line 573) | private void Application_Startup(object sender, StartupEventArgs e)
method WindowBaseCloseHandler (line 744) | private void WindowBaseCloseHandler(object sender, RoutedEventArgs e)
method WindowBaseLoadedHandler (line 749) | private void WindowBaseLoadedHandler(object sender, RoutedEventArgs e)
method PipeService_CommandExecuted (line 754) | private void PipeService_CommandExecuted(object sender, CommandExecute...
method Application_Activated (line 882) | private void Application_Activated(object sender, EventArgs e)
method Application_Deactivated (line 887) | private void Application_Deactivated(object sender, EventArgs e)
method Run (line 892) | public void Run()
method Startup (line 897) | public abstract bool Startup();
method CheckOtherInstances (line 899) | public bool CheckOtherInstances()
method ConfigureApplication (line 984) | public bool ConfigureApplication()
method ProcessArguments (line 1063) | public void ProcessArguments()
method ProcessUriRequest (line 1092) | internal void ProcessUriRequest(PlayniteUriEventArgs args)
method Quit (line 1154) | public void Quit(bool saveSettings = true)
method QuitAndStart (line 1166) | public void QuitAndStart(string path, string arguments, bool asAdmin =...
method QuitAndExecute (line 1190) | public void QuitAndExecute(Action action, bool saveSettings = true)
method Restart (line 1212) | public abstract void Restart(bool saveSettings = true);
method Restart (line 1214) | public abstract void Restart(CmdLineOptions options, bool saveSettings...
method ReleaseResources (line 1216) | public virtual void ReleaseResources(bool releaseCefSharp = true)
method CheckAddonBlacklist (line 1296) | private void CheckAddonBlacklist()
method CheckForUpdates (line 1316) | private void CheckForUpdates(bool checkProgram, bool checkAddons)
method UpdateCheckerCallback (line 1384) | private void UpdateCheckerCallback(object state)
method StartUpdateCheckerAsync (line 1390) | public async Task StartUpdateCheckerAsync()
method MigrateDatabase (line 1416) | public bool MigrateDatabase()
method UpdateScreenInformation (line 1442) | public void UpdateScreenInformation(Controls.WindowBase window)
method ShowAddonPerfNotice (line 1457) | public void ShowAddonPerfNotice()
method InstallOnlineAddon (line 1469) | public void InstallOnlineAddon(string addonId)
method InstallThemeFile (line 1554) | public void InstallThemeFile(string themeFile)
method InstallExtensionFile (line 1603) | public void InstallExtensionFile(string extensionFile)
method OnExtensionsLoaded (line 1647) | public void OnExtensionsLoaded()
method WaitForOtherInstacesToExit (line 1653) | private void WaitForOtherInstacesToExit(bool throwOnTimetout)
method IsProcessPlayniteProcess (line 1680) | public static bool IsProcessPlayniteProcess(Process process)
method GetApiInstance (line 1685) | public abstract PlayniteAPI GetApiInstance(ExtensionManifest pluginOwn...
method GetApiInstance (line 1686) | public abstract PlayniteAPI GetApiInstance();
FILE: source/Playnite/App/UpdateManifest.cs
class UpdateManifest (line 9) | public class UpdateManifest : ObservableObject
class ReleaseNoteData (line 30) | public class ReleaseNoteData
FILE: source/Playnite/App/Updater.cs
class Updater (line 20) | public class Updater
method Updater (line 80) | public Updater(IPlayniteApplication app) : this(app, new Downloader())
method Updater (line 84) | public Updater(IPlayniteApplication app, IDownloader webDownloader)
method GetUpdateDataRootUrl (line 90) | private string GetUpdateDataRootUrl(string configKey)
method GetReleaseNotes (line 95) | public List<ReleaseNoteData> GetReleaseNotes()
method VerifyUpdateFile (line 125) | private bool VerifyUpdateFile(string checksum, string path)
method DownloadUpdate (line 137) | public async Task DownloadUpdate(Action<DownloadProgressChangedEventAr...
method InstallUpdate (line 169) | public void InstallUpdate(ApplicationMode mode)
method DownloadManifest (line 180) | public UpdateManifest DownloadManifest()
method GetLatestVersion (line 214) | public Version GetLatestVersion()
method GetUpdateManifestData (line 224) | private string GetUpdateManifestData(string url)
FILE: source/Playnite/Archive.cs
class Archive (line 14) | public static class Archive
method GetArchiveFiles (line 16) | public static List<string> GetArchiveFiles(string archivePath)
method GetEntryStream (line 24) | public static Tuple<Stream, IDisposable> GetEntryStream(string archive...
method CreateEntryFromDirectory (line 37) | public static void CreateEntryFromDirectory(this ZipArchive archive, s...
FILE: source/Playnite/Audio.cs
class AudioEngine (line 13) | public class AudioEngine : IDisposable
method AudioEngine (line 24) | public AudioEngine()
method OpenAudio (line 29) | private void OpenAudio()
method GetVolume (line 44) | public static int GetVolume(float floatVolume)
method PlaySound (line 52) | public void PlaySound(IntPtr sound)
method SetSoundVolume (line 74) | public void SetSoundVolume(IntPtr sounds, float volume)
method LoadSound (line 82) | public IntPtr LoadSound(string path)
method SetMusicVolume (line 90) | public void SetMusicVolume(float volume)
method LoadMusic (line 98) | public IntPtr LoadMusic(string path)
method PlayMusic (line 106) | public void PlayMusic(IntPtr music)
method PauseMusic (line 128) | public void PauseMusic()
method StopMusic (line 137) | public void StopMusic()
method ResumeMusic (line 146) | public void ResumeMusic()
method GetIsMusicPlaying (line 158) | public bool GetIsMusicPlaying()
method GetIsMusicPaused (line 166) | public bool GetIsMusicPaused()
method CloseAudio (line 174) | public void CloseAudio()
method DisposeSound (line 183) | public void DisposeSound(IntPtr sound)
method DisposeMusic (line 188) | public void DisposeMusic(IntPtr music)
method Dispose (line 193) | public void Dispose()
FILE: source/Playnite/Backup.cs
type BackupDataItem (line 17) | public enum BackupDataItem
class BackupOptions (line 33) | public class BackupOptions
class BackupRestoreOptions (line 45) | public class BackupRestoreOptions
class Backup (line 56) | public class Backup
method BackupData (line 68) | public static void BackupData(string optionsFile, CancellationToken ca...
method BackupData (line 73) | public static void BackupData(BackupOptions options, CancellationToken...
method RestoreBackup (line 207) | public static void RestoreBackup(string optionsFile)
method RestoreBackup (line 212) | public static void RestoreBackup(BackupRestoreOptions options)
method GetRestoreSelections (line 350) | public static List<BackupDataItem> GetRestoreSelections(string backupF...
method GetAutoBackupOptions (line 381) | public static BackupOptions GetAutoBackupOptions(PlayniteSettings sett...
method GetAutoBackupFileName (line 420) | private static string GetAutoBackupFileName()
FILE: source/Playnite/Behaviors/AnimatedVisibility.cs
class AnimationControl (line 12) | public class AnimationControl
method GetAnimationOnVisible (line 20) | public static Storyboard GetAnimationOnVisible(DependencyObject obj)
method SetAnimationOnVisible (line 25) | public static void SetAnimationOnVisible(DependencyObject obj, Storybo...
method HandleAnimationOnVisibleChanged (line 30) | private static void HandleAnimationOnVisibleChanged(DependencyObject o...
class AnimatedVisibility (line 59) | public class AnimatedVisibility
method GetVisibility (line 70) | public static Visibility GetVisibility(DependencyObject obj)
method SetVisibility (line 75) | public static void SetVisibility(DependencyObject obj, Visibility value)
method HandleVisibilityChanged (line 80) | private static void HandleVisibilityChanged(DependencyObject obj, Depe...
method GetVisible (line 119) | public static Storyboard GetVisible(DependencyObject obj)
method SetVisible (line 124) | public static void SetVisible(DependencyObject obj, Storyboard value)
method GetCollapsed (line 140) | public static Storyboard GetCollapsed(DependencyObject obj)
method SetCollapsed (line 145) | public static void SetCollapsed(DependencyObject obj, Storyboard value)
method HandleCollapsedChanged (line 150) | private static void HandleCollapsedChanged(DependencyObject obj, Depen...
FILE: source/Playnite/Behaviors/ExpanderBehaviors.cs
class ExpanderBehaviors (line 16) | public class ExpanderBehaviors
method GetSaveState (line 21) | public static bool GetSaveState(DependencyObject obj)
method SetSaveState (line 26) | public static void SetSaveState(DependencyObject obj, bool value)
method GetSaveStateId (line 34) | public static string GetSaveStateId(DependencyObject obj)
method SetSaveStateId (line 39) | public static void SetSaveStateId(DependencyObject obj, string value)
FILE: source/Playnite/Behaviors/FocusBahaviors.cs
class FocusBahaviors (line 17) | public class FocusBahaviors
method GetFocusBinding (line 26) | public static bool GetFocusBinding(DependencyObject obj)
method SetFocusBinding (line 31) | public static void SetFocusBinding(DependencyObject obj, bool value)
method FocusBindingPropertyChanged (line 36) | private static void FocusBindingPropertyChanged(DependencyObject obj, ...
method Control_Loaded (line 71) | private static void Control_Loaded(object sender, RoutedEventArgs e)
method GetOnVisibilityFocus (line 92) | public static bool GetOnVisibilityFocus(DependencyObject obj)
method SetOnVisibilityFocus (line 97) | public static void SetOnVisibilityFocus(DependencyObject obj, bool value)
method OnVisibilityFocusPropertyChanged (line 102) | private static void OnVisibilityFocusPropertyChanged(DependencyObject ...
method Control_IsVisibleChanged (line 120) | private static void Control_IsVisibleChanged(object sender, Dependency...
FILE: source/Playnite/Behaviors/LeftClickContextMenuBehavior.cs
class LeftClickContextMenuBehavior (line 15) | public class LeftClickContextMenuBehavior
method GetEnabled (line 20) | public static bool GetEnabled(DependencyObject obj)
method SetEnabled (line 25) | public static void SetEnabled(DependencyObject obj, bool value)
method HandlePropertyChanged (line 30) | private static void HandlePropertyChanged(DependencyObject obj, Depend...
method Control_PreviewMouseLeftButtonUp (line 48) | private static void Control_PreviewMouseLeftButtonUp(object sender, Mo...
FILE: source/Playnite/Behaviors/MediaElementBehaviors.cs
class MediaElementBehaviors (line 12) | public class MediaElementBehaviors
method GetRepeat (line 21) | public static bool GetRepeat(DependencyObject obj)
method SetRepeat (line 26) | public static void SetRepeat(DependencyObject obj, bool value)
method RepeatPropertyChanged (line 31) | private static void RepeatPropertyChanged(DependencyObject obj, Depend...
method Control_MediaEnded (line 50) | private static void Control_MediaEnded(object sender, RoutedEventArgs e)
FILE: source/Playnite/Behaviors/ScrollToSelectedBehavior.cs
class ScrollToSelectedBehavior (line 16) | public class ScrollToSelectedBehavior
method GetEnabled (line 21) | public static bool GetEnabled(DependencyObject obj)
method SetEnabled (line 26) | public static void SetEnabled(DependencyObject obj, bool value)
method HandlePropertyChanged (line 31) | private static void HandlePropertyChanged(
method Control_SelectionChanged (line 50) | private static void Control_SelectionChanged(object sender, SelectionC...
FILE: source/Playnite/Behaviors/ScrollViewerBehaviours.cs
class ScrollAnimationData (line 14) | public class ScrollAnimationData
method ScrollAnimationData (line 24) | public ScrollAnimationData(ScrollViewer scroller, FrameworkElement owner)
method Storyboard_Completed (line 32) | private void Storyboard_Completed(object sender, EventArgs e)
method BeginAnimation (line 38) | public void BeginAnimation(double to, TimeSpan speed)
class ScrollViewerBehaviours (line 49) | public class ScrollViewerBehaviours
method SetScrollData (line 59) | public static void SetScrollData(FrameworkElement target, ScrollAnimat...
method GetScrollData (line 64) | public static ScrollAnimationData GetScrollData(FrameworkElement target)
method SetVerticalOffset (line 78) | public static void SetVerticalOffset(FrameworkElement target, double v...
method GetVerticalOffset (line 83) | public static double GetVerticalOffset(FrameworkElement target)
method OnVerticalOffsetChanged (line 88) | private static void OnVerticalOffsetChanged(DependencyObject target, D...
method SetSensitivity (line 103) | public static void SetSensitivity(DependencyObject obj, double value)
method GetSensitivity (line 108) | public static double GetSensitivity(DependencyObject obj)
method SetSpeed (line 120) | public static void SetSpeed(FrameworkElement target, TimeSpan value)
method GetSpeed (line 125) | public static TimeSpan GetSpeed(FrameworkElement target)
method SetSmoothScrollEnabled (line 137) | public static void SetSmoothScrollEnabled(FrameworkElement target, boo...
method GetSmoothScrollEnabled (line 142) | public static bool GetSmoothScrollEnabled(FrameworkElement target)
method SetCustomScrollEnabled (line 154) | public static void SetCustomScrollEnabled(FrameworkElement target, boo...
method GetCustomScrollEnabled (line 159) | public static bool GetCustomScrollEnabled(FrameworkElement target)
method OnCustomScrollEnabledChanged (line 164) | private static void OnCustomScrollEnabledChanged(DependencyObject obj,...
method SetScrollerEvents (line 204) | private static void SetScrollerEvents(FrameworkElement owner, ScrollVi...
method PreviewMouseWheel (line 218) | private static void PreviewMouseWheel(object sender, System.Windows.In...
FILE: source/Playnite/Behaviors/SelectorBehaviors.cs
class SelectorBehaviors (line 12) | public class SelectorBehaviors
class EnumSelector (line 14) | public class EnumSelector
method GetEnumSource (line 27) | public static Type GetEnumSource(DependencyObject obj)
method SetEnumSource (line 32) | public static void SetEnumSource(DependencyObject obj, Type value)
method EnumSourcePropertyChanged (line 37) | private static void EnumSourcePropertyChanged(DependencyObject obj, De...
FILE: source/Playnite/BindingProxy.cs
class BindingProxy (line 10) | public class BindingProxy : Freezable
method CreateInstanceCore (line 12) | protected override Freezable CreateInstanceCore()
FILE: source/Playnite/CefTools.cs
class CefTools (line 15) | public class CefTools
method ConfigureCef (line 20) | public static void ConfigureCef(bool traceLogsEnabled)
method Shutdown (line 53) | public static void Shutdown()
FILE: source/Playnite/CmdlineCommands.cs
type CmdlineCommand (line 9) | public enum CmdlineCommand : int
FILE: source/Playnite/Commands/GenericCommands.cs
class GenericCommands (line 10) | public static class GenericCommands
FILE: source/Playnite/Commands/GlobalCommands.cs
class GlobalCommands (line 16) | public static class GlobalCommands
method NavigateUrl (line 60) | public static void NavigateUrl(object url)
method NavigateUrl (line 80) | public static void NavigateUrl(string url)
FILE: source/Playnite/Common/BindingTools.cs
class BindingTools (line 11) | public class BindingTools
method SetBinding (line 13) | public static BindingExpressionBase SetBinding(DependencyObject target...
method SetBinding (line 18) | public static BindingExpressionBase SetBinding(
method SetBinding (line 95) | public static BindingExpressionBase SetBinding(
method ClearBinding (line 123) | public static void ClearBinding(DependencyObject target, DependencyPro...
FILE: source/Playnite/Common/Computer.cs
class SystemInfo (line 17) | public class SystemInfo
class ComputerScreen (line 38) | public class ComputerScreen
method ComputerScreen (line 46) | public ComputerScreen()
method ComputerScreen (line 50) | public ComputerScreen(Screen screen)
type WindowsVersion (line 60) | public enum WindowsVersion
type HwCompany (line 69) | public enum HwCompany
class Computer (line 78) | public static class Computer
method IsTLS13SystemWideEnabled (line 118) | public static bool IsTLS13SystemWideEnabled()
method GetWindowsReleaseId (line 142) | public static int GetWindowsReleaseId()
method GetWindowsProductName (line 155) | public static string GetWindowsProductName()
method GetMachineGuid (line 160) | public static Guid GetMachineGuid()
method GetSystemInfo (line 185) | public static SystemInfo GetSystemInfo()
method GetScreens (line 229) | public static List<ComputerScreen> GetScreens()
method GetPrimaryScreen (line 234) | public static ComputerScreen GetPrimaryScreen()
method GetGetPrimaryScreenIndex (line 239) | public static int GetGetPrimaryScreenIndex()
method SetMouseCursorVisibility (line 253) | public static void SetMouseCursorVisibility(bool show)
method Shutdown (line 269) | public static void Shutdown()
method Restart (line 287) | public static void Restart()
method Sleep (line 292) | public static bool Sleep()
method Hibernate (line 297) | public static bool Hibernate()
method Lock (line 302) | public static bool Lock()
method Logout (line 307) | public static bool Logout()
method ToComputerScreen (line 312) | public static ComputerScreen ToComputerScreen(this Screen screen)
method GetGpuVendors (line 324) | public static List<HwCompany> GetGpuVendors()
method GetMonitorFriendlyName (line 375) | private static string GetMonitorFriendlyName(LUID adapterId, uint targ...
method GetAllMonitorsFriendlyNames (line 396) | private static IEnumerable<string> GetAllMonitorsFriendlyNames()
method DeviceFriendlyName (line 430) | public static string DeviceFriendlyName(this Screen screen)
method GetScreenReaderActive (line 451) | public static bool GetScreenReaderActive()
FILE: source/Playnite/Common/Constants.cs
class Constants (line 10) | public static class Constants
FILE: source/Playnite/Common/CueSheet.cs
class CueSheet (line 12) | public class CueSheet
type CueFileEntry (line 14) | public struct CueFileEntry
method CueFileEntry (line 19) | public CueFileEntry(string path, string type)
method GetFileEntries (line 26) | public static List<CueFileEntry> GetFileEntries(string cuePath)
FILE: source/Playnite/Common/DesignerTools.cs
class DesignerTools (line 10) | public class DesignerTools
FILE: source/Playnite/Common/Exceptions.cs
class NoDiskSpaceException (line 9) | public class NoDiskSpaceException : Exception
method NoDiskSpaceException (line 13) | public NoDiskSpaceException(long requiredSpace) : base()
method NoDiskSpaceException (line 18) | public NoDiskSpaceException(string message) : base(message)
method NoDiskSpaceException (line
Copy disabled (too large)
Download .json
Condensed preview — 1302 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (12,845K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 80,
"preview": "# These are supported funding model platforms\n\npatreon: playnite\nko_fi: playnite"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 1719,
"preview": "name: Bug report\ndescription: Create a report to help us improve\nlabels: ['bug']\nbody:\n - type: markdown\n attributes"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 335,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Playnite Discord server\n url: https://playnite.link/discord\n "
},
{
"path": ".github/ISSUE_TEMPLATE/custom.md",
"chars": 92,
"preview": "## Use [issue templates](https://github.com/JosefNemec/Playnite/issues/new/choose) instead!\n"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.yml",
"chars": 961,
"preview": "name: Feature request\ndescription: Suggest an idea for this project\nlabels: ['enhancement']\nbody:\n - type: markdown\n "
},
{
"path": ".github/pull_request_template.md",
"chars": 316,
"preview": "Pull requests are generally on pause because majority of code base is being rewritten for Playnite 11.\n\nSmaller \"safe\" c"
},
{
"path": ".gitignore",
"chars": 5045,
"preview": "## Ignore Visual Studio temporary files, build results, and\r\n## files generated by popular Visual Studio add-ons.\r\n\r\n[Or"
},
{
"path": "LICENSE.md",
"chars": 1089,
"preview": "MIT License\r\n\r\nCopyright (c) 2020 Josef Nemec\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a"
},
{
"path": "README.md",
"chars": 5275,
"preview": "\n# <img src=\"https://playnite.link/applogo.png\" width=\"32\"> Playnite []\r\n [string]$Configur"
},
{
"path": "build/build.xml",
"chars": 1612,
"preview": "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n <Target Name=\"BeforeBuild\""
},
{
"path": "build/buildLocConstants.ps1",
"chars": 1055,
"preview": "#Requires -Version 7\r\n\r\n$ErrorActionPreference = \"Stop\"\r\n& .\\common.ps1\r\n\r\n$locFile = Join-Path $pwd \"..\\source\\Playnite"
},
{
"path": "build/buildSdkNuget.ps1",
"chars": 1596,
"preview": "#Requires -Version 7\r\n\r\nparam(\r\n [ValidateSet(\"Release\", \"Debug\")]\r\n [string]$Configuration = \"Release\",\r\n [st"
},
{
"path": "build/common.ps1",
"chars": 4560,
"preview": "#Requires -Version 7\r\n\r\n$global:NugetUrl = \"https://dist.nuget.org/win-x86-commandline/latest/nuget.exe\"\r\n\r\nfunction gl"
},
{
"path": "build/generateRetroArchProfile.ps1",
"chars": 16442,
"preview": "param(\n [Parameter(Mandatory=$true)]\n [string]$RetroArchDir,\n [Parameter(Mandatory=$true)]\n [string]$Playnit"
},
{
"path": "build/updateLocalizations.ps1",
"chars": 1428,
"preview": "#Requires -Version 7\r\n\r\nparam(\r\n [string]$AccessToken\r\n)\r\n\r\n$ErrorActionPreference = \"Stop\"\r\n\r\n$locDir = Join-Path $p"
},
{
"path": "crowdin.yml",
"chars": 98,
"preview": "files:\n - source: LocSource.xaml\n translation: /%original_path%/%locale_with_underscore%.xaml\n"
},
{
"path": "source/.editorconfig",
"chars": 262,
"preview": "[*.cs]\r\n\r\n# IDE0058: Expression value is never used\r\ndotnet_diagnostic.IDE0058.severity = none\r\n\r\n# IDE0036: Order modi"
},
{
"path": "source/Playnite/API/AddonsAPI.cs",
"chars": 870,
"preview": "using Playnite.Plugins;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Plugins;\r\nusing System;\r\nusing System.Collections.Gene"
},
{
"path": "source/Playnite/API/DatabaseAPI.cs",
"chars": 4370,
"preview": "using LiteDB;\r\nusing Playnite.Database;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing Playnite.SDK.Plugins;\r\n"
},
{
"path": "source/Playnite/API/DesignData/DesignNotificationsAPI.cs",
"chars": 1718,
"preview": "using Playnite.Commands;\r\nusing Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collectio"
},
{
"path": "source/Playnite/API/DesignData/DesignPlayniteAPI.cs",
"chars": 3043,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing Playnite.SDK.Plugins;\r\nusing System;\r\nusing System.Collections.G"
},
{
"path": "source/Playnite/API/NotificationsAPI.cs",
"chars": 3275,
"preview": "using Playnite.Commands;\r\nusing Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collectio"
},
{
"path": "source/Playnite/API/PlayniteAPI.cs",
"chars": 7023,
"preview": "using Newtonsoft.Json;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing Playnite.SDK.Plugins;\r\nusing Playnite.Se"
},
{
"path": "source/Playnite/API/PlayniteInfoAPI.cs",
"chars": 694,
"preview": "using Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Sy"
},
{
"path": "source/Playnite/API/PlaynitePathsAPI.cs",
"chars": 594,
"preview": "using Playnite.SDK;\r\nusing Playnite.Settings;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nus"
},
{
"path": "source/Playnite/API/PlayniteSettingsAPI.cs",
"chars": 4307,
"preview": "using Playnite.Database;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Gene"
},
{
"path": "source/Playnite/Addons/Addons.cs",
"chars": 5373,
"preview": "using Playnite.Plugins;\r\nusing Playnite.SDK;\r\nusing Playnite.Services;\r\nusing System;\r\nusing System.Collections.Generic"
},
{
"path": "source/Playnite/App/CmdLineOptions.cs",
"chars": 2058,
"preview": "using CommandLine;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Sys"
},
{
"path": "source/Playnite/App/IPlayniteApplication.cs",
"chars": 395,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/App/PlayniteApplication.cs",
"chars": 72388,
"preview": "using Playnite.Controllers;\r\nusing Playnite.Input;\r\nusing Playnite.SDK;\r\nusing Playnite.Plugins;\r\nusing Playnite.ViewMo"
},
{
"path": "source/Playnite/App/UpdateManifest.cs",
"chars": 1607,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/App/Updater.cs",
"chars": 7391,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Configuration;\r\nusing System.Diagnostics;\r\nusing System."
},
{
"path": "source/Playnite/App.config",
"chars": 1296,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n <configSections>\r\n <section name=\"entityFramework\" type=\""
},
{
"path": "source/Playnite/Archive.cs",
"chars": 2181,
"preview": "using Playnite.Common;\r\nusing SharpCompress.Archives;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.I"
},
{
"path": "source/Playnite/Audio.cs",
"chars": 5119,
"preview": "using Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing Syst"
},
{
"path": "source/Playnite/Backup.cs",
"chars": 19010,
"preview": "using Playnite.Common;\r\nusing Playnite.Database;\r\nusing Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;"
},
{
"path": "source/Playnite/Behaviors/AnimatedVisibility.cs",
"chars": 5805,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r"
},
{
"path": "source/Playnite/Behaviors/ExpanderBehaviors.cs",
"chars": 1367,
"preview": "using Playnite;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Drawing;\r"
},
{
"path": "source/Playnite/Behaviors/FocusBahaviors.cs",
"chars": 4751,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Drawing;\r\nusing System.Lin"
},
{
"path": "source/Playnite/Behaviors/LeftClickContextMenuBehavior.cs",
"chars": 1946,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Drawing;\r\nusing System.Lin"
},
{
"path": "source/Playnite/Behaviors/MediaElementBehaviors.cs",
"chars": 1701,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r"
},
{
"path": "source/Playnite/Behaviors/ScrollToSelectedBehavior.cs",
"chars": 2365,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Drawing;\r\nusing System.Lin"
},
{
"path": "source/Playnite/Behaviors/ScrollViewerBehaviours.cs",
"chars": 9561,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r"
},
{
"path": "source/Playnite/Behaviors/SelectorBehaviors.cs",
"chars": 1908,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r"
},
{
"path": "source/Playnite/BindingProxy.cs",
"chars": 701,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/CefTools.cs",
"chars": 2229,
"preview": "using CefSharp;\r\nusing CefSharp.Wpf;\r\nusing Playnite.Common;\r\nusing Playnite.SDK;\r\nusing Playnite.Settings;\r\nusing Syst"
},
{
"path": "source/Playnite/CmdlineCommands.cs",
"chars": 398,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Commands/GenericCommands.cs",
"chars": 850,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Commands/GlobalCommands.cs",
"chars": 3326,
"preview": "using Flurl;\r\nusing Playnite.Common;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Coll"
},
{
"path": "source/Playnite/Common/BindingTools.cs",
"chars": 3692,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Common/Computer.cs",
"chars": 15729,
"preview": "using Microsoft.Win32;\r\nusing Playnite.SDK;\r\nusing Playnite.Native;\r\nusing System;\r\nusing System.Collections.Generic;\r\n"
},
{
"path": "source/Playnite/Common/Constants.cs",
"chars": 930,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Linq;\r\nusing System.Text;\r\n"
},
{
"path": "source/Playnite/Common/CueSheet.cs",
"chars": 1206,
"preview": "using Playnite.Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing S"
},
{
"path": "source/Playnite/Common/DesignerTools.cs",
"chars": 637,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r"
},
{
"path": "source/Playnite/Common/Exceptions.cs",
"chars": 650,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Common/Explorer.cs",
"chars": 2032,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Linq;\r\nusin"
},
{
"path": "source/Playnite/Common/Extensions/BitmapExtensions.cs",
"chars": 15896,
"preview": "using PhotoSauce.MagicScaler;\r\nusing Playnite;\r\nusing Playnite.Common;\r\nusing Playnite.SDK;\r\nusing System;\r\nusing Syste"
},
{
"path": "source/Playnite/Common/Extensions/BitmapIconExtensions.cs",
"chars": 6689,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Drawing.Drawing2D;\r\nusing System.IO;\r\nusing System.Linq;"
},
{
"path": "source/Playnite/Common/Extensions/CloneObject.cs",
"chars": 7136,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Text;\r\nusing Syst"
},
{
"path": "source/Playnite/Common/Extensions/Dictionary.cs",
"chars": 863,
"preview": "using Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;"
},
{
"path": "source/Playnite/Common/Extensions/Enums.cs",
"chars": 1479,
"preview": "using Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;"
},
{
"path": "source/Playnite/Common/Extensions/IconExtension.cs",
"chars": 1524,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Diagnostics;\r\nusing System"
},
{
"path": "source/Playnite/Common/Extensions/ItemsControlExtensions.cs",
"chars": 1117,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Common/Extensions/KeyExtensions.cs",
"chars": 1067,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Common/Extensions/LongExtensions.cs",
"chars": 546,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Common/Extensions/NetExtensions.cs",
"chars": 397,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Common/Extensions/ObjectExtensions.cs",
"chars": 2615,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusi"
},
{
"path": "source/Playnite/Common/Extensions/ProcessExtensions.cs",
"chars": 2839,
"preview": "using Playnite.Native;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;"
},
{
"path": "source/Playnite/Common/Extensions/StringExtensions.cs",
"chars": 19607,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing System."
},
{
"path": "source/Playnite/Common/Extensions/WindowExtensions.cs",
"chars": 519,
"preview": "using Playnite.Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Drawing;\r\nusing System.Linq;\r\nus"
},
{
"path": "source/Playnite/Common/FileSystem.cs",
"chars": 18608,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System"
},
{
"path": "source/Playnite/Common/FileSystem_Checksum.cs",
"chars": 2044,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System"
},
{
"path": "source/Playnite/Common/GdiFile.cs",
"chars": 1544,
"preview": "using Playnite.Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing S"
},
{
"path": "source/Playnite/Common/GlobalRandom.cs",
"chars": 850,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Common/Images.cs",
"chars": 5123,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Common/IniParser.cs",
"chars": 3217,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Text.RegularExpr"
},
{
"path": "source/Playnite/Common/ItemsSource.cs",
"chars": 865,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Common/M3U.cs",
"chars": 1480,
"preview": "using Playnite.Common;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing S"
},
{
"path": "source/Playnite/Common/MarkupConverter.cs",
"chars": 365,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Common/Media/Icons/IconExtractor.cs",
"chars": 12447,
"preview": "/*\r\n * IconExtractor/IconUtil for .NET\r\n * Copyright (C) 2014 Tsuda Kageyu. All rights reserved.\r\n *\r\n * Redistribut"
},
{
"path": "source/Playnite/Common/Media/Icons/IconUtil.cs",
"chars": 7509,
"preview": "/*\n * IconExtractor/IconUtil for .NET\n * Copyright (C) 2014 Tsuda Kageyu. All rights reserved.\n *\n * Redistribution "
},
{
"path": "source/Playnite/Common/MemoryCache.cs",
"chars": 4362,
"preview": "using Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Concurrent;\r\nusing System.Collections.Generic;\r\nusing Syst"
},
{
"path": "source/Playnite/Common/NLogLogProvider.cs",
"chars": 3633,
"preview": "using NLog.Config;\r\nusing NLog.Targets;\r\nusing Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing S"
},
{
"path": "source/Playnite/Common/Network.cs",
"chars": 1005,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net.NetworkInformation;\r\nusing Syste"
},
{
"path": "source/Playnite/Common/Paths.cs",
"chars": 8752,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.IO;\r\nusing System.Linq;\r\nu"
},
{
"path": "source/Playnite/Common/ProcessMonitor.cs",
"chars": 5272,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\nus"
},
{
"path": "source/Playnite/Common/ProcessStarter.cs",
"chars": 7088,
"preview": "using Playnite.SDK;\r\nusing Playnite.Native;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentMo"
},
{
"path": "source/Playnite/Common/Programs.cs",
"chars": 5749,
"preview": "using Microsoft.Win32;\r\nusing Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics"
},
{
"path": "source/Playnite/Common/Programs2.cs",
"chars": 15894,
"preview": "using Microsoft.Win32;\r\nusing Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics"
},
{
"path": "source/Playnite/Common/Resources.cs",
"chars": 2907,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing"
},
{
"path": "source/Playnite/Common/Roman.cs",
"chars": 2543,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Common/SafeFileEnumerator.cs",
"chars": 7582,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Syste"
},
{
"path": "source/Playnite/Common/Serialization.cs",
"chars": 17899,
"preview": "using Nett;\r\nusing Newtonsoft.Json;\r\nusing Newtonsoft.Json.Serialization;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Data"
},
{
"path": "source/Playnite/Common/SigningTools.cs",
"chars": 1914,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Runtime.InteropServices;\r\nusing Syst"
},
{
"path": "source/Playnite/Common/Sizes.cs",
"chars": 3709,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Drawing;\r\nusing System.Glo"
},
{
"path": "source/Playnite/Common/Sqlite.cs",
"chars": 707,
"preview": "using Playnite.SDK.Data;\r\nusing SqlNado;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing S"
},
{
"path": "source/Playnite/Common/SystemDialogs.cs",
"chars": 4725,
"preview": "using Microsoft.Win32;\r\nusing Microsoft.WindowsAPICodePack.Dialogs;\r\nusing Playnite.SDK;\r\nusing System;\r\nusing System.C"
},
{
"path": "source/Playnite/Common/TGASharpLib.cs",
"chars": 219130,
"preview": "/* MIT License\n Copyright (c) 2017 TGASharpLib\n\nPermission is hereby granted, f"
},
{
"path": "source/Playnite/Common/TempDirectory.cs",
"chars": 1345,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Linq;\r\nusin"
},
{
"path": "source/Playnite/Common/Timer.cs",
"chars": 1601,
"preview": "using Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nu"
},
{
"path": "source/Playnite/Common/Units.cs",
"chars": 452,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Common/Web/Downloader.cs",
"chars": 10243,
"preview": "using Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing Syst"
},
{
"path": "source/Playnite/Common/Web/HttpDownloader.cs",
"chars": 3493,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Text;\r\nusing Syst"
},
{
"path": "source/Playnite/Common/Xaml.cs",
"chars": 810,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Syste"
},
{
"path": "source/Playnite/Common/Xml.cs",
"chars": 2192,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Syste"
},
{
"path": "source/Playnite/Common.config",
"chars": 586,
"preview": "<appSettings>\r\n <add key=\"UpdateUrl\" value=\"http://localhost/update/\" />\r\n <add key=\"UpdateUrl2\" value=\"http://localh"
},
{
"path": "source/Playnite/ControlTemplateTools.cs",
"chars": 2817,
"preview": "using Playnite.Common;\r\nusing Playnite.Plugins;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Controls;\r\nusing System;\r\nusin"
},
{
"path": "source/Playnite/Controllers/GameControllerFactory.cs",
"chars": 6967,
"preview": "using Playnite.Database;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Li"
},
{
"path": "source/Playnite/Controllers/GenericGameController.cs",
"chars": 36248,
"preview": "using Playnite.Common;\r\nusing Playnite.Database;\r\nusing Playnite.Emulators;\r\nusing Playnite.Scripting.PowerShell;\r\nusin"
},
{
"path": "source/Playnite/Controls/ExtendedDataGrid.cs",
"chars": 1599,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Controls/ExtendedListBox.cs",
"chars": 2358,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Controls/ExtendedListView.cs",
"chars": 1611,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Controls/FadeImage.xaml",
"chars": 3261,
"preview": "<UserControl x:Class=\"Playnite.Controls.FadeImage\"\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pr"
},
{
"path": "source/Playnite/Controls/FadeImage.xaml.cs",
"chars": 12891,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Drawing.Imaging;\r\nusing System.IO;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Controls/GridEx.cs",
"chars": 8487,
"preview": "using Playnite.Extensions.Markup;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusin"
},
{
"path": "source/Playnite/Controls/HotKeyBox.cs",
"chars": 2666,
"preview": "using Playnite.Common;\r\nusing Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusin"
},
{
"path": "source/Playnite/Controls/HtmlTextView.cs",
"chars": 13113,
"preview": "using Playnite.Extensions.Markup;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusin"
},
{
"path": "source/Playnite/Controls/WindowBase.cs",
"chars": 16496,
"preview": "using Playnite.Common;\r\nusing Playnite.Native;\r\nusing Playnite.Windows;\r\nusing System;\r\nusing System.Collections.Generi"
},
{
"path": "source/Playnite/Converters/BidirectionalEnumAndNumberConverter.cs",
"chars": 1374,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/BoolToAutoWidthConverter.cs",
"chars": 925,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/BoolToYesNoConverter.cs",
"chars": 1217,
"preview": "using Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Sy"
},
{
"path": "source/Playnite/Converters/BooleanToHiddenConverter.cs",
"chars": 1052,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/BooleanToVisibilityConverter.cs",
"chars": 2069,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Linq;\r\nusing System.Text;\r\n"
},
{
"path": "source/Playnite/Converters/CoversZoomToPercentageConverter.cs",
"chars": 1191,
"preview": "using Playnite.Settings;\r\nusing System;\r\nusing System.Globalization;\r\nusing System.Windows.Data;\r\nusing System.Windows."
},
{
"path": "source/Playnite/Converters/DateTimeToLastPlayedConverter.cs",
"chars": 1380,
"preview": "using Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Sy"
},
{
"path": "source/Playnite/Converters/DockToStringConverter.cs",
"chars": 1631,
"preview": "using Playnite;\r\nusing Playnite.SDK;\r\nusing Playnite.Settings;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing"
},
{
"path": "source/Playnite/Converters/EnumToBooleanConverter.cs",
"chars": 849,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/EnumToVisibilityConverter.cs",
"chars": 895,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/GenericTypeConverter.cs",
"chars": 2903,
"preview": "using Playnite.SDK;\r\nusing Playnite.Settings;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Component"
},
{
"path": "source/Playnite/Converters/ICollectionNullOrEmptyToVisibilityConverter.cs",
"chars": 1038,
"preview": "using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nus"
},
{
"path": "source/Playnite/Converters/IconToImageSourceConverter.cs",
"chars": 1754,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Drawing;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing "
},
{
"path": "source/Playnite/Converters/ImageStringToImageConverter.cs",
"chars": 1475,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/IntToVisibilityConverter.cs",
"chars": 2130,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/InvertableBooleanToVisibilityConverter.cs",
"chars": 1977,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Linq;\r\nusing System.Text;\r\n"
},
{
"path": "source/Playnite/Converters/InvertedBoolenConverter.cs",
"chars": 957,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Linq;\r\nusing System.Text;\r\n"
},
{
"path": "source/Playnite/Converters/ListToStringConverter.cs",
"chars": 6865,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collect"
},
{
"path": "source/Playnite/Converters/NegateConverter.cs",
"chars": 939,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/NotificationIconConverter.cs",
"chars": 1167,
"preview": "using Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Sy"
},
{
"path": "source/Playnite/Converters/NullToBoolConverter.cs",
"chars": 1063,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/NullToDependencyPropertyUnsetConverter.cs",
"chars": 879,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/NullToVisibilityConverter.cs",
"chars": 1784,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/NullableDateToStringConverter.cs",
"chars": 6143,
"preview": "using Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System"
},
{
"path": "source/Playnite/Converters/NullableUlongBytesSizeToStringConverter.cs",
"chars": 2348,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "source/Playnite/Converters/NumericConverters.cs",
"chars": 6650,
"preview": "using Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nu"
},
{
"path": "source/Playnite/Converters/ObjectEqualityToBoolConverter.cs",
"chars": 2918,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/ObjectToStringConverter.cs",
"chars": 1193,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/OpacityBoolConverter.cs",
"chars": 1284,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/PlayTimeToStringConverter.cs",
"chars": 2992,
"preview": "using Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Sy"
},
{
"path": "source/Playnite/Converters/SortingOrderToStringConverter.cs",
"chars": 1014,
"preview": "using Playnite;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusi"
},
{
"path": "source/Playnite/Converters/StrechToStringConverter.cs",
"chars": 1526,
"preview": "using Playnite;\r\nusing Playnite.SDK;\r\nusing Playnite.Settings;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing"
},
{
"path": "source/Playnite/Converters/StringNullOrEmptyToBoolConverter.cs",
"chars": 1310,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/StringNullOrEmptyToVisibilityConverter.cs",
"chars": 1504,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/StringToUpperCaseConverter.cs",
"chars": 921,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "source/Playnite/Converters/TicksToTimeSpanConverter.cs",
"chars": 1314,
"preview": "using Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Sy"
},
{
"path": "source/Playnite/Converters/ValueConverterGroup.cs",
"chars": 751,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Converters/WidthToFontSizeConverter.cs",
"chars": 942,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Database/Collections/AgeRatingsCollection.cs",
"chars": 1654,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Database/Collections/AppSoftwareCollection.cs",
"chars": 2114,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Database/Collections/CategoriesCollection.cs",
"chars": 1645,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Database/Collections/CompaniesCollection.cs",
"chars": 2051,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Database/Collections/CompletionStatusesCollection.cs",
"chars": 2973,
"preview": "using LiteDB;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing"
},
{
"path": "source/Playnite/Database/Collections/EmulatorsCollection.cs",
"chars": 2944,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Database/Collections/FeaturesCollection.cs",
"chars": 1625,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Database/Collections/FilterPresetsCollection.cs",
"chars": 3001,
"preview": "using LiteDB;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing"
},
{
"path": "source/Playnite/Database/Collections/GameScannersCollection.cs",
"chars": 1979,
"preview": "using LiteDB;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing"
},
{
"path": "source/Playnite/Database/Collections/GamesCollection.cs",
"chars": 6758,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Database/Collections/GamesSourcesCollection.cs",
"chars": 1624,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Database/Collections/GenresCollection.cs",
"chars": 1606,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Database/Collections/ImportExclusionsCollection.cs",
"chars": 649,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Database/Collections/ItemCollection.cs",
"chars": 23012,
"preview": "using LiteDB;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing SqlNado;\r\nusing System;\r\nusing System.Collections"
},
{
"path": "source/Playnite/Database/Collections/LiteDBFileReaderV7.cs",
"chars": 31013,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\r\nusing System.Te"
},
{
"path": "source/Playnite/Database/Collections/PlatformsCollection.cs",
"chars": 7357,
"preview": "using Playnite.Emulators;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Gen"
},
{
"path": "source/Playnite/Database/Collections/RegionsCollection.cs",
"chars": 4967,
"preview": "using Playnite.Emulators;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Gen"
},
{
"path": "source/Playnite/Database/Collections/SeriesCollection.cs",
"chars": 1597,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Database/Collections/TagsCollection.cs",
"chars": 1573,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n"
},
{
"path": "source/Playnite/Database/DatabaseExplorer.cs",
"chars": 38713,
"preview": "using Playnite.Commands;\r\nusing Playnite.Plugins;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing Playnite.SDK."
},
{
"path": "source/Playnite/Database/DatabaseFileEvent.cs",
"chars": 613,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Database/DatabaseFilter.cs",
"chars": 26309,
"preview": "using Playnite.Plugins;\r\nusing Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing Playnite.SDK.Plugins;\r\nusing System;\r\nu"
},
{
"path": "source/Playnite/Database/DatabaseSettings.cs",
"chars": 355,
"preview": "using LiteDB;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.T"
},
{
"path": "source/Playnite/Database/DatabaseStats.cs",
"chars": 5140,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\n"
},
{
"path": "source/Playnite/Database/EventBufferHandler.cs",
"chars": 501,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Database/GameDatabase.cs",
"chars": 65500,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.IO;\r\nusing System"
},
{
"path": "source/Playnite/Database/GameDatabaseMigration.cs",
"chars": 35643,
"preview": "using LiteDB;\r\nusing Newtonsoft.Json.Linq;\r\nusing Playnite.Common;\r\nusing Playnite.Database.OldModels;\r\nusing Playnite."
},
{
"path": "source/Playnite/Database/GameDatabase_Filters.cs",
"chars": 13023,
"preview": "using Playnite.SDK.Models;\r\nusing Playnite.ViewModels;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System."
},
{
"path": "source/Playnite/Database/GameFieldComparer.cs",
"chars": 1655,
"preview": "using Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nu"
},
{
"path": "source/Playnite/Database/InMemoryGameDatabase.cs",
"chars": 8629,
"preview": "using Playnite.SDK;\r\nusing Playnite.SDK.Models;\r\nusing Playnite.SDK.Plugins;\r\nusing System;\r\nusing System.Collections.G"
},
{
"path": "source/Playnite/Database/OldModels/NewVer1/OldCompletionStatus.cs",
"chars": 739,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Database/OldModels/NewVer1/OldDatabaseObject.cs",
"chars": 685,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
},
{
"path": "source/Playnite/Database/OldModels/NewVer1/OldGame.cs",
"chars": 18444,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\n"
},
{
"path": "source/Playnite/Database/OldModels/NewVer1/OldGameAction.cs",
"chars": 5328,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Diagnostics;\r\nusing System"
},
{
"path": "source/Playnite/Database/OldModels/NewVer1/OldLink.cs",
"chars": 1430,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r"
},
{
"path": "source/Playnite/Database/OldModels/Ver2.cs",
"chars": 58423,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\n"
},
{
"path": "source/Playnite/DateTimes.cs",
"chars": 4239,
"preview": "using Playnite.SDK.Models;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nu"
},
{
"path": "source/Playnite/Diagnostic.cs",
"chars": 13913,
"preview": "using Playnite.Common;\r\nusing Playnite.SDK;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing "
}
]
// ... and 1102 more files (download for full content)
About this extraction
This page contains the full source code of the JosefNemec/Playnite GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1302 files (11.5 MB), approximately 3.1M tokens, and a symbol index with 7464 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.