├── .appveyor.yml ├── .circleci ├── build.sh ├── config.yml ├── objdump_linux.sh ├── prepare.sh ├── release_bintray.sh ├── release_github.sh ├── stage.sh └── zip_linux.sh ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug.md │ ├── config.yml │ └── feature.md └── workflows │ ├── android.yml │ ├── macos.yml │ └── x11.yml ├── .gitignore ├── .gitmodules ├── .qmake.conf ├── .travis ├── script__build_with_lcov.sh └── script__create_deb.sh ├── CMakeLists.txt ├── LICENSE.md ├── README.md ├── assets ├── CMakeLists.txt ├── assets.qrc ├── buttons │ ├── ps_circle.png │ ├── ps_cross.png │ ├── ps_square.png │ ├── ps_triangle.png │ ├── xb_a.png │ ├── xb_b.png │ ├── xb_x.png │ └── xb_y.png ├── fonts │ ├── Roboto-Bold.ttf │ ├── Roboto-Regular.ttf │ ├── RobotoCondensed-Bold.ttf │ ├── RobotoCondensed-Regular.ttf │ └── RobotoMono-Regular.ttf ├── icon.png └── sdl2 │ ├── gamecontrollerdb_2016.txt │ ├── gamecontrollerdb_204.txt │ ├── gamecontrollerdb_205.txt │ └── gamecontrollerdb_209.txt ├── cmake ├── PegasusCommonProps.cmake ├── PegasusGitInfo.cmake ├── PegasusPrettyPrint.cmake ├── PegasusQtUtils.cmake └── PegasusTargetPlatform.cmake ├── doc ├── Qt.LICENSE.GPL3 ├── Qt.LICENSE.GPL3-EXCEPT └── Roboto.LICENSE ├── etc ├── branding │ ├── logo.png │ └── logo.svg ├── promo │ ├── donate-coffee.png │ ├── donate-patreon.png │ ├── screenshot_alpha1.jpg │ ├── screenshot_alpha10.jpg │ └── shader_demo.jpg └── rpi4 │ └── kms_launch_fix.diff ├── pegasus.pro ├── src ├── CMakeLists.txt ├── app │ ├── CMakeLists.txt │ ├── app.pro │ ├── install.pri │ ├── main.cpp │ ├── platform │ │ ├── android │ │ │ ├── AndroidManifest.xml │ │ │ ├── build.gradle │ │ │ ├── gradle.properties │ │ │ ├── res │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ │ └── icon.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ ├── icon.png │ │ │ │ │ └── icon_fg.png │ │ │ │ ├── mipmap-ldpi │ │ │ │ │ └── icon.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ ├── icon.png │ │ │ │ │ └── icon_fg.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ ├── banner.png │ │ │ │ │ ├── icon.png │ │ │ │ │ └── icon_fg.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ ├── icon.png │ │ │ │ │ └── icon_fg.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ ├── icon.png │ │ │ │ │ └── icon_fg.png │ │ │ │ ├── values │ │ │ │ │ ├── colors.xml │ │ │ │ │ └── themes.xml │ │ │ │ └── xml │ │ │ │ │ └── fileprovider_paths.xml │ │ │ └── src │ │ │ │ └── org │ │ │ │ └── pegasus_frontend │ │ │ │ └── android │ │ │ │ ├── App.java │ │ │ │ ├── BatteryInfo.java │ │ │ │ ├── IntentHelper.java │ │ │ │ ├── LaunchFileProvider.java │ │ │ │ └── MainActivity.java │ │ ├── linux │ │ │ ├── icons │ │ │ │ ├── 16 │ │ │ │ │ └── org.pegasus_frontend.Pegasus.png │ │ │ │ ├── 32 │ │ │ │ │ └── org.pegasus_frontend.Pegasus.png │ │ │ │ ├── 48 │ │ │ │ │ └── org.pegasus_frontend.Pegasus.png │ │ │ │ ├── 64 │ │ │ │ │ └── org.pegasus_frontend.Pegasus.png │ │ │ │ └── 128 │ │ │ │ │ └── org.pegasus_frontend.Pegasus.png │ │ │ ├── org.pegasus_frontend.Pegasus.desktop.in │ │ │ ├── org.pegasus_frontend.Pegasus.desktop.qmake.in │ │ │ └── org.pegasus_frontend.Pegasus.metainfo.xml │ │ ├── macos │ │ │ ├── Info.plist.in │ │ │ └── pegasus-fe.icns │ │ └── windows │ │ │ └── app_icon.ico │ └── qmlplugins.qml ├── backend │ ├── AppSettings.cpp │ ├── AppSettings.h │ ├── Backend.cpp │ ├── Backend.h │ ├── CMakeLists.txt │ ├── CliArgs.h │ ├── FrontendLayer.cpp │ ├── FrontendLayer.h │ ├── Log.cpp │ ├── Log.h │ ├── Paths.cpp │ ├── Paths.h │ ├── PegasusAssets.cpp │ ├── PegasusAssets.h │ ├── ProcessLauncher.cpp │ ├── ProcessLauncher.h │ ├── ScriptRunner.cpp │ ├── ScriptRunner.h │ ├── backend.pro │ ├── imggen │ │ ├── BlurhashProvider.cpp │ │ ├── BlurhashProvider.h │ │ ├── CMakeLists.txt │ │ └── imggen.pri │ ├── model │ │ ├── Api.cpp │ │ ├── Api.h │ │ ├── CMakeLists.txt │ │ ├── ObjectListModel.h │ │ ├── device │ │ │ ├── DeviceInfo.cpp │ │ │ ├── DeviceInfo.h │ │ │ └── device.pri │ │ ├── gaming │ │ │ ├── Assets.cpp │ │ │ ├── Assets.h │ │ │ ├── Collection.cpp │ │ │ ├── Collection.h │ │ │ ├── CollectionListModel.cpp │ │ │ ├── CollectionListModel.h │ │ │ ├── Game.cpp │ │ │ ├── Game.h │ │ │ ├── GameFile.cpp │ │ │ ├── GameFile.h │ │ │ ├── GameFileListModel.cpp │ │ │ ├── GameFileListModel.h │ │ │ ├── GameListModel.cpp │ │ │ ├── GameListModel.h │ │ │ └── gaming.pri │ │ ├── internal │ │ │ ├── Gamepad.cpp │ │ │ ├── Gamepad.h │ │ │ ├── GamepadAxisNavigation.cpp │ │ │ ├── GamepadAxisNavigation.h │ │ │ ├── GamepadButtonNavigation.cpp │ │ │ ├── GamepadButtonNavigation.h │ │ │ ├── GamepadListModel.cpp │ │ │ ├── GamepadListModel.h │ │ │ ├── GamepadManager.cpp │ │ │ ├── GamepadManager.h │ │ │ ├── GamepadManagerBackend.cpp │ │ │ ├── GamepadManagerBackend.h │ │ │ ├── GamepadManagerQt.cpp │ │ │ ├── GamepadManagerQt.h │ │ │ ├── GamepadManagerSDL2.cpp │ │ │ ├── GamepadManagerSDL2.h │ │ │ ├── Internal.cpp │ │ │ ├── Internal.h │ │ │ ├── Meta.cpp │ │ │ ├── Meta.h │ │ │ ├── ScannerState.cpp │ │ │ ├── ScannerState.h │ │ │ ├── System.cpp │ │ │ ├── System.h │ │ │ ├── internal.pri │ │ │ └── settings │ │ │ │ ├── KeyEditor.cpp │ │ │ │ ├── KeyEditor.h │ │ │ │ ├── Locales.cpp │ │ │ │ ├── Locales.h │ │ │ │ ├── Providers.cpp │ │ │ │ ├── Providers.h │ │ │ │ ├── Settings.cpp │ │ │ │ ├── Settings.h │ │ │ │ ├── Themes.cpp │ │ │ │ ├── Themes.h │ │ │ │ └── settings.pri │ │ ├── keys │ │ │ ├── Key.cpp │ │ │ ├── Key.h │ │ │ ├── Keys.cpp │ │ │ ├── Keys.h │ │ │ └── keys.pri │ │ ├── memory │ │ │ ├── Memory.cpp │ │ │ ├── Memory.h │ │ │ └── memory.pri │ │ └── model.pri │ ├── parsers │ │ ├── CMakeLists.txt │ │ ├── MetaFile.cpp │ │ ├── MetaFile.h │ │ ├── SettingsFile.cpp │ │ ├── SettingsFile.h │ │ └── parsers.pri │ ├── platform │ │ ├── AndroidAppIconProvider.cpp │ │ ├── AndroidAppIconProvider.h │ │ ├── AndroidHelpers.cpp │ │ ├── AndroidHelpers.h │ │ ├── CMakeLists.txt │ │ ├── PowerCommands.h │ │ ├── PowerCommands_linux.cpp │ │ ├── PowerCommands_mac.cpp │ │ ├── PowerCommands_unimpl.cpp │ │ ├── PowerCommands_win.cpp │ │ ├── TerminalKbd.cpp │ │ ├── TerminalKbd.h │ │ └── platform.pri │ ├── providers │ │ ├── CMakeLists.txt │ │ ├── Provider.cpp │ │ ├── Provider.h │ │ ├── ProviderManager.cpp │ │ ├── ProviderManager.h │ │ ├── ProviderUtils.cpp │ │ ├── ProviderUtils.h │ │ ├── SearchContext.cpp │ │ ├── SearchContext.h │ │ ├── android_apps │ │ │ ├── AndroidAppsMetadata.cpp │ │ │ ├── AndroidAppsMetadata.h │ │ │ ├── AndroidAppsProvider.cpp │ │ │ ├── AndroidAppsProvider.h │ │ │ ├── CMakeLists.txt │ │ │ └── android.pri │ │ ├── es2 │ │ │ ├── CMakeLists.txt │ │ │ ├── Es2Games.cpp │ │ │ ├── Es2Games.h │ │ │ ├── Es2Metadata.cpp │ │ │ ├── Es2Metadata.h │ │ │ ├── Es2Provider.cpp │ │ │ ├── Es2Provider.h │ │ │ ├── Es2Systems.cpp │ │ │ ├── Es2Systems.h │ │ │ └── es2.pri │ │ ├── gog │ │ │ ├── CMakeLists.txt │ │ │ ├── GogGamelist.cpp │ │ │ ├── GogGamelist.h │ │ │ ├── GogMetadata.cpp │ │ │ ├── GogMetadata.h │ │ │ ├── GogProvider.cpp │ │ │ ├── GogProvider.h │ │ │ └── gog.pri │ │ ├── launchbox │ │ │ ├── CMakeLists.txt │ │ │ ├── LaunchBoxAssets.cpp │ │ │ ├── LaunchBoxAssets.h │ │ │ ├── LaunchBoxEmulatorsXml.cpp │ │ │ ├── LaunchBoxEmulatorsXml.h │ │ │ ├── LaunchBoxGamelistXml.cpp │ │ │ ├── LaunchBoxGamelistXml.h │ │ │ ├── LaunchBoxPlatformsXml.cpp │ │ │ ├── LaunchBoxPlatformsXml.h │ │ │ ├── LaunchBoxProvider.cpp │ │ │ ├── LaunchBoxProvider.h │ │ │ ├── LaunchBoxXml.cpp │ │ │ ├── LaunchBoxXml.h │ │ │ └── launchbox.pri │ │ ├── logiqx │ │ │ ├── CMakeLists.txt │ │ │ ├── LogiqxProvider.cpp │ │ │ ├── LogiqxProvider.h │ │ │ └── logiqx.pri │ │ ├── lutris │ │ │ ├── CMakeLists.txt │ │ │ ├── LutrisProvider.cpp │ │ │ ├── LutrisProvider.h │ │ │ └── lutris.pri │ │ ├── pegasus_favorites │ │ │ ├── CMakeLists.txt │ │ │ ├── Favorites.cpp │ │ │ ├── Favorites.h │ │ │ └── pegasus_favorites.pri │ │ ├── pegasus_media │ │ │ ├── CMakeLists.txt │ │ │ ├── MediaProvider.cpp │ │ │ ├── MediaProvider.h │ │ │ └── pegasus_media.pri │ │ ├── pegasus_metadata │ │ │ ├── CMakeLists.txt │ │ │ ├── PegasusFilter.cpp │ │ │ ├── PegasusFilter.h │ │ │ ├── PegasusMetadata.cpp │ │ │ ├── PegasusMetadata.h │ │ │ ├── PegasusProvider.cpp │ │ │ ├── PegasusProvider.h │ │ │ └── pegasus_metadata.pri │ │ ├── pegasus_playtime │ │ │ ├── CMakeLists.txt │ │ │ ├── PlaytimeStats.cpp │ │ │ ├── PlaytimeStats.h │ │ │ └── pegasus_playtime.pri │ │ ├── playnite │ │ │ ├── CMakeLists.txt │ │ │ ├── PlayniteComponents.h │ │ │ ├── PlayniteEmulator.h │ │ │ ├── PlayniteGame.h │ │ │ ├── PlayniteJsonHelper.cpp │ │ │ ├── PlayniteJsonHelper.h │ │ │ ├── PlayniteLaunchHelper.cpp │ │ │ ├── PlayniteLaunchHelper.h │ │ │ ├── PlayniteMetadataParser.cpp │ │ │ ├── PlayniteMetadataParser.h │ │ │ ├── PlayniteProvider.cpp │ │ │ ├── PlayniteProvider.h │ │ │ └── playnite.pri │ │ ├── providers.pri │ │ ├── skraper │ │ │ ├── CMakeLists.txt │ │ │ ├── SkraperAssetsProvider.cpp │ │ │ ├── SkraperAssetsProvider.h │ │ │ └── skraper.pri │ │ └── steam │ │ │ ├── CMakeLists.txt │ │ │ ├── SteamGamelist.cpp │ │ │ ├── SteamGamelist.h │ │ │ ├── SteamMetadata.cpp │ │ │ ├── SteamMetadata.h │ │ │ ├── SteamProvider.cpp │ │ │ ├── SteamProvider.h │ │ │ └── steam.pri │ ├── types │ │ ├── AppCloseType.h │ │ ├── AssetType.h │ │ ├── CMakeLists.txt │ │ ├── GamepadKeyId.h │ │ ├── KeyEventType.h │ │ └── types.pri │ └── utils │ │ ├── CMakeLists.txt │ │ ├── CommandTokenizer.cpp │ │ ├── CommandTokenizer.h │ │ ├── DiskCachedNAM.cpp │ │ ├── DiskCachedNAM.h │ │ ├── FakeQKeyEvent.cpp │ │ ├── FakeQKeyEvent.h │ │ ├── FolderListModel.cpp │ │ ├── FolderListModel.h │ │ ├── HashMap.h │ │ ├── KeySequenceTools.cpp │ │ ├── KeySequenceTools.h │ │ ├── MoveOnly.h │ │ ├── NoCopyNoMove.h │ │ ├── PathTools.cpp │ │ ├── PathTools.h │ │ ├── QmlHelpers.h │ │ ├── SqliteDb.cpp │ │ ├── SqliteDb.h │ │ ├── StdHelpers.h │ │ ├── StringHelpers.cpp │ │ ├── StringHelpers.h │ │ └── utils.pri ├── deployment_vars.pri ├── frontend │ ├── CMakeLists.txt │ ├── MenuLayer.qml │ ├── SplashLayer.qml │ ├── assets │ │ ├── dir-icon.png │ │ ├── gamepad │ │ │ ├── list-arrow.png │ │ │ ├── preview.png │ │ │ └── x360 │ │ │ │ ├── a.png │ │ │ │ ├── b.png │ │ │ │ ├── dpdown.png │ │ │ │ ├── dpleft.png │ │ │ │ ├── dpright.png │ │ │ │ ├── dpup.png │ │ │ │ ├── guide.png │ │ │ │ ├── lb.png │ │ │ │ ├── lsb.png │ │ │ │ ├── lsx.png │ │ │ │ ├── lsy.png │ │ │ │ ├── lt.png │ │ │ │ ├── rb.png │ │ │ │ ├── rsb.png │ │ │ │ ├── rsx.png │ │ │ │ ├── rsy.png │ │ │ │ ├── rt.png │ │ │ │ ├── select.png │ │ │ │ ├── start.png │ │ │ │ ├── x.png │ │ │ │ └── y.png │ │ ├── logo.png │ │ ├── pbar-left.png │ │ ├── pbar-right.png │ │ ├── pbar.png │ │ ├── qr-docs.png │ │ └── qt-logo.png │ ├── dialogs │ │ ├── GenericOkCancelDialog.qml │ │ ├── GenericOkDialog.qml │ │ ├── MultifileSelector.qml │ │ ├── RebootDialog.qml │ │ ├── Shade.qml │ │ └── ShutdownDialog.qml │ ├── frontend.pro │ ├── frontend.qrc │ ├── main.qml │ ├── menu │ │ ├── common │ │ │ └── MenuScreen.qml │ │ ├── help │ │ │ ├── HelpScreen.qml │ │ │ ├── QrBox.qml │ │ │ └── SectionTitle.qml │ │ ├── mainmenu │ │ │ ├── GenericMenuItem.qml │ │ │ ├── MainMenuPanel.qml │ │ │ ├── PrimaryMenuItem.qml │ │ │ ├── RollableMenuItem.qml │ │ │ └── SecondaryMenuItem.qml │ │ └── settings │ │ │ ├── AndroidSafEditor.qml │ │ │ ├── GameDirEditor.qml │ │ │ ├── GamepadEditor.qml │ │ │ ├── KeyEditor.qml │ │ │ ├── ProviderEditor.qml │ │ │ ├── SettingsEntry.qml │ │ │ ├── SettingsMain.qml │ │ │ ├── SettingsScreen.qml │ │ │ ├── common │ │ │ ├── MultivalueBox.qml │ │ │ ├── MultivalueOption.qml │ │ │ ├── ReloadQuestion.qml │ │ │ ├── ScreenHeader.qml │ │ │ ├── SectionTitle.qml │ │ │ ├── SimpleButton.qml │ │ │ ├── SimpleShade.qml │ │ │ ├── Switch.qml │ │ │ └── ToggleOption.qml │ │ │ ├── gamedireditor │ │ │ ├── FilePicker.qml │ │ │ ├── GameDirEditorButton.qml │ │ │ └── GameDirEditorEntry.qml │ │ │ ├── gamepad │ │ │ ├── GamepadField.qml │ │ │ ├── GamepadFooter.qml │ │ │ ├── GamepadHeader.qml │ │ │ ├── GamepadPreview.qml │ │ │ └── GamepadRecorder.qml │ │ │ └── keyeditor │ │ │ ├── KeyEditorEntry.qml │ │ │ ├── KeyEditorEntryButton.qml │ │ │ ├── KeyEditorRecorder.qml │ │ │ └── KeyEditorResetButton.qml │ └── messages │ │ ├── Error.qml │ │ ├── NoGamesError.qml │ │ └── ThemeError.qml ├── link_to_backend.pri ├── link_to_frontend.pri ├── print_config.pri ├── qmlutils │ ├── AutoScroll.qml │ ├── HorizontalSwipeArea.qml │ └── qmlutils.qrc ├── src.pro └── themes │ └── themes.qrc ├── tests ├── CMakeLists.txt ├── backend │ ├── api │ │ ├── CMakeLists.txt │ │ ├── api.pro │ │ └── test_Api.cpp │ ├── backend.pro │ ├── configfile │ │ ├── CMakeLists.txt │ │ ├── configfile.pro │ │ ├── configfile.qrc │ │ ├── test.cfg │ │ └── test_ConfigFile.cpp │ ├── model │ │ ├── collection │ │ │ ├── CMakeLists.txt │ │ │ ├── collection.pro │ │ │ └── test_Collection.cpp │ │ ├── game │ │ │ ├── CMakeLists.txt │ │ │ ├── game.pro │ │ │ └── test_Game.cpp │ │ ├── gameassets │ │ │ ├── CMakeLists.txt │ │ │ ├── gameassets.pro │ │ │ └── test_GameAssets.cpp │ │ ├── keyeditor │ │ │ ├── CMakeLists.txt │ │ │ ├── keyeditor.pro │ │ │ ├── test_KeyEditor.cpp │ │ │ ├── tst_add.qml │ │ │ ├── tst_delete.qml │ │ │ ├── tst_keyname.qml │ │ │ ├── tst_replace.qml │ │ │ └── utils.js │ │ ├── locales │ │ │ ├── CMakeLists.txt │ │ │ ├── locales.pro │ │ │ └── test_Locales.cpp │ │ ├── memory │ │ │ ├── CMakeLists.txt │ │ │ ├── Container.cpp │ │ │ ├── Container.h │ │ │ ├── memory.pro │ │ │ └── test_Memory.cpp │ │ ├── model.pro │ │ ├── system │ │ │ ├── CMakeLists.txt │ │ │ ├── system.pro │ │ │ └── test_System.cpp │ │ └── themes │ │ │ ├── CMakeLists.txt │ │ │ ├── test_Themes.cpp │ │ │ └── themes.pro │ ├── processlauncher │ │ ├── CMakeLists.txt │ │ ├── processlauncher.pro │ │ └── test_ProcessLauncher.cpp │ ├── providers │ │ ├── emulationstation │ │ │ ├── CMakeLists.txt │ │ │ ├── data │ │ │ │ ├── basic │ │ │ │ │ ├── es │ │ │ │ │ │ └── es_systems.cfg │ │ │ │ │ └── mysys1 │ │ │ │ │ │ └── game.ext │ │ │ │ ├── data.qrc │ │ │ │ ├── empty │ │ │ │ │ └── es │ │ │ │ │ │ └── nothing_to_see_here │ │ │ │ └── gamelist │ │ │ │ │ ├── abs_image1.png │ │ │ │ │ ├── abs_image2.png │ │ │ │ │ ├── es │ │ │ │ │ └── es_systems.cfg │ │ │ │ │ ├── img │ │ │ │ │ └── abs_image3.png │ │ │ │ │ └── mysys1 │ │ │ │ │ ├── game1.ext │ │ │ │ │ ├── game2.ext │ │ │ │ │ ├── gamelist.xml │ │ │ │ │ ├── img │ │ │ │ │ └── local_image3.png │ │ │ │ │ ├── local_image1.png │ │ │ │ │ └── local_image2.png │ │ │ ├── emulationstation.pro │ │ │ └── test_EmulationStationProvider.cpp │ │ ├── favorites │ │ │ ├── CMakeLists.txt │ │ │ ├── data │ │ │ │ ├── coll1dummy1 │ │ │ │ ├── coll1dummy2 │ │ │ │ ├── coll2dummy1 │ │ │ │ └── data.qrc │ │ │ ├── favorites.pro │ │ │ └── test_FavoriteDB.cpp │ │ ├── launchbox │ │ │ ├── CMakeLists.txt │ │ │ ├── data │ │ │ │ ├── basic │ │ │ │ │ ├── LaunchBox │ │ │ │ │ │ └── Data │ │ │ │ │ │ │ ├── Emulators.xml │ │ │ │ │ │ │ ├── Platforms.xml │ │ │ │ │ │ │ └── Platforms │ │ │ │ │ │ │ └── Nintendo Entertainment System.xml │ │ │ │ │ ├── emu │ │ │ │ │ │ └── nestopia.exe │ │ │ │ │ └── game │ │ │ │ │ │ ├── Test Bros (JU) [!].zip │ │ │ │ │ │ └── Test Bros Something.zip │ │ │ │ ├── data.qrc │ │ │ │ └── empty │ │ │ │ │ └── nothing_to_see_here │ │ │ ├── launchbox.pro │ │ │ └── test_LaunchBoxProvider.cpp │ │ ├── logiqx │ │ │ ├── CMakeLists.txt │ │ │ ├── data │ │ │ │ ├── data.qrc │ │ │ │ ├── faulty │ │ │ │ │ ├── empty.dat │ │ │ │ │ ├── incorrect_root.dat │ │ │ │ │ ├── no_doctype.dat │ │ │ │ │ └── not_logiqx.dat │ │ │ │ ├── malformed │ │ │ │ │ ├── Game 1.ext │ │ │ │ │ ├── Game 2.ext │ │ │ │ │ ├── Game 3.ext │ │ │ │ │ ├── bad_games.dat │ │ │ │ │ └── bad_header.dat │ │ │ │ └── simple │ │ │ │ │ ├── Game 1.ext │ │ │ │ │ ├── Game 2x1.ext │ │ │ │ │ ├── Game 2x2.ext │ │ │ │ │ └── something.dat │ │ │ ├── logiqx.pro │ │ │ └── test_LogiqxProvider.cpp │ │ ├── pegasus │ │ │ ├── CMakeLists.txt │ │ │ ├── data │ │ │ │ ├── autoparenting │ │ │ │ │ ├── game1.ext │ │ │ │ │ ├── game2.ext │ │ │ │ │ ├── game3.ext │ │ │ │ │ └── metadata.txt │ │ │ │ ├── custom_assets │ │ │ │ │ ├── collections.txt │ │ │ │ │ ├── different_dir │ │ │ │ │ │ └── whatever.png │ │ │ │ │ ├── media │ │ │ │ │ │ └── mygame1-boxFront.png │ │ │ │ │ ├── metadata.txt │ │ │ │ │ ├── my_collection_assets │ │ │ │ │ │ └── cartridge.png │ │ │ │ │ └── mygame1.ext │ │ │ │ ├── custom_assets_multi │ │ │ │ │ ├── game1.ext │ │ │ │ │ ├── game2.ext │ │ │ │ │ ├── metadata.txt │ │ │ │ │ └── videos │ │ │ │ │ │ ├── a.mp4 │ │ │ │ │ │ ├── b.mp4 │ │ │ │ │ │ └── c.mp4 │ │ │ │ ├── custom_dirs │ │ │ │ │ ├── a │ │ │ │ │ │ ├── mygame.x │ │ │ │ │ │ └── mygame.y │ │ │ │ │ ├── b │ │ │ │ │ │ ├── mygame.x │ │ │ │ │ │ └── mygame.y │ │ │ │ │ ├── c │ │ │ │ │ │ ├── mygame.x │ │ │ │ │ │ └── mygame.y │ │ │ │ │ └── coll │ │ │ │ │ │ ├── metadata.txt │ │ │ │ │ │ └── mygame.x │ │ │ │ ├── data.qrc │ │ │ │ ├── empty │ │ │ │ │ └── nothing_to_see_here │ │ │ │ ├── entryless │ │ │ │ │ └── metadata.txt │ │ │ │ ├── multicoll │ │ │ │ │ ├── c1 │ │ │ │ │ │ └── metadata.txt │ │ │ │ │ ├── c2 │ │ │ │ │ │ └── metadata.txt │ │ │ │ │ └── games │ │ │ │ │ │ ├── game.ext │ │ │ │ │ │ ├── game.jpg │ │ │ │ │ │ └── metadata.txt │ │ │ │ ├── multifile │ │ │ │ │ ├── metadata.txt │ │ │ │ │ ├── multi.a.ext │ │ │ │ │ ├── multi.b.ext │ │ │ │ │ └── single.ext │ │ │ │ ├── relative_files │ │ │ │ │ ├── a │ │ │ │ │ │ └── game_a.ext │ │ │ │ │ ├── coll │ │ │ │ │ │ ├── b │ │ │ │ │ │ │ └── game_b.ext │ │ │ │ │ │ ├── c │ │ │ │ │ │ │ └── game_c.ext │ │ │ │ │ │ ├── game_here.ext │ │ │ │ │ │ └── metadata.txt │ │ │ │ │ └── ignored │ │ │ │ │ │ └── ignoreme.ext │ │ │ │ ├── relative_files_with_dirs │ │ │ │ │ ├── a │ │ │ │ │ │ ├── game_a.x │ │ │ │ │ │ └── ignoreme.x │ │ │ │ │ ├── b │ │ │ │ │ │ ├── game_b.x │ │ │ │ │ │ └── ignoredir │ │ │ │ │ │ │ └── game_ign.x │ │ │ │ │ └── coll │ │ │ │ │ │ ├── game_here.x │ │ │ │ │ │ ├── ignoredir │ │ │ │ │ │ └── game_ign.x │ │ │ │ │ │ ├── ignoreme.x │ │ │ │ │ │ └── metadata.txt │ │ │ │ ├── simple │ │ │ │ │ ├── 9999-in-1.ext │ │ │ │ │ ├── buggygame.ext │ │ │ │ │ ├── duplicategame.ext │ │ │ │ │ ├── favgame1.ext │ │ │ │ │ ├── favgame2.ext │ │ │ │ │ ├── game with spaces.ext │ │ │ │ │ ├── media │ │ │ │ │ │ └── game_ignored.ext │ │ │ │ │ ├── metadata.pegasus.txt │ │ │ │ │ ├── mygame1.ext │ │ │ │ │ ├── mygame2.EXT │ │ │ │ │ ├── mygame3.ext │ │ │ │ │ ├── notgame.unk │ │ │ │ │ └── subdir │ │ │ │ │ │ └── game_in_subdir.EXT │ │ │ │ └── with_meta │ │ │ │ │ ├── basic.ext │ │ │ │ │ ├── horse.ext │ │ │ │ │ ├── media │ │ │ │ │ └── game_ignored.ext │ │ │ │ │ ├── metadata.pegasus.txt │ │ │ │ │ ├── metadata.txt │ │ │ │ │ ├── multi.a.ext │ │ │ │ │ ├── multi.b.ext │ │ │ │ │ ├── mygame2.ext │ │ │ │ │ ├── mygame3.ext │ │ │ │ │ ├── pre.ext │ │ │ │ │ └── subdir │ │ │ │ │ └── game_in_subdir.ext │ │ │ ├── pegasus.pro │ │ │ └── test_PegasusProvider.cpp │ │ ├── pegasus_media │ │ │ ├── CMakeLists.txt │ │ │ ├── data │ │ │ │ ├── asset_search │ │ │ │ │ ├── media │ │ │ │ │ │ ├── mygame1 │ │ │ │ │ │ │ ├── box_front.png │ │ │ │ │ │ │ └── video.mp4 │ │ │ │ │ │ ├── mygame3 │ │ │ │ │ │ │ ├── music.mp3 │ │ │ │ │ │ │ └── screenshot.jpg │ │ │ │ │ │ └── subdir │ │ │ │ │ │ │ └── mygame4 │ │ │ │ │ │ │ └── background.png │ │ │ │ │ ├── metadata.txt │ │ │ │ │ ├── mygame1.ext │ │ │ │ │ ├── mygame2.ext │ │ │ │ │ ├── mygame3.ext │ │ │ │ │ └── subdir │ │ │ │ │ │ └── mygame4.ext │ │ │ │ ├── asset_search_by_title │ │ │ │ │ ├── media │ │ │ │ │ │ └── My Precious Game │ │ │ │ │ │ │ ├── box_front.png │ │ │ │ │ │ │ └── video.mp4 │ │ │ │ │ ├── metadata.txt │ │ │ │ │ └── mygame.ext │ │ │ │ ├── asset_search_multifile │ │ │ │ │ ├── media │ │ │ │ │ │ └── mygame │ │ │ │ │ │ │ ├── screenshot01.png │ │ │ │ │ │ │ └── screenshot02.png │ │ │ │ │ ├── metadata.txt │ │ │ │ │ └── mygame.ext │ │ │ │ ├── data.qrc │ │ │ │ └── separate_media_dirs │ │ │ │ │ ├── games-a │ │ │ │ │ ├── game1.ext │ │ │ │ │ └── media │ │ │ │ │ │ └── Game 1 │ │ │ │ │ │ └── box_front.png │ │ │ │ │ ├── games-b │ │ │ │ │ ├── .media │ │ │ │ │ │ └── Game 2 │ │ │ │ │ │ │ └── box_front.png │ │ │ │ │ └── game2.ext │ │ │ │ │ └── metadata │ │ │ │ │ └── metadata.pegasus.txt │ │ │ ├── pegasus_media.pro │ │ │ └── test_PegasusMediaProvider.cpp │ │ ├── playnite │ │ │ ├── CMakeLists.txt │ │ │ ├── data │ │ │ │ ├── basic │ │ │ │ │ ├── Playnite │ │ │ │ │ │ └── library │ │ │ │ │ │ │ ├── companies │ │ │ │ │ │ │ ├── 133a9c55-2c95-4159-b1df-edf03f686031.json │ │ │ │ │ │ │ ├── 26e38b33-91f8-4d21-a69e-4c32a29d13de.json │ │ │ │ │ │ │ ├── 562f95a7-6ac1-4795-9946-e5d13b9a9df6.json │ │ │ │ │ │ │ └── 6f1fe3aa-c0eb-4d41-9e14-cce859a7af4e.json │ │ │ │ │ │ │ ├── emulators │ │ │ │ │ │ │ └── 7e80bb8a-2e09-4a41-bc17-0035d4ba1709.json │ │ │ │ │ │ │ ├── games │ │ │ │ │ │ │ ├── 000b196b-217a-453c-bcaf-473cc455fc6f.json │ │ │ │ │ │ │ └── 39d79d40-a579-4e13-8e74-0723e65c7305.json │ │ │ │ │ │ │ ├── genres │ │ │ │ │ │ │ ├── 7f2a2f5a-aa50-4ac3-a8fc-f38f3e6d4cdb.json │ │ │ │ │ │ │ ├── 9828dab7-5f3f-47b9-b0cc-2cf610e55655.json │ │ │ │ │ │ │ ├── b232562e-5ec8-4809-9511-89a2aaa05b32.json │ │ │ │ │ │ │ ├── c3ba2a1a-65ec-4040-a798-f28adb62f955.json │ │ │ │ │ │ │ ├── c5c76d06-3ef5-4ba1-939f-2b26caa37514.json │ │ │ │ │ │ │ ├── ebeb4bd1-9e2b-4af7-89ef-c2805110ea9f.json │ │ │ │ │ │ │ └── ef3ea3be-3e35-4178-b5f1-f57fed9c57a5.json │ │ │ │ │ │ │ ├── platforms │ │ │ │ │ │ │ ├── 22fc036d-c73c-4ce1-ba49-105ecacaf9cf.json │ │ │ │ │ │ │ └── adb97362-7144-4191-8bcb-a80f5b049265.json │ │ │ │ │ │ │ └── sources │ │ │ │ │ │ │ ├── 69a848f2-18a0-48d6-9d27-1c1b17139d6b.json │ │ │ │ │ │ │ ├── aee2cb68-7f5a-4a00-a687-64d193a67241.json │ │ │ │ │ │ │ └── f356164c-0239-4ae4-95e3-4a0b42c3bb1e.json │ │ │ │ │ └── game │ │ │ │ │ │ ├── Test Bros (JU) [!].zip │ │ │ │ │ │ └── Test Bros Something.zip │ │ │ │ ├── data.qrc │ │ │ │ └── empty │ │ │ │ │ └── nothing_to_see_here │ │ │ ├── playnite.pro │ │ │ └── test_PlayniteProvider.cpp │ │ ├── playtime │ │ │ ├── CMakeLists.txt │ │ │ ├── data.db │ │ │ ├── data.qrc │ │ │ ├── playtime.pro │ │ │ └── test_Playtime.cpp │ │ └── providers.pro │ └── utils │ │ ├── CMakeLists.txt │ │ ├── test_Utils.cpp │ │ └── utils.pro ├── benchmarks │ ├── benchmarks.pro │ ├── configfile │ │ ├── CMakeLists.txt │ │ ├── bench_ConfigFile.cpp │ │ ├── configfile.pro │ │ ├── data.qrc │ │ └── test.cfg │ └── pegasus_provider │ │ ├── CMakeLists.txt │ │ ├── bench_PegasusProvider.cpp │ │ ├── data │ │ ├── data.qrc │ │ ├── empty │ │ │ └── nothing_to_see_here │ │ └── filled │ │ │ ├── 9999-in-1.ext │ │ │ ├── buggygame.ext │ │ │ ├── duplicategame.ext │ │ │ ├── favgame1.ext │ │ │ ├── favgame2.ext │ │ │ ├── media │ │ │ └── game_ignored.ext │ │ │ ├── metadata.pegasus.txt │ │ │ ├── mygame1.ext │ │ │ ├── mygame2.ext │ │ │ ├── mygame3.ext │ │ │ ├── notgame.unk │ │ │ └── subdir │ │ │ └── game_in_subdir.ext │ │ └── pegasus_provider.pro ├── cxxtest_common.pri ├── integration │ ├── apng │ │ ├── CMakeLists.txt │ │ ├── actual.apng │ │ ├── apng.pro │ │ ├── data.qrc │ │ ├── expected.png │ │ ├── test_apng.cpp │ │ └── tst_render.qml │ ├── blurhash │ │ ├── CMakeLists.txt │ │ ├── blurhash.pro │ │ ├── data.qrc │ │ ├── expected.png │ │ ├── test_Blurhash.cpp │ │ └── tst_render.qml │ ├── integration.pro │ ├── sdl_gamepad │ │ ├── CMakeLists.txt │ │ ├── sdl_gamepad.pro │ │ └── test_SdlGamepad.cpp │ └── sortfilter │ │ ├── CMakeLists.txt │ │ ├── sortfilter.pro │ │ ├── test_SortFilter.cpp │ │ └── tst_all.qml ├── qmltest_common.pri └── tests.pro └── thirdparty ├── README.md ├── apng ├── CMakeLists.txt ├── apng.pro ├── apngimagehandler.cpp ├── apngimagehandler_p.h ├── apngimageplugin.cpp ├── apngimageplugin.h ├── apngreader.cpp ├── apngreader_p.h └── qapng.json ├── link_to_png.pri ├── link_to_sdl.pri ├── thirdparty.pri └── thirdparty.pro /.circleci/build.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -o errexit 4 | set -o nounset 5 | set -o xtrace 6 | 7 | QT_DIR=/opt/${QT_VERSION}_${QT_TARGET}_hosttools 8 | if [[ ! -d "$QT_DIR" ]]; then 9 | QT_DIR=/opt/${QT_VERSION}_${QT_TARGET} 10 | fi 11 | 12 | ${QT_DIR}/bin/qmake --version 13 | eval ${QT_DIR}/bin/qmake . \ 14 | ENABLE_APNG=1 \ 15 | ${BUILDOPTS:-} \ 16 | QMAKE_CXXFLAGS+=\'-Wall -Wextra -pedantic\' 17 | make 18 | make install INSTALL_ROOT=${PWD}/installdir 19 | -------------------------------------------------------------------------------- /.circleci/objdump_linux.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -o errexit 4 | set -o nounset 5 | set -o xtrace 6 | 7 | ${1}objdump -p installdir${INSTALL_BINDIR:-/opt/pegasus-frontend/}pegasus-fe | grep 'NEEDED' | sort 8 | -------------------------------------------------------------------------------- /.circleci/prepare.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -o errexit 4 | set -o nounset 5 | set -o xtrace 6 | 7 | git submodule sync 8 | git submodule update --init --recursive 9 | 10 | mkdir dist 11 | 12 | 13 | TOOLS_URL=https://github.com/mmatyas/pegasus-frontend/releases/download/alpha1 14 | curl -L ${TOOLS_URL}/${QT_VERSION}_${QT_TARGET}.tar.xz | tar xJf - -C /opt/ 15 | curl -L ${TOOLS_URL}/apng_patched_headers.tar.xz | tar xJf - -C /opt/${QT_VERSION}_${QT_TARGET}/include/ 16 | -------------------------------------------------------------------------------- /.circleci/release_bintray.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -o errexit 4 | set -o nounset 5 | set +o xtrace # ! 6 | 7 | shopt -s nullglob 8 | 9 | if [[ "$CIRCLE_BRANCH" != "master" ]]; then 10 | echo "Skipping deployment for pull requests" 11 | exit 0 12 | fi 13 | 14 | 15 | GIT_TAG=$(git describe --always --abbrev=0) 16 | 17 | 18 | for file in dist-x11-static/*.deb; do 19 | echo "Uploading '${file}' to Bintray" 20 | 21 | filename=$(basename "$file") 22 | curl \ 23 | -T "${file}" \ 24 | -H "X-Bintray-Package: pegasus-frontend" \ 25 | -H "X-Bintray-Version: ${GIT_TAG}" \ 26 | -H "X-Bintray-Publish: 1" \ 27 | -H "X-Bintray-Debian-Distribution: testing" \ 28 | -H "X-Bintray-Debian-Component: main" \ 29 | -H "X-Bintray-Debian-Architecture: amd64" \ 30 | -u "mmatyas:${BINTRAY_KEY}" \ 31 | "https://api.bintray.com/content/mmatyas/deb/pool/main/p/pegasus-frontend/${filename}" 32 | done 33 | -------------------------------------------------------------------------------- /.circleci/stage.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -o errexit 4 | set -o nounset 5 | set +o xtrace # ! 6 | 7 | 8 | pushd dist 9 | 10 | if [[ "$CIRCLE_BRANCH" != "master" ]]; then 11 | FFSEND_VER="v0.2.74" 12 | 13 | echo "Release uploading disabled for pull requests, uploading to Send instead" 14 | pushd /tmp 15 | curl -L -O https://github.com/mmatyas/pegasus-frontend/releases/download/alpha1/ffsend-${FFSEND_VER}-linux-x64-static 16 | chmod +x ffsend-${FFSEND_VER}-linux-x64-static 17 | popd 18 | 19 | for FILE in ./*; do 20 | timeout 2m /tmp/ffsend-${FFSEND_VER}-linux-x64-static upload $FILE || true 21 | done 22 | 23 | popd 24 | exit 0 25 | fi 26 | 27 | git config --global user.email "autodeploy@circleci.com" 28 | git config --global user.name "Circle CI" 29 | 30 | git init 31 | git remote add origin https://mmatyas:${GITHUB_TOKEN}@github.com/mmatyas/pegasus-deploy-staging.git 32 | git checkout -b continuous-${QT_TARGET} 33 | git add ./* 34 | git commit -m "Deployed from CircleCI" 35 | git push -f --set-upstream origin continuous-${QT_TARGET} 36 | 37 | popd 38 | -------------------------------------------------------------------------------- /.circleci/zip_linux.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -o errexit 4 | set -o nounset 5 | set -o xtrace 6 | 7 | zip -j dist/pegasus-fe_$(git describe --always)_${QT_TARGET}.zip \ 8 | installdir${INSTALL_BINDIR:-/opt/pegasus-frontend/}pegasus-fe \ 9 | README.md \ 10 | LICENSE.md 11 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: ["https://www.paypal.me/MatyasMustoha", "https://www.buymeacoffee.com/mmatyas"] 2 | patreon: matyasmustoha 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: 🎧 Discord Server 3 | url: https://discord.gg/KTtzP6y 4 | about: Would you like to chat with us? Feel free to join our Discord community! 5 | - name: 🕹️ RetroPie forum thread 6 | url: https://retropie.org.uk/forum/topic/9598/announcing-pegasus-frontend 7 | about: Tinkering with Raspberries and other board computers? Take a look at this thread! 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 🚀 Feature request 3 | about: I have a good idea to add for Pegasus 4 | labels: feature 5 | --- 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ignore build dir 2 | build*/ 3 | 4 | # ignore all dotfiles 5 | ./.* 6 | 7 | # except these 8 | !.gitignore 9 | !.qmake.conf 10 | !.appveyor.yml 11 | !.circleci/ 12 | !.travis/ 13 | !.github/ 14 | 15 | # ignore IDE project files 16 | *.pro.user 17 | *.kdev4 18 | *.workspace 19 | 20 | # ignore Qt generated files 21 | *.qmlc 22 | *.jsc 23 | *.autosave 24 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lang"] 2 | path = lang 3 | url = https://github.com/mmatyas/pegasus-frontend-translations.git 4 | branch = master 5 | [submodule "src/themes/pegasus-theme-grid"] 6 | path = src/themes/pegasus-theme-grid 7 | url = https://github.com/mmatyas/pegasus-theme-grid.git 8 | [submodule "thirdparty/SortFilterProxyModel"] 9 | path = thirdparty/SortFilterProxyModel 10 | url = https://github.com/mmatyas/SortFilterProxyModel.git 11 | -------------------------------------------------------------------------------- /.qmake.conf: -------------------------------------------------------------------------------- 1 | TOP_SRCDIR=$$PWD 2 | TOP_BUILDDIR=$$shadowed($$PWD) 3 | 4 | GIT_REVISION = $$system(git \ 5 | --git-dir \"$${TOP_SRCDIR}/.git\" \ 6 | --work-tree \"$${TOP_SRCDIR}\" \ 7 | describe \ 8 | --always --dirty) 9 | 10 | GIT_DATE = $$system(git \ 11 | --git-dir \"$${TOP_SRCDIR}/.git\" \ 12 | --work-tree \"$${TOP_SRCDIR}\" \ 13 | log \ 14 | -1 \ 15 | --format=%cd \ 16 | --date=short) 17 | 18 | GIT_COMMIT_CNT = $$system(git \ 19 | --git-dir \"$${TOP_SRCDIR}/.git\" \ 20 | --work-tree \"$${TOP_SRCDIR}\" \ 21 | rev-list \ 22 | --count HEAD) 23 | 24 | COMMON_DEFINES = \ 25 | QT_DEPRECATED_WARNINGS \ 26 | QT_DISABLE_DEPRECATED_BEFORE=0x050C00 \ 27 | QT_NO_CAST_TO_ASCII \ 28 | QT_NO_PROCESS_COMBINED_ARGUMENT_START \ 29 | QT_NO_URL_CAST_FROM_STRING \ 30 | GIT_REVISION=\\\"$$GIT_REVISION\\\" \ 31 | GIT_DATE=\\\"$$GIT_DATE\\\" 32 | -------------------------------------------------------------------------------- /.travis/script__build_with_lcov.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -o errexit 4 | set -o nounset 5 | 6 | QT_DIR=/opt/${QT_VERSION}_${QT_TARGET}_hosttools 7 | if [[ ! -d "$QT_DIR" ]]; then 8 | QT_DIR=/opt/${QT_VERSION}_${QT_TARGET} 9 | fi 10 | 11 | 12 | ${QT_DIR}/bin/qmake --version 13 | ${QT_DIR}/bin/qmake . \ 14 | ENABLE_APNG=1 \ 15 | USE_SDL_GAMEPAD=1 \ 16 | QMAKE_CXXFLAGS="-g -O0 --coverage -fprofile-arcs -ftest-coverage" \ 17 | QMAKE_LDFLAGS="-g -O0 --coverage -fprofile-arcs -ftest-coverage" \ 18 | LIBS+="-lgcov" \ 19 | CONFIG+=debug 20 | make 21 | 22 | 23 | lcov --compat-libtool -i -c -d . -o coverage.pre 24 | make check 25 | lcov --compat-libtool -c -d . -o coverage.post 26 | 27 | 28 | lcov --compat-libtool -a coverage.pre -a coverage.post -o coverage.total 29 | ROOTDIR="$(pwd)" 30 | sed -i "s|SF:$ROOTDIR/|SF:|g" coverage.total 31 | 32 | lcov --compat-libtool -r coverage.total \ 33 | '/usr/*' \ 34 | '/opt/*' \ 35 | '*/moc_*' \ 36 | '*/qrc_*' \ 37 | '*/test_*' \ 38 | '*/bench_*' \ 39 | 'src/app/*' \ 40 | 'tests/*' \ 41 | 'thirdparty/*' \ 42 | '*/pegasus-fe_plugin_import.cpp' \ 43 | '*/pegasus-fe_qml_plugin_import.cpp' \ 44 | '*/qmlcache_loader.cpp' \ 45 | -o coverage.clean 46 | -------------------------------------------------------------------------------- /assets/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include(PegasusQtUtils) 2 | pegasus_require_qt(COMPONENTS Core) 3 | 4 | qt_add_big_resources(PEGASUS_ASSETS_SRC assets.qrc) 5 | add_library(pegasus-assets ${PEGASUS_ASSETS_SRC}) 6 | 7 | include(PegasusCommonProps) 8 | pegasus_add_common_props_optimized(pegasus-assets) 9 | -------------------------------------------------------------------------------- /assets/assets.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | fonts/RobotoCondensed-Bold.ttf 4 | fonts/RobotoCondensed-Regular.ttf 5 | fonts/RobotoMono-Regular.ttf 6 | fonts/Roboto-Bold.ttf 7 | fonts/Roboto-Regular.ttf 8 | icon.png 9 | buttons/ps_circle.png 10 | buttons/ps_cross.png 11 | buttons/ps_square.png 12 | buttons/ps_triangle.png 13 | buttons/xb_a.png 14 | buttons/xb_b.png 15 | buttons/xb_x.png 16 | buttons/xb_y.png 17 | sdl2/gamecontrollerdb_204.txt 18 | sdl2/gamecontrollerdb_205.txt 19 | sdl2/gamecontrollerdb_209.txt 20 | sdl2/gamecontrollerdb_2016.txt 21 | 22 | 23 | -------------------------------------------------------------------------------- /assets/buttons/ps_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/buttons/ps_circle.png -------------------------------------------------------------------------------- /assets/buttons/ps_cross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/buttons/ps_cross.png -------------------------------------------------------------------------------- /assets/buttons/ps_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/buttons/ps_square.png -------------------------------------------------------------------------------- /assets/buttons/ps_triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/buttons/ps_triangle.png -------------------------------------------------------------------------------- /assets/buttons/xb_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/buttons/xb_a.png -------------------------------------------------------------------------------- /assets/buttons/xb_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/buttons/xb_b.png -------------------------------------------------------------------------------- /assets/buttons/xb_x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/buttons/xb_x.png -------------------------------------------------------------------------------- /assets/buttons/xb_y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/buttons/xb_y.png -------------------------------------------------------------------------------- /assets/fonts/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/fonts/Roboto-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/fonts/Roboto-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/RobotoCondensed-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/fonts/RobotoCondensed-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/RobotoCondensed-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/fonts/RobotoCondensed-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/RobotoMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/fonts/RobotoMono-Regular.ttf -------------------------------------------------------------------------------- /assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/assets/icon.png -------------------------------------------------------------------------------- /cmake/PegasusGitInfo.cmake: -------------------------------------------------------------------------------- 1 | execute_process(COMMAND 2 | git 3 | --git-dir "${PROJECT_SOURCE_DIR}/.git" 4 | --work-tree "${PROJECT_SOURCE_DIR}" 5 | describe 6 | --always 7 | --dirty 8 | OUTPUT_STRIP_TRAILING_WHITESPACE 9 | OUTPUT_VARIABLE PEGASUS_GIT_REVISION 10 | ) 11 | 12 | execute_process(COMMAND 13 | git 14 | --git-dir "${PROJECT_SOURCE_DIR}/.git" 15 | --work-tree "${PROJECT_SOURCE_DIR}" 16 | log -1 17 | --format=%cd 18 | --date=short 19 | OUTPUT_STRIP_TRAILING_WHITESPACE 20 | OUTPUT_VARIABLE PEGASUS_GIT_DATE 21 | ) 22 | 23 | execute_process(COMMAND 24 | git 25 | --git-dir "${PROJECT_SOURCE_DIR}/.git" 26 | --work-tree "${PROJECT_SOURCE_DIR}" 27 | rev-list 28 | --count HEAD 29 | OUTPUT_STRIP_TRAILING_WHITESPACE 30 | OUTPUT_VARIABLE PEGASUS_GIT_COMMIT_CNT 31 | ) 32 | -------------------------------------------------------------------------------- /cmake/PegasusPrettyPrint.cmake: -------------------------------------------------------------------------------- 1 | set(BOX_W 60) 2 | 3 | function(pegasus_print_boxline text) 4 | string(LENGTH "${text}" text_len) 5 | math(EXPR padding_len "${BOX_W} - 4 - ${text_len}") 6 | if(${padding_len} GREATER_EQUAL 0) 7 | string(REPEAT " " ${padding_len} padding) 8 | message("│ ${text}${padding} │") 9 | else() 10 | message("│ ${text}") 11 | endif() 12 | endfunction() 13 | 14 | function(pegasus_print_boxhead text) 15 | string(LENGTH "${text}" text_len) 16 | math(EXPR padding_len "${BOX_W} - 4 - ${text_len}") 17 | string(REPEAT "─" ${padding_len} padding) 18 | message("╭${padding} ${text} ╮") 19 | endfunction() 20 | 21 | function(pegasus_print_boxtail) 22 | math(EXPR edge_len "${BOX_W} - 2") 23 | string(REPEAT "─" ${edge_len} edge) 24 | message("╰${edge}╯") 25 | endfunction() 26 | 27 | function(pegasus_print_box) 28 | cmake_parse_arguments(BOX 29 | "" 30 | "TITLE" 31 | "CONTENT" 32 | ${ARGN}) 33 | 34 | pegasus_print_boxhead("${BOX_TITLE}") 35 | foreach(LINE IN LISTS BOX_CONTENT) 36 | pegasus_print_boxline("${LINE}") 37 | endforeach() 38 | pegasus_print_boxtail() 39 | endfunction() 40 | -------------------------------------------------------------------------------- /cmake/PegasusQtUtils.cmake: -------------------------------------------------------------------------------- 1 | # NOTE: This is a macro because `find_package` variables would go 2 | # out of scope at the end of functions 3 | macro(pegasus_require_qt) 4 | cmake_parse_arguments(QTREQ 5 | "" 6 | "" 7 | COMPONENTS 8 | ${ARGN}) 9 | 10 | find_package(Qt6 COMPONENTS ${QTREQ_COMPONENTS} QUIET) 11 | if (NOT Qt6_FOUND) 12 | find_package(Qt5 5.15 COMPONENTS ${QTREQ_COMPONENTS} REQUIRED) 13 | endif() 14 | endmacro() 15 | -------------------------------------------------------------------------------- /cmake/PegasusTargetPlatform.cmake: -------------------------------------------------------------------------------- 1 | function(create_platform_var_maybe varsuffix sysname) 2 | if("${CMAKE_SYSTEM_NAME}" MATCHES "${sysname}") 3 | set("PEGASUS_ON_${varsuffix}" ON CACHE INTERNAL "") 4 | endif() 5 | endfunction() 6 | 7 | 8 | create_platform_var_maybe("ANDROID" "Android") 9 | create_platform_var_maybe("WINDOWS" "Windows") 10 | create_platform_var_maybe("MACOS" "Darwin") 11 | if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") 12 | if("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "arm|aarch64") 13 | set(PEGASUS_ON_EGLFS ON) 14 | else() 15 | set(PEGASUS_ON_X11 ON) 16 | endif() 17 | endif() 18 | -------------------------------------------------------------------------------- /etc/branding/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/etc/branding/logo.png -------------------------------------------------------------------------------- /etc/branding/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /etc/promo/donate-coffee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/etc/promo/donate-coffee.png -------------------------------------------------------------------------------- /etc/promo/donate-patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/etc/promo/donate-patreon.png -------------------------------------------------------------------------------- /etc/promo/screenshot_alpha1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/etc/promo/screenshot_alpha1.jpg -------------------------------------------------------------------------------- /etc/promo/screenshot_alpha10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/etc/promo/screenshot_alpha10.jpg -------------------------------------------------------------------------------- /etc/promo/shader_demo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/etc/promo/shader_demo.jpg -------------------------------------------------------------------------------- /pegasus.pro: -------------------------------------------------------------------------------- 1 | REQ_QT_MAJOR = 5 2 | REQ_QT_MINOR = 12 3 | 4 | lessThan(QT_MAJOR_VERSION, $${REQ_QT_MAJOR}) | equals(QT_MAJOR_VERSION, $${REQ_QT_MAJOR}):lessThan(QT_MINOR_VERSION, $${REQ_QT_MINOR}) { 5 | message("Cannot build this project using Qt $$[QT_VERSION]") 6 | error("This project requires at least Qt $${REQ_QT_MAJOR}.$${REQ_QT_MINOR} or newer") 7 | } 8 | 9 | 10 | TEMPLATE = subdirs 11 | SUBDIRS += src thirdparty 12 | OTHER_FILES += .qmake.conf 13 | 14 | src.depends = thirdparty 15 | 16 | # FIXME: MAke sure the QT options of Backend inherit to the dependers 17 | qtHaveModule(testlib):!android { 18 | SUBDIRS += tests 19 | tests.depends = src 20 | tests.CONFIG = no_default_install 21 | } 22 | 23 | 24 | include($${TOP_SRCDIR}/src/deployment_vars.pri) 25 | include($${TOP_SRCDIR}/src/print_config.pri) 26 | -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(backend) 2 | add_subdirectory(frontend) 3 | add_subdirectory(app) 4 | -------------------------------------------------------------------------------- /src/app/app.pro: -------------------------------------------------------------------------------- 1 | TARGET = pegasus-fe 2 | CONFIG += c++11 warn_on exceptions_off rtti_off 3 | 4 | SOURCES += main.cpp 5 | DEFINES *= $${COMMON_DEFINES} 6 | 7 | RESOURCES += "$${TOP_SRCDIR}/assets/assets.qrc" 8 | OTHER_FILES += qmlplugins.qml 9 | 10 | 11 | # Linking 12 | 13 | include($${TOP_SRCDIR}/src/link_to_backend.pri) 14 | include($${TOP_SRCDIR}/src/link_to_frontend.pri) 15 | 16 | 17 | # Translations 18 | 19 | EXTRA_TRANSLATIONS = $$files($${TOP_SRCDIR}/lang/pegasus_*.ts) 20 | CONFIG += lrelease embed_translations 21 | 22 | 23 | # Deployment 24 | 25 | include(install.pri) 26 | -------------------------------------------------------------------------------- /src/app/platform/android/gradle.properties: -------------------------------------------------------------------------------- 1 | android.useAndroidX=true 2 | android.enableJetifier=true 3 | -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-anydpi-v26/icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-hdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/android/res/mipmap-hdpi/icon.png -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-hdpi/icon_fg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/android/res/mipmap-hdpi/icon_fg.png -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-ldpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/android/res/mipmap-ldpi/icon.png -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-mdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/android/res/mipmap-mdpi/icon.png -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-mdpi/icon_fg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/android/res/mipmap-mdpi/icon_fg.png -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-xhdpi/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/android/res/mipmap-xhdpi/banner.png -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-xhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/android/res/mipmap-xhdpi/icon.png -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-xhdpi/icon_fg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/android/res/mipmap-xhdpi/icon_fg.png -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-xxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/android/res/mipmap-xxhdpi/icon.png -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-xxhdpi/icon_fg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/android/res/mipmap-xxhdpi/icon_fg.png -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-xxxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/android/res/mipmap-xxxhdpi/icon.png -------------------------------------------------------------------------------- /src/app/platform/android/res/mipmap-xxxhdpi/icon_fg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/android/res/mipmap-xxxhdpi/icon_fg.png -------------------------------------------------------------------------------- /src/app/platform/android/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #333333 4 | 5 | -------------------------------------------------------------------------------- /src/app/platform/android/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /src/app/platform/android/res/xml/fileprovider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/app/platform/android/src/org/pegasus_frontend/android/LaunchFileProvider.java: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2021 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | package org.pegasus_frontend.android; 19 | 20 | import androidx.core.content.FileProvider; 21 | 22 | 23 | public class LaunchFileProvider extends FileProvider {} 24 | -------------------------------------------------------------------------------- /src/app/platform/linux/icons/128/org.pegasus_frontend.Pegasus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/linux/icons/128/org.pegasus_frontend.Pegasus.png -------------------------------------------------------------------------------- /src/app/platform/linux/icons/16/org.pegasus_frontend.Pegasus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/linux/icons/16/org.pegasus_frontend.Pegasus.png -------------------------------------------------------------------------------- /src/app/platform/linux/icons/32/org.pegasus_frontend.Pegasus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/linux/icons/32/org.pegasus_frontend.Pegasus.png -------------------------------------------------------------------------------- /src/app/platform/linux/icons/48/org.pegasus_frontend.Pegasus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/linux/icons/48/org.pegasus_frontend.Pegasus.png -------------------------------------------------------------------------------- /src/app/platform/linux/icons/64/org.pegasus_frontend.Pegasus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/linux/icons/64/org.pegasus_frontend.Pegasus.png -------------------------------------------------------------------------------- /src/app/platform/linux/org.pegasus_frontend.Pegasus.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.1 3 | Type=Application 4 | Name=Pegasus 5 | GenericName=Emulator Frontend 6 | Comment=A cross platform, customizable graphical frontend for launching emulators and managing your game collection. 7 | Exec=${INSTALL_BINDIR}/pegasus-fe 8 | Icon=org.pegasus_frontend.Pegasus 9 | Terminal=false 10 | Categories=Game;Emulator; 11 | Keywords=emulator;retro;game;videogame;video game;player; 12 | -------------------------------------------------------------------------------- /src/app/platform/linux/org.pegasus_frontend.Pegasus.desktop.qmake.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.1 3 | Type=Application 4 | Name=Pegasus 5 | GenericName=Emulator Frontend 6 | Comment=A cross platform, customizable graphical frontend for launching emulators and managing your game collection. 7 | Exec=$${INSTALL_BINDIR}/pegasus-fe 8 | Icon=org.pegasus_frontend.Pegasus 9 | Terminal=false 10 | Categories=Game;Player; 11 | Keywords=emulator;retro;game;videogame;video game;player; 12 | -------------------------------------------------------------------------------- /src/app/platform/macos/Info.plist.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleExecutable 6 | ${EXECUTABLE_NAME} 7 | CFBundleGetInfoString 8 | Created by Qt/QMake 9 | CFBundleIconFile 10 | ${ASSETCATALOG_COMPILER_APPICON_NAME} 11 | CFBundleIdentifier 12 | org.pegasus-frontend.macos 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ${QMAKE_PKGINFO_TYPEINFO} 17 | LSMinimumSystemVersion 18 | ${MACOSX_DEPLOYMENT_TARGET} 19 | LSApplicationCategoryType 20 | public.app-category.games 21 | LSUIPresentationMode 22 | 0 23 | NSPrincipalClass 24 | NSApplication 25 | NSHumanReadableCopyright 26 | Copyright (c) 2017-2020 Mátyás Mustoha 27 | NSSupportsAutomaticGraphicsSwitching 28 | 29 | NSHighResolutionCapable 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/app/platform/macos/pegasus-fe.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/macos/pegasus-fe.icns -------------------------------------------------------------------------------- /src/app/platform/windows/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/app/platform/windows/app_icon.ico -------------------------------------------------------------------------------- /src/app/qmlplugins.qml: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | // This file lists the QML modules which should be 19 | // included in a static build. It'll be read by qmake 20 | // during the configuration step. 21 | 22 | 23 | import QtQuick 2.0 24 | import QtQuick.Layouts 1.3 25 | import QtQuick.Particles 2.0 26 | import QtQuick.Shapes 1.15 27 | import QtQuick.Timeline 1.0 28 | import QtQuick.Window 2.0 29 | 30 | import QtGraphicalEffects 1.0 31 | import QtMultimedia 5.8 32 | 33 | import QtQml.Models 2.15 34 | import Qt.labs.qmlmodels 1.0 35 | 36 | 37 | Item {} 38 | -------------------------------------------------------------------------------- /src/backend/CliArgs.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | namespace backend { 21 | struct CliArgs { 22 | bool portable = false; 23 | bool silent = false; 24 | bool enable_menu_appclose = true; 25 | bool enable_menu_shutdown = true; 26 | bool enable_menu_suspend = true; 27 | bool enable_menu_reboot = true; 28 | bool enable_menu_settings = true; 29 | bool enable_gamepad_autoconfig = true; 30 | }; 31 | } // namespace backend 32 | -------------------------------------------------------------------------------- /src/backend/PegasusAssets.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | class QString; 21 | enum class AssetType : unsigned char; 22 | 23 | 24 | namespace pegasus_assets { 25 | 26 | AssetType str_to_type(const QString&); 27 | 28 | } // namespace pegasus_assets 29 | -------------------------------------------------------------------------------- /src/backend/ScriptRunner.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | class QStringList; 21 | 22 | 23 | enum class ScriptEvent : unsigned char { 24 | QUIT, 25 | REBOOT, 26 | SHUTDOWN, 27 | CONFIG_CHANGED, 28 | SETTINGS_CHANGED, 29 | CONTROLS_CHANGED, 30 | PROCESS_STARTED, 31 | PROCESS_FINISHED, 32 | }; 33 | 34 | 35 | /// A utility class for finding and running external scripts 36 | class ScriptRunner { 37 | public: 38 | static void run(ScriptEvent); 39 | static void run(ScriptEvent, const QStringList&); 40 | }; 41 | -------------------------------------------------------------------------------- /src/backend/backend.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = lib 2 | 3 | QT += qml quick sql 4 | CONFIG += c++11 staticlib warn_on exceptions_off 5 | android: QT += androidextras 6 | 7 | !isEmpty(USE_SDL_GAMEPAD)|!isEmpty(USE_SDL_POWER): include($${TOP_SRCDIR}/thirdparty/link_to_sdl.pri) 8 | 9 | isEmpty(USE_SDL_GAMEPAD): QT += gamepad 10 | 11 | !isEmpty(INSIDE_FLATPAK): DEFINES *= PEGASUS_INSIDE_FLATPAK 12 | msvc: DEFINES *= _USE_MATH_DEFINES 13 | 14 | 15 | SOURCES += \ 16 | Backend.cpp \ 17 | FrontendLayer.cpp \ 18 | PegasusAssets.cpp \ 19 | ProcessLauncher.cpp \ 20 | ScriptRunner.cpp \ 21 | Paths.cpp \ 22 | AppSettings.cpp \ 23 | Log.cpp \ 24 | 25 | HEADERS += \ 26 | Backend.h \ 27 | CliArgs.h \ 28 | FrontendLayer.h \ 29 | PegasusAssets.h \ 30 | ProcessLauncher.h \ 31 | ScriptRunner.h \ 32 | Paths.h \ 33 | AppSettings.h \ 34 | Log.h \ 35 | 36 | include(imggen/imggen.pri) 37 | include(model/model.pri) 38 | include(parsers/parsers.pri) 39 | include(platform/platform.pri) 40 | include(providers/providers.pri) 41 | include(types/types.pri) 42 | include(utils/utils.pri) 43 | 44 | DEFINES *= $${COMMON_DEFINES} 45 | 46 | include($${TOP_SRCDIR}/thirdparty/thirdparty.pri) 47 | -------------------------------------------------------------------------------- /src/backend/imggen/BlurhashProvider.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include 21 | 22 | 23 | class BlurhashProvider : public QQuickImageProvider { 24 | public: 25 | BlurhashProvider(); 26 | 27 | QImage requestImage(const QString&, QSize*, const QSize&) override; 28 | }; 29 | -------------------------------------------------------------------------------- /src/backend/imggen/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | target_sources(pegasus-backend PRIVATE 2 | BlurhashProvider.cpp 3 | BlurhashProvider.h 4 | ) 5 | -------------------------------------------------------------------------------- /src/backend/imggen/imggen.pri: -------------------------------------------------------------------------------- 1 | HEADERS += \ 2 | $$PWD/BlurhashProvider.h 3 | 4 | SOURCES += \ 5 | $$PWD/BlurhashProvider.cpp 6 | -------------------------------------------------------------------------------- /src/backend/model/device/device.pri: -------------------------------------------------------------------------------- 1 | HEADERS += $$PWD/DeviceInfo.h 2 | SOURCES += $$PWD/DeviceInfo.cpp 3 | -------------------------------------------------------------------------------- /src/backend/model/gaming/CollectionListModel.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2022 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include "model/ObjectListModel.h" 21 | 22 | namespace model { class Collection; } 23 | 24 | 25 | namespace model { 26 | class CollectionListModel : public TypeListModel { 27 | public: 28 | explicit CollectionListModel(QObject* parent = nullptr); 29 | 30 | QHash roleNames() const override; 31 | QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; 32 | }; 33 | } // namespace model 34 | -------------------------------------------------------------------------------- /src/backend/model/gaming/gaming.pri: -------------------------------------------------------------------------------- 1 | HEADERS += \ 2 | $$PWD/Assets.h \ 3 | $$PWD/Collection.h \ 4 | $$PWD/CollectionListModel.h \ 5 | $$PWD/Game.h \ 6 | $$PWD/GameFile.h \ 7 | $$PWD/GameFileListModel.h \ 8 | $$PWD/GameListModel.h 9 | 10 | SOURCES += \ 11 | $$PWD/Assets.cpp \ 12 | $$PWD/Collection.cpp \ 13 | $$PWD/CollectionListModel.cpp \ 14 | $$PWD/Game.cpp \ 15 | $$PWD/GameFile.cpp \ 16 | $$PWD/GameFileListModel.cpp \ 17 | $$PWD/GameListModel.cpp 18 | -------------------------------------------------------------------------------- /src/backend/model/internal/GamepadManagerBackend.cpp: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2019 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #include "GamepadManagerBackend.h" 19 | 20 | 21 | namespace model { 22 | 23 | GamepadManagerBackend::GamepadManagerBackend(QObject* parent) 24 | : QObject(parent) 25 | {} 26 | 27 | GamepadManagerBackend::~GamepadManagerBackend() 28 | { 29 | stop(); 30 | } 31 | 32 | } // namespace model 33 | -------------------------------------------------------------------------------- /src/backend/model/internal/Internal.cpp: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #include "Internal.h" 19 | 20 | #include "CliArgs.h" 21 | 22 | 23 | namespace model { 24 | 25 | Internal::Internal(const backend::CliArgs& args, QObject* parent) 26 | : QObject(parent) 27 | , m_meta(args) 28 | {} 29 | 30 | } // namespace model 31 | -------------------------------------------------------------------------------- /src/backend/model/internal/internal.pri: -------------------------------------------------------------------------------- 1 | HEADERS += \ 2 | $$PWD/Gamepad.h \ 3 | $$PWD/GamepadAxisNavigation.h \ 4 | $$PWD/GamepadButtonNavigation.h \ 5 | $$PWD/GamepadListModel.h \ 6 | $$PWD/GamepadManager.h \ 7 | $$PWD/GamepadManagerBackend.h \ 8 | $$PWD/Internal.h \ 9 | $$PWD/Meta.h \ 10 | $$PWD/ScannerState.h \ 11 | $$PWD/System.h \ 12 | 13 | SOURCES += \ 14 | $$PWD/Gamepad.cpp \ 15 | $$PWD/GamepadAxisNavigation.cpp \ 16 | $$PWD/GamepadButtonNavigation.cpp \ 17 | $$PWD/GamepadListModel.cpp \ 18 | $$PWD/GamepadManager.cpp \ 19 | $$PWD/GamepadManagerBackend.cpp \ 20 | $$PWD/Internal.cpp \ 21 | $$PWD/Meta.cpp \ 22 | $$PWD/ScannerState.cpp \ 23 | $$PWD/System.cpp \ 24 | 25 | !isEmpty(USE_SDL_GAMEPAD) { 26 | HEADERS += $$PWD/GamepadManagerSDL2.h 27 | SOURCES += $$PWD/GamepadManagerSDL2.cpp 28 | } else { 29 | HEADERS += $$PWD/GamepadManagerQt.h 30 | SOURCES += $$PWD/GamepadManagerQt.cpp 31 | } 32 | 33 | include(settings/settings.pri) 34 | -------------------------------------------------------------------------------- /src/backend/model/internal/settings/settings.pri: -------------------------------------------------------------------------------- 1 | HEADERS += \ 2 | $$PWD/KeyEditor.h \ 3 | $$PWD/Locales.h \ 4 | $$PWD/Providers.h \ 5 | $$PWD/Settings.h \ 6 | $$PWD/Themes.h \ 7 | 8 | SOURCES += \ 9 | $$PWD/KeyEditor.cpp \ 10 | $$PWD/Locales.cpp \ 11 | $$PWD/Providers.cpp \ 12 | $$PWD/Settings.cpp \ 13 | $$PWD/Themes.cpp \ 14 | -------------------------------------------------------------------------------- /src/backend/model/keys/keys.pri: -------------------------------------------------------------------------------- 1 | HEADERS += \ 2 | $$PWD/Key.h \ 3 | $$PWD/Keys.h \ 4 | 5 | SOURCES += \ 6 | $$PWD/Key.cpp \ 7 | $$PWD/Keys.cpp \ 8 | -------------------------------------------------------------------------------- /src/backend/model/memory/memory.pri: -------------------------------------------------------------------------------- 1 | HEADERS += \ 2 | $$PWD/Memory.h 3 | 4 | SOURCES += \ 5 | $$PWD/Memory.cpp 6 | -------------------------------------------------------------------------------- /src/backend/model/model.pri: -------------------------------------------------------------------------------- 1 | SOURCES += $$PWD/Api.cpp 2 | HEADERS += \ 3 | $$PWD/Api.h \ 4 | $$PWD/ObjectListModel.h 5 | 6 | include(device/device.pri) 7 | include(gaming/gaming.pri) 8 | include(internal/internal.pri) 9 | include(keys/keys.pri) 10 | include(memory/memory.pri) 11 | -------------------------------------------------------------------------------- /src/backend/parsers/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | target_sources(pegasus-backend PRIVATE 2 | MetaFile.cpp 3 | MetaFile.h 4 | SettingsFile.cpp 5 | SettingsFile.h 6 | ) 7 | -------------------------------------------------------------------------------- /src/backend/parsers/parsers.pri: -------------------------------------------------------------------------------- 1 | HEADERS += \ 2 | $$PWD/MetaFile.h \ 3 | $$PWD/SettingsFile.h \ 4 | 5 | SOURCES += \ 6 | $$PWD/MetaFile.cpp \ 7 | $$PWD/SettingsFile.cpp \ 8 | -------------------------------------------------------------------------------- /src/backend/platform/AndroidAppIconProvider.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include 21 | 22 | 23 | class AndroidAppIconProvider : public QQuickImageProvider { 24 | public: 25 | AndroidAppIconProvider(); 26 | 27 | QPixmap requestPixmap(const QString&, QSize*, const QSize&) override; 28 | }; 29 | -------------------------------------------------------------------------------- /src/backend/platform/AndroidHelpers.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2019 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include 21 | 22 | 23 | namespace android { 24 | 25 | const char* jni_classname(); 26 | 27 | QString primary_storage_path(); 28 | QStringList storage_paths(); 29 | bool has_external_storage_access(); 30 | 31 | QStringList granted_paths(); 32 | void request_saf_permission(const std::function&); 33 | 34 | QString run_am_call(const QStringList&); 35 | QString to_content_uri(const QString&); 36 | QString to_document_uri(const QString&); 37 | 38 | } // namespace android 39 | -------------------------------------------------------------------------------- /src/backend/platform/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | target_sources(pegasus-backend PRIVATE 2 | PowerCommands.h 3 | TerminalKbd.cpp 4 | TerminalKbd.h 5 | ) 6 | 7 | 8 | if(PEGASUS_ON_ANDROID) 9 | target_sources(pegasus-backend PRIVATE 10 | AndroidAppIconProvider.cpp 11 | AndroidAppIconProvider.h 12 | AndroidHelpers.cpp 13 | AndroidHelpers.h 14 | ) 15 | endif() 16 | 17 | 18 | # Select power manager implementation 19 | 20 | if(PEGASUS_ON_X11 OR PEGASUS_ON_EGLFS) 21 | target_sources(pegasus-backend PRIVATE PowerCommands_linux.cpp) 22 | set(POWER_IMPL_NAME "Linux" CACHE INTERNAL "") 23 | elseif(PEGASUS_ON_WINDOWS) 24 | target_sources(pegasus-backend PRIVATE PowerCommands_win.cpp) 25 | set(POWER_IMPL_NAME "Windows" CACHE INTERNAL "") 26 | elseif(PEGASUS_ON_MACOS) 27 | target_sources(pegasus-backend PRIVATE PowerCommands_mac.cpp) 28 | set(POWER_IMPL_NAME "macOS" CACHE INTERNAL "") 29 | else() 30 | target_sources(pegasus-backend PRIVATE PowerCommands_unimpl.cpp) 31 | set(POWER_IMPL_NAME "Disabled" CACHE INTERNAL "") 32 | endif() 33 | -------------------------------------------------------------------------------- /src/backend/platform/PowerCommands.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | 21 | namespace platform { 22 | /// Contains the implementation of platform-specific system calls, 23 | /// such as reboot or shutdown 24 | namespace power { 25 | 26 | void reboot(); 27 | void shutdown(); 28 | void suspend(); 29 | 30 | } // namespace power 31 | } // namespace platform 32 | -------------------------------------------------------------------------------- /src/backend/platform/TerminalKbd.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2018-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | 21 | namespace TerminalKbd { 22 | void on_startup(); 23 | void enable(); 24 | void disable(); 25 | } // namespace TerminalKbd 26 | -------------------------------------------------------------------------------- /src/backend/platform/platform.pri: -------------------------------------------------------------------------------- 1 | HEADERS += \ 2 | $$PWD/PowerCommands.h \ 3 | $$PWD/TerminalKbd.h \ 4 | 5 | SOURCES += \ 6 | $$PWD/TerminalKbd.cpp \ 7 | 8 | 9 | win32 { 10 | SOURCES += $$PWD/PowerCommands_win.cpp 11 | } 12 | else:unix:!android { 13 | macx: SOURCES += $$PWD/PowerCommands_mac.cpp 14 | else: SOURCES += $$PWD/PowerCommands_linux.cpp 15 | } 16 | else { 17 | SOURCES += $$PWD/PowerCommands_unimpl.cpp 18 | } 19 | 20 | android { 21 | HEADERS += \ 22 | $$PWD/AndroidAppIconProvider.h \ 23 | $$PWD/AndroidHelpers.h 24 | 25 | SOURCES += \ 26 | $$PWD/AndroidAppIconProvider.cpp \ 27 | $$PWD/AndroidHelpers.cpp 28 | } 29 | -------------------------------------------------------------------------------- /src/backend/providers/android_apps/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | NAME "Android Apps" 3 | CXXID ANDROIDAPPS 4 | SOURCES 5 | AndroidAppsMetadata.cpp 6 | AndroidAppsMetadata.h 7 | AndroidAppsProvider.cpp 8 | AndroidAppsProvider.h 9 | USES_JSON_CACHE 10 | PLATFORMS 11 | ANDROID 12 | ) 13 | -------------------------------------------------------------------------------- /src/backend/providers/android_apps/android.pri: -------------------------------------------------------------------------------- 1 | ENABLED_COMPATS *= "Android Apps" 2 | USES_JSON_CACHE = yes 3 | 4 | DEFINES *= WITH_COMPAT_ANDROIDAPPS 5 | 6 | HEADERS += \ 7 | $$PWD/AndroidAppsProvider.h \ 8 | $$PWD/AndroidAppsMetadata.h \ 9 | 10 | SOURCES += \ 11 | $$PWD/AndroidAppsProvider.cpp \ 12 | $$PWD/AndroidAppsMetadata.cpp \ 13 | -------------------------------------------------------------------------------- /src/backend/providers/es2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | NAME "EmulationStation" 3 | CXXID ES2 4 | SOURCES 5 | Es2Games.cpp 6 | Es2Games.h 7 | Es2Metadata.cpp 8 | Es2Metadata.h 9 | Es2Provider.cpp 10 | Es2Provider.h 11 | Es2Systems.cpp 12 | Es2Systems.h 13 | PLATFORMS 14 | WINDOWS 15 | MACOS 16 | X11 17 | EGLFS 18 | ) 19 | -------------------------------------------------------------------------------- /src/backend/providers/es2/Es2Provider.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include "providers/Provider.h" 21 | 22 | 23 | namespace providers { 24 | namespace es2 { 25 | 26 | class Es2Provider : public Provider { 27 | Q_OBJECT 28 | 29 | public: 30 | explicit Es2Provider(QObject* parent = nullptr); 31 | 32 | Provider& run(SearchContext&) final; 33 | }; 34 | 35 | } // namespace es2 36 | } // namespace providers 37 | -------------------------------------------------------------------------------- /src/backend/providers/es2/Es2Systems.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include 21 | #include 22 | 23 | 24 | namespace providers { 25 | namespace es2 { 26 | 27 | struct SystemEntry { 28 | QString name; 29 | QString shortname; 30 | QString path; 31 | QString extensions; 32 | QString platforms; 33 | QString launch_cmd; 34 | }; 35 | 36 | 37 | std::vector find_systems(const QString&, const std::vector&); 38 | 39 | } // namespace es2 40 | } // namespace providers 41 | -------------------------------------------------------------------------------- /src/backend/providers/es2/es2.pri: -------------------------------------------------------------------------------- 1 | ENABLED_COMPATS += EmulationStation 2 | 3 | DEFINES *= WITH_COMPAT_ES2 4 | 5 | HEADERS += \ 6 | $$PWD/Es2Games.h \ 7 | $$PWD/Es2Metadata.h \ 8 | $$PWD/Es2Provider.h \ 9 | $$PWD/Es2Systems.h \ 10 | 11 | SOURCES += \ 12 | $$PWD/Es2Games.cpp \ 13 | $$PWD/Es2Metadata.cpp \ 14 | $$PWD/Es2Provider.cpp \ 15 | $$PWD/Es2Systems.cpp \ 16 | -------------------------------------------------------------------------------- /src/backend/providers/gog/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | NAME "GOG" 3 | CXXID GOG 4 | SOURCES 5 | GogGamelist.cpp 6 | GogGamelist.h 7 | GogMetadata.cpp 8 | GogMetadata.h 9 | GogProvider.cpp 10 | GogProvider.h 11 | USES_JSON_CACHE 12 | PLATFORMS 13 | WINDOWS 14 | X11 15 | ) 16 | -------------------------------------------------------------------------------- /src/backend/providers/gog/GogProvider.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include "providers/Provider.h" 21 | 22 | 23 | namespace providers { 24 | namespace gog { 25 | 26 | class GogProvider : public Provider { 27 | Q_OBJECT 28 | 29 | public: 30 | explicit GogProvider(QObject* parent = nullptr); 31 | 32 | Provider& run(SearchContext&) final; 33 | }; 34 | 35 | } // namespace gog 36 | } // namespace providers 37 | -------------------------------------------------------------------------------- /src/backend/providers/gog/gog.pri: -------------------------------------------------------------------------------- 1 | ENABLED_COMPATS += GOG 2 | USES_JSON_CACHE = yes 3 | 4 | DEFINES *= WITH_COMPAT_GOG 5 | 6 | HEADERS += \ 7 | $$PWD/GogGamelist.h \ 8 | $$PWD/GogMetadata.h \ 9 | $$PWD/GogProvider.h \ 10 | 11 | SOURCES += \ 12 | $$PWD/GogGamelist.cpp \ 13 | $$PWD/GogMetadata.cpp \ 14 | $$PWD/GogProvider.cpp \ 15 | -------------------------------------------------------------------------------- /src/backend/providers/launchbox/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | NAME "LaunchBox" 3 | CXXID LAUNCHBOX 4 | SOURCES 5 | LaunchBoxAssets.cpp 6 | LaunchBoxAssets.h 7 | LaunchBoxEmulatorsXml.cpp 8 | LaunchBoxEmulatorsXml.h 9 | LaunchBoxGamelistXml.cpp 10 | LaunchBoxGamelistXml.h 11 | LaunchBoxPlatformsXml.cpp 12 | LaunchBoxPlatformsXml.h 13 | LaunchBoxProvider.cpp 14 | LaunchBoxProvider.h 15 | LaunchBoxXml.cpp 16 | LaunchBoxXml.h 17 | PLATFORMS 18 | WINDOWS 19 | ) 20 | -------------------------------------------------------------------------------- /src/backend/providers/launchbox/LaunchBoxPlatformsXml.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include 21 | 22 | class QDir; 23 | class QString; 24 | 25 | 26 | namespace providers { 27 | namespace launchbox { 28 | 29 | struct Platform; 30 | std::vector find_platforms(const QString&, const QDir&); 31 | 32 | } // namespace launchbox 33 | } // namespace providers 34 | -------------------------------------------------------------------------------- /src/backend/providers/launchbox/LaunchBoxProvider.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include "providers/Provider.h" 21 | 22 | 23 | namespace providers { 24 | namespace launchbox { 25 | 26 | class LaunchboxProvider : public Provider { 27 | Q_OBJECT 28 | 29 | public: 30 | explicit LaunchboxProvider(QObject* parent = nullptr); 31 | 32 | Provider& run(providers::SearchContext&) final; 33 | }; 34 | 35 | } // namespace launchbox 36 | } // namespace providers 37 | -------------------------------------------------------------------------------- /src/backend/providers/launchbox/launchbox.pri: -------------------------------------------------------------------------------- 1 | ENABLED_COMPATS += LaunchBox 2 | 3 | DEFINES *= WITH_COMPAT_LAUNCHBOX 4 | 5 | HEADERS += \ 6 | $$PWD/LaunchBoxAssets.h \ 7 | $$PWD/LaunchBoxEmulatorsXml.h \ 8 | $$PWD/LaunchBoxGamelistXml.h \ 9 | $$PWD/LaunchBoxPlatformsXml.h \ 10 | $$PWD/LaunchBoxProvider.h \ 11 | $$PWD/LaunchBoxXml.h 12 | 13 | SOURCES += \ 14 | $$PWD/LaunchBoxAssets.cpp \ 15 | $$PWD/LaunchBoxEmulatorsXml.cpp \ 16 | $$PWD/LaunchBoxGamelistXml.cpp \ 17 | $$PWD/LaunchBoxPlatformsXml.cpp \ 18 | $$PWD/LaunchBoxProvider.cpp \ 19 | $$PWD/LaunchBoxXml.cpp 20 | -------------------------------------------------------------------------------- /src/backend/providers/logiqx/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | NAME "Logiqx" 3 | CXXID LOGIQX 4 | SOURCES 5 | LogiqxProvider.cpp 6 | LogiqxProvider.h 7 | PLATFORMS 8 | ALL 9 | ) 10 | -------------------------------------------------------------------------------- /src/backend/providers/logiqx/LogiqxProvider.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include "providers/Provider.h" 21 | 22 | 23 | namespace providers { 24 | namespace logiqx { 25 | 26 | class LogiqxProvider : public Provider { 27 | Q_OBJECT 28 | 29 | public: 30 | explicit LogiqxProvider(QObject* parent = nullptr); 31 | 32 | Provider& run(SearchContext&) final; 33 | }; 34 | 35 | } // namespace logiqx 36 | } // namespace providers 37 | -------------------------------------------------------------------------------- /src/backend/providers/logiqx/logiqx.pri: -------------------------------------------------------------------------------- 1 | ENABLED_COMPATS += "Logiqx" 2 | 3 | DEFINES *= WITH_COMPAT_LOGIQX 4 | 5 | HEADERS += $$PWD/LogiqxProvider.h 6 | SOURCES += $$PWD/LogiqxProvider.cpp 7 | -------------------------------------------------------------------------------- /src/backend/providers/lutris/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | NAME "Lutris" 3 | CXXID LUTRIS 4 | SOURCES 5 | LutrisProvider.cpp 6 | LutrisProvider.h 7 | PLATFORMS 8 | X11 9 | ) 10 | -------------------------------------------------------------------------------- /src/backend/providers/lutris/LutrisProvider.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include "providers/Provider.h" 21 | 22 | 23 | namespace providers { 24 | namespace lutris { 25 | 26 | class LutrisProvider : public Provider { 27 | Q_OBJECT 28 | 29 | public: 30 | explicit LutrisProvider(QObject* parent = nullptr); 31 | 32 | Provider& run(SearchContext&) final; 33 | }; 34 | 35 | } // namespace lutris 36 | } // namespace providers 37 | -------------------------------------------------------------------------------- /src/backend/providers/lutris/lutris.pri: -------------------------------------------------------------------------------- 1 | ENABLED_COMPATS *= "Lutris" 2 | 3 | DEFINES *= WITH_COMPAT_LUTRIS 4 | 5 | HEADERS += \ 6 | $$PWD/LutrisProvider.h \ 7 | 8 | SOURCES += \ 9 | $$PWD/LutrisProvider.cpp \ 10 | -------------------------------------------------------------------------------- /src/backend/providers/pegasus_favorites/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | INTERNAL 3 | SOURCES 4 | Favorites.cpp 5 | Favorites.h 6 | PLATFORMS 7 | ALL 8 | ) 9 | -------------------------------------------------------------------------------- /src/backend/providers/pegasus_favorites/pegasus_favorites.pri: -------------------------------------------------------------------------------- 1 | HEADERS += $$PWD/Favorites.h 2 | SOURCES += $$PWD/Favorites.cpp 3 | -------------------------------------------------------------------------------- /src/backend/providers/pegasus_media/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | INTERNAL 3 | SOURCES 4 | MediaProvider.cpp 5 | MediaProvider.h 6 | PLATFORMS 7 | ALL 8 | ) 9 | -------------------------------------------------------------------------------- /src/backend/providers/pegasus_media/MediaProvider.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include "providers/Provider.h" 21 | 22 | 23 | namespace providers { 24 | namespace media { 25 | 26 | class MediaProvider : public Provider { 27 | Q_OBJECT 28 | 29 | public: 30 | explicit MediaProvider(QObject* parent = nullptr); 31 | 32 | Provider& run(SearchContext&) final; 33 | }; 34 | 35 | } // namespace media 36 | } // namespace providers 37 | -------------------------------------------------------------------------------- /src/backend/providers/pegasus_media/pegasus_media.pri: -------------------------------------------------------------------------------- 1 | HEADERS += \ 2 | $$PWD/MediaProvider.h 3 | 4 | SOURCES += \ 5 | $$PWD/MediaProvider.cpp 6 | -------------------------------------------------------------------------------- /src/backend/providers/pegasus_metadata/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | INTERNAL 3 | SOURCES 4 | PegasusFilter.cpp 5 | PegasusFilter.h 6 | PegasusMetadata.cpp 7 | PegasusMetadata.h 8 | PegasusProvider.cpp 9 | PegasusProvider.h 10 | PLATFORMS 11 | ALL 12 | ) 13 | -------------------------------------------------------------------------------- /src/backend/providers/pegasus_metadata/PegasusProvider.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include "providers/Provider.h" 21 | 22 | 23 | namespace providers { 24 | namespace pegasus { 25 | 26 | class PegasusProvider : public Provider { 27 | Q_OBJECT 28 | 29 | public: 30 | explicit PegasusProvider(QObject* parent = nullptr); 31 | 32 | Provider& run(SearchContext&) final; 33 | }; 34 | 35 | } // namespace pegasus 36 | } // namespace providers 37 | -------------------------------------------------------------------------------- /src/backend/providers/pegasus_metadata/pegasus_metadata.pri: -------------------------------------------------------------------------------- 1 | HEADERS += \ 2 | $$PWD/PegasusFilter.h \ 3 | $$PWD/PegasusMetadata.h \ 4 | $$PWD/PegasusProvider.h \ 5 | 6 | SOURCES += \ 7 | $$PWD/PegasusFilter.cpp \ 8 | $$PWD/PegasusMetadata.cpp \ 9 | $$PWD/PegasusProvider.cpp \ 10 | -------------------------------------------------------------------------------- /src/backend/providers/pegasus_playtime/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | INTERNAL 3 | SOURCES 4 | PlaytimeStats.cpp 5 | PlaytimeStats.h 6 | PLATFORMS 7 | ALL 8 | ) 9 | -------------------------------------------------------------------------------- /src/backend/providers/pegasus_playtime/pegasus_playtime.pri: -------------------------------------------------------------------------------- 1 | HEADERS += $$PWD/PlaytimeStats.h 2 | SOURCES += $$PWD/PlaytimeStats.cpp 3 | -------------------------------------------------------------------------------- /src/backend/providers/playnite/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | NAME "Playnite" 3 | CXXID PLAYNITE 4 | SOURCES 5 | PlayniteComponents.h 6 | PlayniteEmulator.h 7 | PlayniteGame.h 8 | PlayniteJsonHelper.cpp 9 | PlayniteJsonHelper.h 10 | PlayniteLaunchHelper.cpp 11 | PlayniteLaunchHelper.h 12 | PlayniteMetadataParser.cpp 13 | PlayniteMetadataParser.h 14 | PlayniteMetadataParser.h 15 | PlayniteProvider.cpp 16 | PlayniteProvider.h 17 | PLATFORMS 18 | WINDOWS 19 | ) 20 | -------------------------------------------------------------------------------- /src/backend/providers/playnite/playnite.pri: -------------------------------------------------------------------------------- 1 | ENABLED_COMPATS += Playnite 2 | 3 | DEFINES *= WITH_COMPAT_PLAYNITE 4 | 5 | HEADERS += \ 6 | $$PWD/PlayniteProvider.h \ 7 | $$PWD/PlayniteJsonHelper.h \ 8 | $$PWD/PlayniteLaunchHelper.h \ 9 | $$PWD/PlayniteMetadataParser.h \ 10 | $$PWD/PlayniteEmulator.h \ 11 | $$PWD/PlayniteGame.h \ 12 | $$PWD/PlayniteComponents.h \ 13 | $$PWD/PlayniteMetadataParser.h \ 14 | 15 | 16 | SOURCES += \ 17 | $$PWD/PlayniteProvider.cpp \ 18 | $$PWD/PlayniteJsonHelper.cpp \ 19 | $$PWD/PlayniteLaunchHelper.cpp \ 20 | $$PWD/PlayniteMetadataParser.cpp \ 21 | -------------------------------------------------------------------------------- /src/backend/providers/skraper/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | NAME "Skraper" 3 | CXXID SKRAPER 4 | SOURCES 5 | SkraperAssetsProvider.cpp 6 | SkraperAssetsProvider.h 7 | PLATFORMS 8 | ALL 9 | ) 10 | -------------------------------------------------------------------------------- /src/backend/providers/skraper/SkraperAssetsProvider.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include "providers/Provider.h" 21 | 22 | 23 | namespace providers { 24 | namespace skraper { 25 | 26 | class SkraperAssetsProvider : public Provider { 27 | Q_OBJECT 28 | 29 | public: 30 | explicit SkraperAssetsProvider(QObject* parent = nullptr); 31 | 32 | Provider& run(SearchContext&) final; 33 | }; 34 | 35 | } // namespace skraper 36 | } // namespace providers 37 | -------------------------------------------------------------------------------- /src/backend/providers/skraper/skraper.pri: -------------------------------------------------------------------------------- 1 | ENABLED_COMPATS += "Skraper Assets" 2 | 3 | DEFINES *= WITH_COMPAT_SKRAPER 4 | 5 | HEADERS += $$PWD/SkraperAssetsProvider.h 6 | SOURCES += $$PWD/SkraperAssetsProvider.cpp 7 | -------------------------------------------------------------------------------- /src/backend/providers/steam/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_add_provider( 2 | NAME "Steam" 3 | CXXID STEAM 4 | SOURCES 5 | SteamGamelist.cpp 6 | SteamGamelist.h 7 | SteamMetadata.cpp 8 | SteamMetadata.h 9 | SteamProvider.cpp 10 | SteamProvider.h 11 | USES_JSON_CACHE 12 | PLATFORMS 13 | WINDOWS 14 | MACOS 15 | X11 16 | ) 17 | -------------------------------------------------------------------------------- /src/backend/providers/steam/SteamProvider.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2020 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include "providers/Provider.h" 21 | 22 | 23 | namespace providers { 24 | namespace steam { 25 | 26 | class SteamProvider : public Provider { 27 | Q_OBJECT 28 | 29 | public: 30 | explicit SteamProvider(QObject* parent = nullptr); 31 | 32 | Provider& run(SearchContext&) final; 33 | }; 34 | 35 | } // namespace steam 36 | } // namespace providers 37 | -------------------------------------------------------------------------------- /src/backend/providers/steam/steam.pri: -------------------------------------------------------------------------------- 1 | ENABLED_COMPATS += Steam 2 | USES_JSON_CACHE = yes 3 | 4 | DEFINES *= WITH_COMPAT_STEAM 5 | 6 | HEADERS += \ 7 | $$PWD/SteamGamelist.h \ 8 | $$PWD/SteamMetadata.h \ 9 | $$PWD/SteamProvider.h \ 10 | 11 | SOURCES += \ 12 | $$PWD/SteamGamelist.cpp \ 13 | $$PWD/SteamMetadata.cpp \ 14 | $$PWD/SteamProvider.cpp \ 15 | -------------------------------------------------------------------------------- /src/backend/types/AppCloseType.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | enum AppCloseType : unsigned char { 21 | QUIT, 22 | REBOOT, 23 | SHUTDOWN, 24 | SUSPEND, 25 | }; 26 | -------------------------------------------------------------------------------- /src/backend/types/AssetType.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | enum class AssetType : unsigned char { 21 | UNKNOWN, 22 | 23 | BOX_FRONT, 24 | BOX_BACK, 25 | BOX_SPINE, 26 | BOX_FULL, 27 | CARTRIDGE, 28 | LOGO, 29 | POSTER, 30 | 31 | ARCADE_MARQUEE, 32 | ARCADE_BEZEL, 33 | ARCADE_PANEL, 34 | ARCADE_CABINET_L, 35 | ARCADE_CABINET_R, 36 | 37 | UI_TILE, 38 | UI_BANNER, 39 | UI_STEAMGRID, 40 | BACKGROUND, 41 | MUSIC, 42 | 43 | SCREENSHOT, 44 | TITLESCREEN, 45 | VIDEO, 46 | }; 47 | -------------------------------------------------------------------------------- /src/backend/types/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | target_sources(pegasus-backend PRIVATE 2 | AppCloseType.h 3 | AssetType.h 4 | GamepadKeyId.h 5 | KeyEventType.h 6 | ) 7 | -------------------------------------------------------------------------------- /src/backend/types/KeyEventType.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | enum class KeyEvent : unsigned char { 21 | ACCEPT, 22 | CANCEL, 23 | DETAILS, 24 | FILTERS, 25 | NEXT_PAGE, 26 | PREV_PAGE, 27 | PAGE_UP, 28 | PAGE_DOWN, 29 | MAIN_MENU, 30 | // internal only: 31 | LEFT = 64, 32 | RIGHT, 33 | UP, 34 | DOWN, 35 | }; 36 | -------------------------------------------------------------------------------- /src/backend/types/types.pri: -------------------------------------------------------------------------------- 1 | HEADERS += \ 2 | $$PWD/AppCloseType.h \ 3 | $$PWD/AssetType.h \ 4 | $$PWD/KeyEventType.h \ 5 | $$PWD/GamepadKeyId.h \ 6 | -------------------------------------------------------------------------------- /src/backend/utils/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | target_sources(pegasus-backend PRIVATE 2 | CommandTokenizer.cpp 3 | CommandTokenizer.h 4 | DiskCachedNAM.cpp 5 | DiskCachedNAM.h 6 | FakeQKeyEvent.cpp 7 | FakeQKeyEvent.h 8 | FolderListModel.cpp 9 | FolderListModel.h 10 | HashMap.h 11 | KeySequenceTools.cpp 12 | KeySequenceTools.h 13 | MoveOnly.h 14 | NoCopyNoMove.h 15 | PathTools.cpp 16 | PathTools.h 17 | QmlHelpers.h 18 | SqliteDb.cpp 19 | SqliteDb.h 20 | StdHelpers.h 21 | StringHelpers.cpp 22 | StringHelpers.h 23 | ) 24 | -------------------------------------------------------------------------------- /src/backend/utils/CommandTokenizer.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2019 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include 21 | 22 | 23 | namespace utils { 24 | QStringList tokenize_command(const QString&); 25 | QString escape_command(const QString&); 26 | } // namespace 27 | -------------------------------------------------------------------------------- /src/backend/utils/DiskCachedNAM.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | class QNetworkAccessManager; 21 | class QObject; 22 | 23 | 24 | namespace utils { 25 | 26 | QNetworkAccessManager* create_disc_cached_nam(QObject* parent); 27 | 28 | } // namespace utils 29 | -------------------------------------------------------------------------------- /src/backend/utils/FakeQKeyEvent.cpp: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #include "FakeQKeyEvent.h" 19 | 20 | #include 21 | 22 | 23 | FakeQKeyEvent::FakeQKeyEvent() 24 | : event(QEvent::None, 0, Qt::NoModifier) 25 | {} 26 | -------------------------------------------------------------------------------- /src/backend/utils/FakeQKeyEvent.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include 21 | #include 22 | 23 | 24 | // Lightweight (and hacky) reproduction of KeyEvent 25 | // because the proper implementation is private in Qt 26 | class FakeQKeyEvent : public QObject { 27 | Q_OBJECT 28 | public: 29 | explicit FakeQKeyEvent(); 30 | 31 | QKeyEvent event; 32 | }; 33 | -------------------------------------------------------------------------------- /src/backend/utils/KeySequenceTools.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include 21 | #include 22 | 23 | 24 | namespace utils { 25 | QKeySequence qmlevent_to_keyseq(const QVariant&); 26 | } // namespace utils 27 | -------------------------------------------------------------------------------- /src/backend/utils/MoveOnly.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #define MOVE_ONLY(T) \ 21 | T(const T&) = delete; \ 22 | T& operator=(const T&) = delete; \ 23 | T(T&&) = default; \ 24 | T& operator=(T&&) = default; 25 | -------------------------------------------------------------------------------- /src/backend/utils/NoCopyNoMove.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #define NO_COPY_NO_MOVE(T) \ 21 | T(const T&) = delete; \ 22 | T& operator=(const T&) = delete; \ 23 | T(T&&) = delete; \ 24 | T& operator=(T&&) = delete; 25 | -------------------------------------------------------------------------------- /src/backend/utils/StringHelpers.h: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2022 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #pragma once 19 | 20 | #include 21 | 22 | class QString; 23 | 24 | 25 | namespace utils { 26 | std::string trimmed(const char* const str); 27 | 28 | bool as_bool(const QString& str, bool& success); 29 | } // namespace utils 30 | -------------------------------------------------------------------------------- /src/backend/utils/utils.pri: -------------------------------------------------------------------------------- 1 | HEADERS += \ 2 | $$PWD/CommandTokenizer.h \ 3 | $$PWD/DiskCachedNAM.h \ 4 | $$PWD/FakeQKeyEvent.h \ 5 | $$PWD/FolderListModel.h \ 6 | $$PWD/HashMap.h \ 7 | $$PWD/KeySequenceTools.h \ 8 | $$PWD/MoveOnly.h \ 9 | $$PWD/NoCopyNoMove.h \ 10 | $$PWD/PathTools.h \ 11 | $$PWD/QmlHelpers.h \ 12 | $$PWD/SqliteDb.h \ 13 | $$PWD/StdHelpers.h \ 14 | $$PWD/StringHelpers.h 15 | 16 | SOURCES += \ 17 | $$PWD/CommandTokenizer.cpp \ 18 | $$PWD/DiskCachedNAM.cpp \ 19 | $$PWD/FakeQKeyEvent.cpp \ 20 | $$PWD/FolderListModel.cpp \ 21 | $$PWD/KeySequenceTools.cpp \ 22 | $$PWD/PathTools.cpp \ 23 | $$PWD/SqliteDb.cpp \ 24 | $$PWD/StringHelpers.cpp 25 | -------------------------------------------------------------------------------- /src/deployment_vars.pri: -------------------------------------------------------------------------------- 1 | # This file sets the default values of the deployment variables; 2 | # these control where will your files end up when you call 3 | # `make install` (or similar). 4 | # 5 | # You can change the values by appending KEY=VALUE pairs to the 6 | # `qmake` call, or adding them as `Additional arguments` in 7 | # Qt Creator. 8 | 9 | 10 | # The base/fallback installation directory 11 | isEmpty(INSTALLDIR) { 12 | unix:!macx: INSTALLDIR = /opt/pegasus-frontend 13 | macx: INSTALLDIR = /usr/local/pegasus-frontend 14 | win32: INSTALLDIR = C:/pegasus-frontend 15 | } 16 | 17 | # Linux: installations are portable by default 18 | # Windows and Mac: installations should always be portable (one-dir) 19 | isEmpty(INSTALL_BINDIR): INSTALL_BINDIR = $${INSTALLDIR} 20 | -------------------------------------------------------------------------------- /src/frontend/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include(PegasusQtUtils) 2 | pegasus_require_qt(COMPONENTS 3 | Qml 4 | Quick 5 | QuickCompiler 6 | ) 7 | 8 | qtquick_compiler_add_resources(PEGASUS_QML_ASSETS 9 | frontend.qrc 10 | "${PROJECT_SOURCE_DIR}/src/qmlutils/qmlutils.qrc" # FIXME 11 | "${PROJECT_SOURCE_DIR}/src/themes/themes.qrc" # FIXME 12 | ) 13 | 14 | add_library(pegasus-qml "${PEGASUS_QML_ASSETS}") 15 | target_link_libraries(pegasus-qml PUBLIC 16 | Qt::Qml 17 | Qt::Quick 18 | ) 19 | 20 | 21 | include(PegasusCommonProps) 22 | pegasus_add_common_props_optimized(pegasus-qml) 23 | -------------------------------------------------------------------------------- /src/frontend/assets/dir-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/dir-icon.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/list-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/list-arrow.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/preview.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/a.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/b.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/dpdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/dpdown.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/dpleft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/dpleft.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/dpright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/dpright.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/dpup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/dpup.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/guide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/guide.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/lb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/lb.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/lsb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/lsb.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/lsx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/lsx.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/lsy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/lsy.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/lt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/lt.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/rb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/rb.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/rsb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/rsb.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/rsx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/rsx.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/rsy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/rsy.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/rt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/rt.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/select.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/start.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/x.png -------------------------------------------------------------------------------- /src/frontend/assets/gamepad/x360/y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/gamepad/x360/y.png -------------------------------------------------------------------------------- /src/frontend/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/logo.png -------------------------------------------------------------------------------- /src/frontend/assets/pbar-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/pbar-left.png -------------------------------------------------------------------------------- /src/frontend/assets/pbar-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/pbar-right.png -------------------------------------------------------------------------------- /src/frontend/assets/pbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/pbar.png -------------------------------------------------------------------------------- /src/frontend/assets/qr-docs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/qr-docs.png -------------------------------------------------------------------------------- /src/frontend/assets/qt-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/src/frontend/assets/qt-logo.png -------------------------------------------------------------------------------- /src/frontend/dialogs/RebootDialog.qml: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | import QtQuick 2.0 19 | 20 | 21 | GenericOkCancelDialog 22 | { 23 | focus: true 24 | 25 | title: qsTr("Reboot") + api.tr 26 | message: qsTr("The system will reboot. Are you sure?") + api.tr 27 | symbol: "\u21BB" 28 | 29 | onAccept: Internal.system.reboot() 30 | } 31 | -------------------------------------------------------------------------------- /src/frontend/dialogs/Shade.qml: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2019 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | import QtQuick 2.0 19 | 20 | 21 | Rectangle { 22 | signal cancel() 23 | 24 | anchors.fill: parent 25 | color: "#000" 26 | 27 | opacity: 0 28 | visible: opacity > 0 29 | Behavior on opacity { NumberAnimation { duration: 125 } } 30 | 31 | 32 | MouseArea { 33 | anchors.fill: parent 34 | acceptedButtons: Qt.LeftButton | Qt.RightButton 35 | onClicked: cancel() 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/frontend/dialogs/ShutdownDialog.qml: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | import QtQuick 2.0 19 | 20 | 21 | GenericOkCancelDialog 22 | { 23 | focus: true 24 | 25 | title: qsTr("Shutdown") + api.tr 26 | message: qsTr("The system will shut down. Are you sure?") + api.tr 27 | symbol: "\u23FB" 28 | 29 | onAccept: Internal.system.shutdown() 30 | } 31 | -------------------------------------------------------------------------------- /src/frontend/frontend.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = lib 2 | 3 | QT += qml quick 4 | CONFIG += c++11 staticlib warn_on exceptions_off rtti_off qtquickcompiler 5 | DEFINES *= $${COMMON_DEFINES} 6 | 7 | RESOURCES += \ 8 | ./frontend.qrc \ 9 | ../qmlutils/qmlutils.qrc \ 10 | ../themes/themes.qrc 11 | -------------------------------------------------------------------------------- /src/frontend/menu/common/MenuScreen.qml: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | import QtQuick 2.0 19 | import QtQuick.Window 2.2 20 | 21 | 22 | FocusScope { 23 | focus: true 24 | 25 | signal close() 26 | 27 | visible: x < Window.window.width 28 | 29 | 30 | Rectangle { 31 | anchors.fill: parent 32 | color: "#222" 33 | } 34 | 35 | MouseArea { 36 | anchors.fill: parent 37 | acceptedButtons: Qt.RightButton 38 | onClicked: parent.close() 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/frontend/menu/mainmenu/PrimaryMenuItem.qml: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | import QtQuick 2.8 19 | 20 | GenericMenuItem { 21 | z: 1000 22 | activeColor: "#555" 23 | inactiveColor: "#333" 24 | textSizePx: vpx(50) 25 | } 26 | -------------------------------------------------------------------------------- /src/frontend/menu/mainmenu/SecondaryMenuItem.qml: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | import QtQuick 2.8 19 | 20 | GenericMenuItem { 21 | activeColor: "#777" 22 | inactiveColor: "#222" 23 | textSizePx: vpx(35) 24 | selected: focus 25 | } 26 | -------------------------------------------------------------------------------- /src/frontend/menu/settings/common/ReloadQuestion.qml: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2019 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | import "../../../dialogs" 19 | 20 | GenericOkCancelDialog { 21 | title: qsTr("Reload") + api.tr 22 | message: qsTr("Would you like to reload the game list now? This may take some time.") + api.tr 23 | } 24 | -------------------------------------------------------------------------------- /src/frontend/menu/settings/common/SectionTitle.qml: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | import QtQuick 2.6 19 | 20 | 21 | Text { 22 | property bool first: false 23 | 24 | color: "#bbb" 25 | 26 | font.pixelSize: vpx(22) 27 | font.family: globalFonts.sans 28 | font.capitalization: Font.AllUppercase 29 | font.italic: true 30 | 31 | topPadding: font.pixelSize * (first ? 0.25 : 2.25) 32 | } 33 | -------------------------------------------------------------------------------- /src/frontend/menu/settings/common/SimpleShade.qml: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2022 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | import QtQuick 2.0 19 | 20 | 21 | Rectangle { 22 | id: root 23 | 24 | signal clicked 25 | 26 | anchors.fill: parent 27 | color: "#000" 28 | opacity: 0.3 29 | 30 | MouseArea { 31 | anchors.fill: parent 32 | acceptedButtons: Qt.LeftButton | Qt.RightButton 33 | onClicked: root.clicked() 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/link_to_frontend.pri: -------------------------------------------------------------------------------- 1 | # Link the project that includes this file to the frontend files 2 | 3 | win32:CONFIG(release, debug|release): LIBS += "-L$${TOP_BUILDDIR}/src/frontend/release/" -lfrontend 4 | else:win32:CONFIG(debug, debug|release): LIBS += "-L$${TOP_BUILDDIR}/src/frontend/debug/" -lfrontend 5 | else:unix: LIBS += "-L$${TOP_BUILDDIR}/src/frontend/" -lfrontend 6 | 7 | win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += "$${TOP_BUILDDIR}/src/frontend/release/libfrontend.a" 8 | else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += "$${TOP_BUILDDIR}/src/frontend/debug/libfrontend.a" 9 | else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += "$${TOP_BUILDDIR}/src/frontend/release/frontend.lib" 10 | else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += "$${TOP_BUILDDIR}/src/frontend/debug/frontend.lib" 11 | else:unix: PRE_TARGETDEPS += "$${TOP_BUILDDIR}/src/frontend/libfrontend.a" 12 | -------------------------------------------------------------------------------- /src/qmlutils/qmlutils.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | AutoScroll.qml 4 | HorizontalSwipeArea.qml 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/src.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | SUBDIRS += \ 4 | app \ 5 | backend \ 6 | frontend 7 | 8 | app.depends = backend frontend 9 | -------------------------------------------------------------------------------- /tests/backend/api/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_Api) 2 | target_link_libraries(test_Api PRIVATE pegasus-qml) 3 | -------------------------------------------------------------------------------- /tests/backend/api/api.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_Api 2 | SOURCES = test_Api.cpp 3 | RESOURCES += "$${TOP_SRCDIR}/src/themes/themes.qrc" 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | -------------------------------------------------------------------------------- /tests/backend/api/test_Api.cpp: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #include 19 | 20 | #include "model/Api.h" 21 | 22 | 23 | class test_Api : public QObject { 24 | Q_OBJECT 25 | 26 | private slots: 27 | }; 28 | 29 | 30 | QTEST_MAIN(test_Api) 31 | #include "test_Api.moc" 32 | -------------------------------------------------------------------------------- /tests/backend/backend.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | SUBDIRS += \ 4 | api \ 5 | configfile \ 6 | model \ 7 | processlauncher \ 8 | providers \ 9 | utils \ 10 | -------------------------------------------------------------------------------- /tests/backend/configfile/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_ConfigFile) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES configfile.qrc) 4 | target_sources(test_ConfigFile PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/backend/configfile/configfile.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_ConfigFile 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += configfile.qrc 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | -------------------------------------------------------------------------------- /tests/backend/configfile/configfile.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | test.cfg 4 | 5 | 6 | -------------------------------------------------------------------------------- /tests/backend/configfile/test.cfg: -------------------------------------------------------------------------------- 1 | # This is a comment, it should be skipped 2 | 3 | an invalid line, as it starts with space, but isn't a multiline 4 | 5 | key1:val 6 | key2 : val 7 | key with spaces: val with spaces 8 | missing value : 9 | : missing key 10 | 11 | multiline1: hello 12 | world! 13 | multiline2: 14 | purely 15 | multiline 16 | multiline3: text 17 | with 18 | . 19 | line break 20 | multiline4: text 21 | stops here 22 | 23 | line break 24 | -------------------------------------------------------------------------------- /tests/backend/model/collection/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_Collection) 2 | -------------------------------------------------------------------------------- /tests/backend/model/collection/collection.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_Collection 2 | SOURCES = $${TARGET}.cpp 3 | 4 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 5 | -------------------------------------------------------------------------------- /tests/backend/model/game/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_Game) 2 | -------------------------------------------------------------------------------- /tests/backend/model/game/game.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_Game 2 | SOURCES = $${TARGET}.cpp 3 | 4 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 5 | -------------------------------------------------------------------------------- /tests/backend/model/gameassets/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_GameAssets) 2 | -------------------------------------------------------------------------------- /tests/backend/model/gameassets/gameassets.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_GameAssets 2 | SOURCES = $${TARGET}.cpp 3 | 4 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 5 | -------------------------------------------------------------------------------- /tests/backend/model/keyeditor/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_qml_test(test_KeyEditor) 2 | -------------------------------------------------------------------------------- /tests/backend/model/keyeditor/keyeditor.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_KeyEditor 2 | SOURCES = $${TARGET}.cpp 3 | 4 | OTHER_FILES += \ 5 | tst_add.qml \ 6 | tst_delete.qml \ 7 | tst_keyname.qml \ 8 | tst_replace.qml \ 9 | utils.js 10 | 11 | include($${TOP_SRCDIR}/tests/qmltest_common.pri) 12 | -------------------------------------------------------------------------------- /tests/backend/model/keyeditor/utils.js: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | function hasKeyMod(keylist, key, modifiers) { 19 | for (var i = 0; i < keylist.length; i++) { 20 | var eventKey = keylist[i]; 21 | if (eventKey.key === key && eventKey.modifiers === modifiers) 22 | return true; 23 | } 24 | return false; 25 | } 26 | 27 | function hasKey(keylist, key) { 28 | return hasKeyMod(keylist, key, 0); 29 | } 30 | -------------------------------------------------------------------------------- /tests/backend/model/locales/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_Locales) 2 | -------------------------------------------------------------------------------- /tests/backend/model/locales/locales.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_Locales 2 | SOURCES = $${TARGET}.cpp 3 | 4 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 5 | -------------------------------------------------------------------------------- /tests/backend/model/memory/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_Memory) 2 | target_sources(test_Memory PRIVATE 3 | Container.cpp 4 | Container.h 5 | ) 6 | -------------------------------------------------------------------------------- /tests/backend/model/memory/Container.cpp: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2018 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #include "Container.h" 19 | 20 | 21 | Container::Container(QObject* parent) 22 | : QObject(parent) 23 | { 24 | setup(); 25 | } 26 | 27 | Container::Container(QString settings_dir, QObject* parent) 28 | : QObject(parent) 29 | , m_memory(std::move(settings_dir)) 30 | { 31 | setup(); 32 | } 33 | 34 | void Container::setup() 35 | { 36 | connect(&m_memory, &model::Memory::dataChanged, 37 | this, &Container::memoryChanged); 38 | } 39 | -------------------------------------------------------------------------------- /tests/backend/model/memory/memory.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_Memory 2 | SOURCES = test_Memory.cpp Container.cpp 3 | HEADERS = Container.h 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | -------------------------------------------------------------------------------- /tests/backend/model/model.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | SUBDIRS += \ 4 | collection \ 5 | game \ 6 | gameassets \ 7 | locales \ 8 | memory \ 9 | system \ 10 | themes \ 11 | 12 | # Proper QML testing was added in 5.11 13 | !lessThan(QT_MAJOR_VERSION, 5): !lessThan(QT_MINOR_VERSION, 11) { 14 | SUBDIRS += \ 15 | keyeditor 16 | } 17 | -------------------------------------------------------------------------------- /tests/backend/model/system/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_System) 2 | -------------------------------------------------------------------------------- /tests/backend/model/system/system.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_System 2 | SOURCES = $${TARGET}.cpp 3 | 4 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 5 | -------------------------------------------------------------------------------- /tests/backend/model/themes/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_Themes) 2 | target_link_libraries(test_Themes PRIVATE pegasus-qml) 3 | -------------------------------------------------------------------------------- /tests/backend/model/themes/themes.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_Themes 2 | SOURCES = $${TARGET}.cpp 3 | 4 | RESOURCES = $${TOP_SRCDIR}/src/themes/themes.qrc 5 | 6 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 7 | -------------------------------------------------------------------------------- /tests/backend/processlauncher/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_ProcessLauncher) 2 | -------------------------------------------------------------------------------- /tests/backend/processlauncher/processlauncher.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_ProcessLauncher 2 | SOURCES = $${TARGET}.cpp 3 | 4 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 5 | -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_EmulationStationProvider) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES data/data.qrc) 4 | target_sources(test_EmulationStationProvider PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/basic/es/es_systems.cfg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | MySys1 5 | My System 1 6 | :/basic/mysys1 7 | .ext .EXT 8 | command1 %ROM% 9 | My Platform 10 | 11 | 12 | -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/basic/mysys1/game.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/emulationstation/data/basic/mysys1/game.ext -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/data.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | empty/es/nothing_to_see_here 4 | basic/es/es_systems.cfg 5 | basic/mysys1/game.ext 6 | gamelist/abs_image1.png 7 | gamelist/abs_image2.png 8 | gamelist/img/abs_image3.png 9 | gamelist/es/es_systems.cfg 10 | gamelist/mysys1/game1.ext 11 | gamelist/mysys1/game2.ext 12 | gamelist/mysys1/gamelist.xml 13 | gamelist/mysys1/local_image1.png 14 | gamelist/mysys1/local_image2.png 15 | gamelist/mysys1/img/local_image3.png 16 | 17 | 18 | -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/empty/es/nothing_to_see_here: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/emulationstation/data/empty/es/nothing_to_see_here -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/gamelist/abs_image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/emulationstation/data/gamelist/abs_image1.png -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/gamelist/abs_image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/emulationstation/data/gamelist/abs_image2.png -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/gamelist/es/es_systems.cfg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | MySys1 5 | My System 1 6 | :/gamelist/mysys1 7 | .ext .EXT 8 | command1 %ROM% 9 | My Platform 10 | 11 | 12 | -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/gamelist/img/abs_image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/emulationstation/data/gamelist/img/abs_image3.png -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/gamelist/mysys1/game1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/emulationstation/data/gamelist/mysys1/game1.ext -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/gamelist/mysys1/game2.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/emulationstation/data/gamelist/mysys1/game2.ext -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/gamelist/mysys1/gamelist.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | game1.ext 4 | Game 1 5 | Some Description 6 | Some Developer 7 | Some Publisher 8 | Some Genre 9 | 1-4 10 | 0.6 11 | 10 12 | 2000102T102030 13 | 19990102T102030 14 | :/gamelist/abs_image1.png 15 | 16 | :/gamelist/img/abs_image3.png 17 | yes 18 | 19 | 20 | game2.ext 21 | Game 2 22 | 5 23 | ./local_image1.png 24 | 25 | ./img/local_image3.png 26 | 27 | 28 | -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/gamelist/mysys1/img/local_image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/emulationstation/data/gamelist/mysys1/img/local_image3.png -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/gamelist/mysys1/local_image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/emulationstation/data/gamelist/mysys1/local_image1.png -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/data/gamelist/mysys1/local_image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/emulationstation/data/gamelist/mysys1/local_image2.png -------------------------------------------------------------------------------- /tests/backend/providers/emulationstation/emulationstation.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_EmulationStationProvider 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += data/data.qrc 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | -------------------------------------------------------------------------------- /tests/backend/providers/favorites/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_FavoriteDB) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES data/data.qrc) 4 | target_sources(test_FavoriteDB PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/backend/providers/favorites/data/coll1dummy1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/favorites/data/coll1dummy1 -------------------------------------------------------------------------------- /tests/backend/providers/favorites/data/coll1dummy2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/favorites/data/coll1dummy2 -------------------------------------------------------------------------------- /tests/backend/providers/favorites/data/coll2dummy1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/favorites/data/coll2dummy1 -------------------------------------------------------------------------------- /tests/backend/providers/favorites/data/data.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | coll1dummy1 4 | coll1dummy2 5 | coll2dummy1 6 | 7 | 8 | -------------------------------------------------------------------------------- /tests/backend/providers/favorites/favorites.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_FavoriteDB 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += data/data.qrc 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | -------------------------------------------------------------------------------- /tests/backend/providers/launchbox/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_LaunchBoxProvider) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES data/data.qrc) 4 | target_sources(test_LaunchBoxProvider PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/backend/providers/launchbox/data/basic/LaunchBox/Data/Platforms.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | true 6 | Nintendo Entertainment System 7 | 1985-10-18T09:00:00+02:00 8 | Nintendo 9 | Nintendo 10 | Ricoh 2A03 (NTSC) or Ricoh 2A07 (PAL) 11 | 2 KB RAM plus 2 KB video RAM 12 | RP2C02 (NTSC) or RP2C07 (PAL) PPU 13 | PSG 5 channel mono 14 | 256x240 15 | Cartridge 16 | 2 17 | 18 | Some platform description. 19 | 20 | Nintendo 1985 21 | 22 | 23 | Consoles 24 | Consoles 25 | Some category description. 26 | 27 | false 28 | 29 | 30 | -------------------------------------------------------------------------------- /tests/backend/providers/launchbox/data/basic/emu/nestopia.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/launchbox/data/basic/emu/nestopia.exe -------------------------------------------------------------------------------- /tests/backend/providers/launchbox/data/basic/game/Test Bros (JU) [!].zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/launchbox/data/basic/game/Test Bros (JU) [!].zip -------------------------------------------------------------------------------- /tests/backend/providers/launchbox/data/basic/game/Test Bros Something.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/launchbox/data/basic/game/Test Bros Something.zip -------------------------------------------------------------------------------- /tests/backend/providers/launchbox/data/data.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | empty/nothing_to_see_here 4 | basic/LaunchBox/Data/Emulators.xml 5 | basic/LaunchBox/Data/Platforms/Nintendo Entertainment System.xml 6 | basic/LaunchBox/Data/Platforms.xml 7 | basic/emu/nestopia.exe 8 | basic/game/Test Bros (JU) [!].zip 9 | basic/game/Test Bros Something.zip 10 | 11 | 12 | -------------------------------------------------------------------------------- /tests/backend/providers/launchbox/data/empty/nothing_to_see_here: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/launchbox/data/empty/nothing_to_see_here -------------------------------------------------------------------------------- /tests/backend/providers/launchbox/launchbox.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_LaunchBoxProvider 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += data/data.qrc 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_LogiqxProvider) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES data/data.qrc) 4 | target_sources(test_LogiqxProvider PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/data.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | faulty/empty.dat 4 | faulty/incorrect_root.dat 5 | faulty/no_doctype.dat 6 | faulty/not_logiqx.dat 7 | malformed/bad_games.dat 8 | malformed/bad_header.dat 9 | malformed/Game 1.ext 10 | malformed/Game 2.ext 11 | malformed/Game 3.ext 12 | simple/Game 1.ext 13 | simple/Game 2x1.ext 14 | simple/Game 2x2.ext 15 | simple/something.dat 16 | 17 | 18 | -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/faulty/empty.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/logiqx/data/faulty/empty.dat -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/faulty/incorrect_root.dat: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/faulty/no_doctype.dat: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/faulty/not_logiqx.dat: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/malformed/Game 1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/logiqx/data/malformed/Game 1.ext -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/malformed/Game 2.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/logiqx/data/malformed/Game 2.ext -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/malformed/Game 3.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/logiqx/data/malformed/Game 3.ext -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/malformed/bad_games.dat: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | My Platform 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | asd 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 | -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/malformed/bad_header.dat: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | The description of My Platform 7 |
8 | 9 | The description of Game 1. 10 | 1990 11 | Game Corp. 12 | 13 | 14 |
15 | -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/simple/Game 1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/logiqx/data/simple/Game 1.ext -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/simple/Game 2x1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/logiqx/data/simple/Game 2x1.ext -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/simple/Game 2x2.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/logiqx/data/simple/Game 2x2.ext -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/data/simple/something.dat: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | My Platform 6 | The description of My Platform 7 |
8 | 9 | The description of Game 1. 10 | 1990 11 | Game Corp. 12 | 13 | 14 | 15 | The description of Game 2. 16 | 2000 17 | Game Corp. 18 | 19 | 20 | 21 |
22 | -------------------------------------------------------------------------------- /tests/backend/providers/logiqx/logiqx.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_LogiqxProvider 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += data/data.qrc 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_PegasusProvider) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES data/data.qrc) 4 | target_sources(test_PegasusProvider PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/autoparenting/game1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/autoparenting/game1.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/autoparenting/game2.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/autoparenting/game2.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/autoparenting/game3.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/autoparenting/game3.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/autoparenting/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: coll1 2 | 3 | game: game1 4 | file: game1.ext 5 | 6 | collection: coll2 7 | 8 | game: game2 9 | file: game2.ext 10 | 11 | collection: coll3 12 | 13 | game: game3 14 | file: game3.ext 15 | 16 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_assets/collections.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_assets/collections.txt -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_assets/different_dir/whatever.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_assets/different_dir/whatever.png -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_assets/media/mygame1-boxFront.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_assets/media/mygame1-boxFront.png -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_assets/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: mygames 2 | extensions: ext 3 | assets.cartridge: my_collection_assets/cartridge.png 4 | 5 | game: Example Game 6 | file: mygame1.ext 7 | assets.boxFront: different_dir/whatever.png 8 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_assets/my_collection_assets/cartridge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_assets/my_collection_assets/cartridge.png -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_assets/mygame1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_assets/mygame1.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_assets_multi/game1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_assets_multi/game1.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_assets_multi/game2.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_assets_multi/game2.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_assets_multi/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: Test 2 | extension: ext 3 | 4 | 5 | game: Single 6 | file: game1.ext 7 | assets.video: videos/a.mp4 8 | 9 | game: Multi 10 | file: game2.ext 11 | assets.videos: 12 | videos/a.mp4 13 | videos/b.mp4 14 | videos/c.mp4 15 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_assets_multi/videos/a.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_assets_multi/videos/a.mp4 -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_assets_multi/videos/b.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_assets_multi/videos/b.mp4 -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_assets_multi/videos/c.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_assets_multi/videos/c.mp4 -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_dirs/a/mygame.x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_dirs/a/mygame.x -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_dirs/a/mygame.y: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_dirs/a/mygame.y -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_dirs/b/mygame.x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_dirs/b/mygame.x -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_dirs/b/mygame.y: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_dirs/b/mygame.y -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_dirs/c/mygame.x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_dirs/c/mygame.x -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_dirs/c/mygame.y: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_dirs/c/mygame.y -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_dirs/coll/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: x-files 2 | extension: x 3 | directory: ../a 4 | directories: ../b 5 | directory: :/custom_dirs/c 6 | 7 | collection: y-files 8 | extension: y 9 | directory: ../b 10 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/custom_dirs/coll/mygame.x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/custom_dirs/coll/mygame.x -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/empty/nothing_to_see_here: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/empty/nothing_to_see_here -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/entryless/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: My Games 2 | file: test.ext 3 | 4 | game: test 5 | file: test.ext 6 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/multicoll/c1/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: C1 2 | file: :/multicoll/games/game.ext 3 | 4 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/multicoll/c2/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: C2 2 | file: :/multicoll/games/game.ext 3 | 4 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/multicoll/games/game.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/multicoll/games/game.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/multicoll/games/game.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/multicoll/games/game.jpg -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/multicoll/games/metadata.txt: -------------------------------------------------------------------------------- 1 | game: My Game 2 | file: game.ext 3 | summary: Some Summary 4 | description: Some Description 5 | developer: My Developer 6 | publisher: My Publisher 7 | genre: My Genre 8 | assets.boxFront: game.jpg 9 | 10 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/multifile/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: Test 2 | extension: ext 3 | 4 | 5 | game: Singlefile Game 6 | files: single.ext 7 | 8 | 9 | game: Multifile Game 10 | files: 11 | multi.a.ext 12 | multi.b.ext 13 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/multifile/multi.a.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/multifile/multi.a.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/multifile/multi.b.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/multifile/multi.b.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/multifile/single.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/multifile/single.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files/a/game_a.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/relative_files/a/game_a.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files/coll/b/game_b.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/relative_files/coll/b/game_b.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files/coll/c/game_c.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/relative_files/coll/c/game_c.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files/coll/game_here.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/relative_files/coll/game_here.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files/coll/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: myfiles 2 | files: 3 | game_here.ext 4 | ../a/game_a.ext 5 | b/game_b.ext 6 | ./c/game_c.ext 7 | 8 | # Ignored files 9 | files: 10 | ../ignored/ignoreme.ext 11 | ignore-files: 12 | ../ignored/ignoreme.ext 13 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files/ignored/ignoreme.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/relative_files/ignored/ignoreme.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files_with_dirs/a/game_a.x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/relative_files_with_dirs/a/game_a.x -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files_with_dirs/a/ignoreme.x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/relative_files_with_dirs/a/ignoreme.x -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files_with_dirs/b/game_b.x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/relative_files_with_dirs/b/game_b.x -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files_with_dirs/b/ignoredir/game_ign.x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/relative_files_with_dirs/b/ignoredir/game_ign.x -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files_with_dirs/coll/game_here.x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/relative_files_with_dirs/coll/game_here.x -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files_with_dirs/coll/ignoredir/game_ign.x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/relative_files_with_dirs/coll/ignoredir/game_ign.x -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files_with_dirs/coll/ignoreme.x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/relative_files_with_dirs/coll/ignoreme.x -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/relative_files_with_dirs/coll/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: myfiles 2 | extension: x 3 | directory: ../a 4 | ignore-file: 5 | ignoreme.x 6 | ignoredir/game_ign.x 7 | directories: ../b 8 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/9999-in-1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/simple/9999-in-1.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/buggygame.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/simple/buggygame.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/duplicategame.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/simple/duplicategame.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/favgame1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/simple/favgame1.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/favgame2.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/simple/favgame2.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/game with spaces.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/simple/game with spaces.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/media/game_ignored.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/simple/media/game_ignored.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/metadata.pegasus.txt: -------------------------------------------------------------------------------- 1 | collection: My Games 2 | extensions: ext 3 | ignore-file: buggygame.ext 4 | ignore-file: duplicategame.ext 5 | launch: myemulator {file.path} 6 | 7 | collection: Favorite games 8 | files: 9 | favgame1.ext 10 | favgame2.ext 11 | game with spaces.ext 12 | 13 | collection: Multi-game ROMs 14 | regex: \d+.in.1 15 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/mygame1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/simple/mygame1.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/mygame2.EXT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/simple/mygame2.EXT -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/mygame3.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/simple/mygame3.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/notgame.unk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/simple/notgame.unk -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/simple/subdir/game_in_subdir.EXT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/simple/subdir/game_in_subdir.EXT -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/with_meta/basic.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/with_meta/basic.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/with_meta/horse.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/with_meta/horse.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/with_meta/media/game_ignored.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/with_meta/media/game_ignored.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/with_meta/metadata.txt: -------------------------------------------------------------------------------- 1 | # values before 'file' are ignored 2 | foo: bar 3 | 4 | file: mygame1.ext 5 | title: My Game 1 6 | # repeating the developer, publisher or genre will append, not overwrite 7 | developer: Dev1 8 | developer: Dev2 9 | 10 | file: mygame2.ext 11 | # `name` is also accepted for title 12 | name: My Game 2 13 | # the element separator is `,` 14 | publisher: Publisher with Spaces 15 | publisher: Another Publisher 16 | 17 | file: :/with_meta/mygame3.ext 18 | genres: genre1, genre2, 19 | genre with spaces 20 | players: 2-4 21 | 22 | file: subdir/game_in_subdir.ext 23 | rating: 80% 24 | # repeating keys will overwrite previous values 25 | release: 1998 26 | release: 1998-05 27 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/with_meta/multi.a.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/with_meta/multi.a.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/with_meta/multi.b.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/with_meta/multi.b.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/with_meta/mygame2.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/with_meta/mygame2.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/with_meta/mygame3.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/with_meta/mygame3.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/with_meta/pre.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/with_meta/pre.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/data/with_meta/subdir/game_in_subdir.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus/data/with_meta/subdir/game_in_subdir.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus/pegasus.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_PegasusProvider 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += data/data.qrc 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_PegasusMediaProvider) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES data/data.qrc) 4 | target_sources(test_PegasusMediaProvider PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search/media/mygame1/box_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search/media/mygame1/box_front.png -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search/media/mygame1/video.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search/media/mygame1/video.mp4 -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search/media/mygame3/music.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search/media/mygame3/music.mp3 -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search/media/mygame3/screenshot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search/media/mygame3/screenshot.jpg -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search/media/subdir/mygame4/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search/media/subdir/mygame4/background.png -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: mygames 2 | extensions: ext 3 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search/mygame1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search/mygame1.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search/mygame2.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search/mygame2.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search/mygame3.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search/mygame3.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search/subdir/mygame4.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search/subdir/mygame4.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search_by_title/media/My Precious Game/box_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search_by_title/media/My Precious Game/box_front.png -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search_by_title/media/My Precious Game/video.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search_by_title/media/My Precious Game/video.mp4 -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search_by_title/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: mygames 2 | extensions: ext 3 | 4 | game: My Precious Game 5 | file: mygame.ext 6 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search_by_title/mygame.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search_by_title/mygame.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search_multifile/media/mygame/screenshot01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search_multifile/media/mygame/screenshot01.png -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search_multifile/media/mygame/screenshot02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search_multifile/media/mygame/screenshot02.png -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search_multifile/metadata.txt: -------------------------------------------------------------------------------- 1 | collection: mygames 2 | extensions: ext 3 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/asset_search_multifile/mygame.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/asset_search_multifile/mygame.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/separate_media_dirs/games-a/game1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/separate_media_dirs/games-a/game1.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/separate_media_dirs/games-a/media/Game 1/box_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/separate_media_dirs/games-a/media/Game 1/box_front.png -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/separate_media_dirs/games-b/.media/Game 2/box_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/separate_media_dirs/games-b/.media/Game 2/box_front.png -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/separate_media_dirs/games-b/game2.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/pegasus_media/data/separate_media_dirs/games-b/game2.ext -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/data/separate_media_dirs/metadata/metadata.pegasus.txt: -------------------------------------------------------------------------------- 1 | collection: Games A 2 | extension: ext 3 | directory: ../games-a 4 | 5 | collection: Games B 6 | extension: ext 7 | directory: ../games-b 8 | 9 | 10 | game: Game 1 11 | file: ../games-a/game1.ext 12 | 13 | game: Game 2 14 | file: ../games-b/game2.ext 15 | -------------------------------------------------------------------------------- /tests/backend/providers/pegasus_media/pegasus_media.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_PegasusMediaProvider 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += data/data.qrc 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | -------------------------------------------------------------------------------- /tests/backend/providers/playnite/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_PlayniteProvider) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES data/data.qrc) 4 | target_sources(test_PlayniteProvider PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/companies/133a9c55-2c95-4159-b1df-edf03f686031.json: -------------------------------------------------------------------------------- 1 | {"Id":"133a9c55-2c95-4159-b1df-edf03f686031","Name":"Nintendo, Inc."} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/companies/26e38b33-91f8-4d21-a69e-4c32a29d13de.json: -------------------------------------------------------------------------------- 1 | {"Id":"26e38b33-91f8-4d21-a69e-4c32a29d13de","Name":"Some Company"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/companies/562f95a7-6ac1-4795-9946-e5d13b9a9df6.json: -------------------------------------------------------------------------------- 1 | {"Id":"562f95a7-6ac1-4795-9946-e5d13b9a9df6","Name":"Nintendo"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/companies/6f1fe3aa-c0eb-4d41-9e14-cce859a7af4e.json: -------------------------------------------------------------------------------- 1 | {"Id":"6f1fe3aa-c0eb-4d41-9e14-cce859a7af4e","Name":"Some Developer"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/emulators/7e80bb8a-2e09-4a41-bc17-0035d4ba1709.json: -------------------------------------------------------------------------------- 1 | { 2 | "Profiles": [ 3 | { 4 | "Platforms": [ 5 | "22fc036d-c73c-4ce1-ba49-105ecacaf9cf" 6 | ], 7 | "ImageExtensions": [ 8 | "zip" 9 | ], 10 | "Executable": ":\\basic\\emu\\nestopia.exe", 11 | "Arguments": "--exec=\"{ImagePath}\" --batch", 12 | "WorkingDirectory": ":\\basic\\emu\\", 13 | "Id": "4bb9e953-cf79-434d-bc15-7b9346e83dde", 14 | "Name": "Nintendo Entertainment System" 15 | }, 16 | { 17 | "Platforms": [ 18 | "3771f5e2-1790-4933-953a-61a56332aeea" 19 | ], 20 | "ImageExtensions": [ 21 | "zip" 22 | ], 23 | "Executable": ":\\basic\\emu\\Dolphin.exe", 24 | "Arguments": "--exec=\"{ImagePath}\" --batch", 25 | "WorkingDirectory": ":\\basic\\emu\\", 26 | "Id": "5202729a-04f3-4651-b05a-10de10260b24", 27 | "Name": "Nintendo Wii" 28 | } 29 | ], 30 | "Id": "7e80bb8a-2e09-4a41-bc17-0035d4ba1709", 31 | "Name": "Nestopia" 32 | } -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/genres/7f2a2f5a-aa50-4ac3-a8fc-f38f3e6d4cdb.json: -------------------------------------------------------------------------------- 1 | {"Id":"7f2a2f5a-aa50-4ac3-a8fc-f38f3e6d4cdb","Name":"Card & Board Game"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/genres/9828dab7-5f3f-47b9-b0cc-2cf610e55655.json: -------------------------------------------------------------------------------- 1 | {"Id":"9828dab7-5f3f-47b9-b0cc-2cf610e55655","Name":"Platform"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/genres/b232562e-5ec8-4809-9511-89a2aaa05b32.json: -------------------------------------------------------------------------------- 1 | {"Id":"b232562e-5ec8-4809-9511-89a2aaa05b32","Name":"RPG"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/genres/c3ba2a1a-65ec-4040-a798-f28adb62f955.json: -------------------------------------------------------------------------------- 1 | {"Id":"c3ba2a1a-65ec-4040-a798-f28adb62f955","Name":"Turn-based strategy (TBS)"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/genres/c5c76d06-3ef5-4ba1-939f-2b26caa37514.json: -------------------------------------------------------------------------------- 1 | {"Id":"c5c76d06-3ef5-4ba1-939f-2b26caa37514","Name":"Quiz/Trivia"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/genres/ebeb4bd1-9e2b-4af7-89ef-c2805110ea9f.json: -------------------------------------------------------------------------------- 1 | {"Id":"ebeb4bd1-9e2b-4af7-89ef-c2805110ea9f","Name":"Indie"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/genres/ef3ea3be-3e35-4178-b5f1-f57fed9c57a5.json: -------------------------------------------------------------------------------- 1 | {"Id":"ef3ea3be-3e35-4178-b5f1-f57fed9c57a5","Name":"Multiplayer"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/platforms/22fc036d-c73c-4ce1-ba49-105ecacaf9cf.json: -------------------------------------------------------------------------------- 1 | {"Id":"22fc036d-c73c-4ce1-ba49-105ecacaf9cf","Name":"Nintendo Entertainment System"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/platforms/adb97362-7144-4191-8bcb-a80f5b049265.json: -------------------------------------------------------------------------------- 1 | {"Id":"adb97362-7144-4191-8bcb-a80f5b049265","Name":"PC"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/sources/69a848f2-18a0-48d6-9d27-1c1b17139d6b.json: -------------------------------------------------------------------------------- 1 | {"Id":"69a848f2-18a0-48d6-9d27-1c1b17139d6b","Name":"GOG"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/sources/aee2cb68-7f5a-4a00-a687-64d193a67241.json: -------------------------------------------------------------------------------- 1 | {"Id":"aee2cb68-7f5a-4a00-a687-64d193a67241","Name":"Origin"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/Playnite/library/sources/f356164c-0239-4ae4-95e3-4a0b42c3bb1e.json: -------------------------------------------------------------------------------- 1 | {"Id":"f356164c-0239-4ae4-95e3-4a0b42c3bb1e","Name":"Steam"} -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/game/Test Bros (JU) [!].zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/playnite/data/basic/game/Test Bros (JU) [!].zip -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/basic/game/Test Bros Something.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/playnite/data/basic/game/Test Bros Something.zip -------------------------------------------------------------------------------- /tests/backend/providers/playnite/data/empty/nothing_to_see_here: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/playnite/data/empty/nothing_to_see_here -------------------------------------------------------------------------------- /tests/backend/providers/playnite/playnite.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_PlayniteProvider 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += data/data.qrc 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | -------------------------------------------------------------------------------- /tests/backend/providers/playtime/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_Playtime) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES data.qrc) 4 | target_sources(test_Playtime PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/backend/providers/playtime/data.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/backend/providers/playtime/data.db -------------------------------------------------------------------------------- /tests/backend/providers/playtime/data.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | data.db 4 | 5 | 6 | -------------------------------------------------------------------------------- /tests/backend/providers/playtime/playtime.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_Playtime 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += data.qrc 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | -------------------------------------------------------------------------------- /tests/backend/providers/providers.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | SUBDIRS += \ 4 | pegasus \ 5 | pegasus_media \ 6 | emulationstation \ 7 | favorites \ 8 | logiqx \ 9 | playtime \ 10 | 11 | win32: SUBDIRS += \ 12 | launchbox \ 13 | playnite \ 14 | -------------------------------------------------------------------------------- /tests/backend/utils/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_Utils) 2 | -------------------------------------------------------------------------------- /tests/backend/utils/utils.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_Utils 2 | SOURCES = $${TARGET}.cpp 3 | 4 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 5 | -------------------------------------------------------------------------------- /tests/benchmarks/benchmarks.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | SUBDIRS += \ 4 | configfile \ 5 | pegasus_provider \ 6 | -------------------------------------------------------------------------------- /tests/benchmarks/configfile/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(bench_ConfigFile) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES data.qrc) 4 | target_sources(bench_ConfigFile PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/benchmarks/configfile/configfile.pro: -------------------------------------------------------------------------------- 1 | TARGET = bench_ConfigFile 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += data.qrc 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | 7 | -------------------------------------------------------------------------------- /tests/benchmarks/configfile/data.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | test.cfg 4 | 5 | 6 | -------------------------------------------------------------------------------- /tests/benchmarks/configfile/test.cfg: -------------------------------------------------------------------------------- 1 | # This is a comment, it should be skipped 2 | 3 | an invalid line, as it starts with space, but isn't a multiline 4 | 5 | key1:val 6 | key2 : val 7 | key with spaces: val with spaces 8 | missing value : 9 | : missing key 10 | 11 | multiline1: hello 12 | world! 13 | multiline2: a line 14 | with 15 | . 16 | line break 17 | multiline3: 18 | purely 19 | multiline 20 | -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(bench_PegasusProvider) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES data/data.qrc) 4 | target_sources(bench_PegasusProvider PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/data.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | empty/nothing_to_see_here 4 | filled/9999-in-1.ext 5 | filled/buggygame.ext 6 | filled/duplicategame.ext 7 | filled/mygame1.ext 8 | filled/mygame2.ext 9 | filled/mygame3.ext 10 | filled/notgame.unk 11 | filled/media/game_ignored.ext 12 | filled/subdir/game_in_subdir.ext 13 | filled/metadata.pegasus.txt 14 | filled/favgame1.ext 15 | filled/favgame2.ext 16 | 17 | 18 | -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/empty/nothing_to_see_here: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/benchmarks/pegasus_provider/data/empty/nothing_to_see_here -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/filled/9999-in-1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/benchmarks/pegasus_provider/data/filled/9999-in-1.ext -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/filled/buggygame.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/benchmarks/pegasus_provider/data/filled/buggygame.ext -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/filled/duplicategame.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/benchmarks/pegasus_provider/data/filled/duplicategame.ext -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/filled/favgame1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/benchmarks/pegasus_provider/data/filled/favgame1.ext -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/filled/favgame2.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/benchmarks/pegasus_provider/data/filled/favgame2.ext -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/filled/media/game_ignored.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/benchmarks/pegasus_provider/data/filled/media/game_ignored.ext -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/filled/metadata.pegasus.txt: -------------------------------------------------------------------------------- 1 | collection: My Games 2 | extensions: ext 3 | ignore-file: buggygame.ext 4 | ignore-file: duplicategame.ext 5 | launch: myemulator {file.path} 6 | 7 | collection: Favorite games 8 | files: favgame1.ext favgame2.ext 9 | 10 | collection: Multi-game ROMs 11 | regex: \d+.in.1 12 | -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/filled/mygame1.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/benchmarks/pegasus_provider/data/filled/mygame1.ext -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/filled/mygame2.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/benchmarks/pegasus_provider/data/filled/mygame2.ext -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/filled/mygame3.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/benchmarks/pegasus_provider/data/filled/mygame3.ext -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/filled/notgame.unk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/benchmarks/pegasus_provider/data/filled/notgame.unk -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/data/filled/subdir/game_in_subdir.ext: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/benchmarks/pegasus_provider/data/filled/subdir/game_in_subdir.ext -------------------------------------------------------------------------------- /tests/benchmarks/pegasus_provider/pegasus_provider.pro: -------------------------------------------------------------------------------- 1 | TARGET = bench_PegasusProvider 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += data/data.qrc 4 | 5 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 6 | 7 | -------------------------------------------------------------------------------- /tests/cxxtest_common.pri: -------------------------------------------------------------------------------- 1 | CONFIG += testcase no_testcase_installs 2 | CONFIG += c++17 warn_on exceptions_off rtti_off 3 | 4 | QT += qml testlib 5 | 6 | DEFINES *= $${COMMON_DEFINES} 7 | 8 | include($${TOP_SRCDIR}/src/link_to_backend.pri) 9 | -------------------------------------------------------------------------------- /tests/integration/apng/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_qml_test(test_apng) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES data.qrc) 4 | target_sources(test_apng PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/integration/apng/actual.apng: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/integration/apng/actual.apng -------------------------------------------------------------------------------- /tests/integration/apng/apng.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_apng 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += data.qrc 4 | 5 | OTHER_FILES += \ 6 | tst_render.qml 7 | 8 | include($${TOP_SRCDIR}/tests/qmltest_common.pri) 9 | -------------------------------------------------------------------------------- /tests/integration/apng/data.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | actual.apng 4 | expected.png 5 | 6 | 7 | -------------------------------------------------------------------------------- /tests/integration/apng/expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/integration/apng/expected.png -------------------------------------------------------------------------------- /tests/integration/apng/test_apng.cpp: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2021 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #include 19 | 20 | Q_IMPORT_PLUGIN(ApngImagePlugin) 21 | QUICK_TEST_MAIN(apng) 22 | -------------------------------------------------------------------------------- /tests/integration/blurhash/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_qml_test(test_Blurhash) 2 | 3 | qtquick_compiler_add_resources(TEST_RESOURCES data.qrc) 4 | target_sources(test_Blurhash PRIVATE ${TEST_RESOURCES}) 5 | -------------------------------------------------------------------------------- /tests/integration/blurhash/blurhash.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_Blurhash 2 | SOURCES = $${TARGET}.cpp 3 | RESOURCES += data.qrc 4 | 5 | OTHER_FILES += \ 6 | tst_render.qml 7 | 8 | include($${TOP_SRCDIR}/tests/qmltest_common.pri) 9 | -------------------------------------------------------------------------------- /tests/integration/blurhash/data.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | expected.png 4 | 5 | 6 | -------------------------------------------------------------------------------- /tests/integration/blurhash/expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmatyas/pegasus-frontend/66433328e8524b62546802990a7f316f37f879dd/tests/integration/blurhash/expected.png -------------------------------------------------------------------------------- /tests/integration/integration.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | SUBDIRS += \ 4 | sortfilter \ 5 | blurhash \ 6 | 7 | !isEmpty(USE_SDL_GAMEPAD): SUBDIRS += sdl_gamepad 8 | !isEmpty(ENABLE_APNG): SUBDIRS += apng 9 | -------------------------------------------------------------------------------- /tests/integration/sdl_gamepad/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_cxx_test(test_SdlGamepad) 2 | 3 | find_package(SDL2 REQUIRED) 4 | target_include_directories(test_SdlGamepad PRIVATE ${SDL2_INCLUDE_DIRS}) 5 | -------------------------------------------------------------------------------- /tests/integration/sdl_gamepad/sdl_gamepad.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_SdlGamepad 2 | SOURCES = $${TARGET}.cpp 3 | 4 | include($${TOP_SRCDIR}/tests/cxxtest_common.pri) 5 | -------------------------------------------------------------------------------- /tests/integration/sdl_gamepad/test_SdlGamepad.cpp: -------------------------------------------------------------------------------- 1 | // Pegasus Frontend 2 | // Copyright (C) 2017-2019 Mátyás Mustoha 3 | // 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | // 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | 18 | #include 19 | 20 | #include 21 | 22 | 23 | class test_SdlGamepad : public QObject { 24 | Q_OBJECT 25 | 26 | private slots: 27 | void inits(); 28 | }; 29 | 30 | void test_SdlGamepad::inits() 31 | { 32 | QCOMPARE(SDL_Init(SDL_INIT_GAMECONTROLLER), 0); 33 | SDL_Quit(); 34 | } 35 | 36 | 37 | QTEST_MAIN(test_SdlGamepad) 38 | #include "test_SdlGamepad.moc" 39 | -------------------------------------------------------------------------------- /tests/integration/sortfilter/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | pegasus_qml_test(test_SortFilter) 2 | -------------------------------------------------------------------------------- /tests/integration/sortfilter/sortfilter.pro: -------------------------------------------------------------------------------- 1 | TARGET = test_SortFilter 2 | SOURCES = $${TARGET}.cpp 3 | 4 | OTHER_FILES += \ 5 | tst_all.qml 6 | 7 | include($${TOP_SRCDIR}/tests/qmltest_common.pri) 8 | -------------------------------------------------------------------------------- /tests/qmltest_common.pri: -------------------------------------------------------------------------------- 1 | CONFIG += qmltestcase no_testcase_installs 2 | CONFIG += c++11 warn_on exceptions_off rtti_off 3 | 4 | QT += qml 5 | 6 | DEFINES *= $${COMMON_DEFINES} 7 | 8 | include($${TOP_SRCDIR}/src/link_to_backend.pri) 9 | -------------------------------------------------------------------------------- /tests/tests.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | SUBDIRS += \ 4 | backend \ 5 | benchmarks \ 6 | integration \ 7 | 8 | requires(qtHaveModule(testlib)) 9 | -------------------------------------------------------------------------------- /thirdparty/README.md: -------------------------------------------------------------------------------- 1 | # Third-party libraries 2 | 3 | - **QtApng**: for loading APNG images, based on `https://github.com/Skycoder42/QtApng`, commit `9c529bd` 4 | - **SortFilterProxyModel**: based on `https://github.com/oKcerG/SortFilterProxyModel` 5 | -------------------------------------------------------------------------------- /thirdparty/apng/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | find_package(Qt6 COMPONENTS Gui QUIET) 2 | if (NOT Qt6_FOUND) 3 | find_package(Qt5 5.15 COMPONENTS Gui REQUIRED) 4 | endif() 5 | 6 | 7 | add_library(apng 8 | apngimagehandler.cpp 9 | apngimagehandler_p.h 10 | apngimageplugin.cpp 11 | apngimageplugin.h 12 | apngreader.cpp 13 | apngreader_p.h 14 | ) 15 | 16 | target_link_libraries(apng PUBLIC Qt::Gui) 17 | target_compile_definitions(apng PRIVATE QT_STATICPLUGIN) 18 | -------------------------------------------------------------------------------- /thirdparty/apng/apng.pro: -------------------------------------------------------------------------------- 1 | TARGET = qapng 2 | TEMPLATE = lib 3 | CONFIG += plugin static warn_on 4 | QT += gui 5 | 6 | DEFINES *= $${COMMON_DEFINES} 7 | 8 | HEADERS += \ 9 | apngimageplugin.h \ 10 | apngreader_p.h \ 11 | apngimagehandler_p.h 12 | 13 | SOURCES += \ 14 | apngimageplugin.cpp \ 15 | apngimagehandler.cpp \ 16 | apngreader.cpp 17 | 18 | OTHER_FILES += \ 19 | qapng.json 20 | 21 | include($${TOP_SRCDIR}/thirdparty/link_to_png.pri) 22 | -------------------------------------------------------------------------------- /thirdparty/apng/apngimagehandler_p.h: -------------------------------------------------------------------------------- 1 | #ifndef APNGIMAGEHANDLER_P_H 2 | #define APNGIMAGEHANDLER_P_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | class ApngReader; 9 | 10 | class ApngImageHandler : public QImageIOHandler 11 | { 12 | Q_DISABLE_COPY(ApngImageHandler) 13 | public: 14 | ApngImageHandler(); 15 | ~ApngImageHandler() override; 16 | 17 | // QImageIOHandler interface 18 | QByteArray name() const final; 19 | bool canRead() const final; 20 | bool read(QImage *image) final; 21 | QVariant option(ImageOption option) const final; 22 | bool supportsOption(ImageOption option) const final; 23 | bool jumpToNextImage() final; 24 | bool jumpToImage(int imageNumber) final; 25 | int loopCount() const final; 26 | int imageCount() const final; 27 | int nextImageDelay() const final; 28 | int currentImageNumber() const final; 29 | 30 | private: 31 | quint32 _index = 0; 32 | QScopedPointer _reader; 33 | }; 34 | 35 | #endif // APNGIMAGEHANDLER_P_H 36 | -------------------------------------------------------------------------------- /thirdparty/apng/apngimageplugin.cpp: -------------------------------------------------------------------------------- 1 | #include "apngimageplugin.h" 2 | #include "apngimagehandler_p.h" 3 | #include "apngreader_p.h" 4 | 5 | ApngImagePlugin::ApngImagePlugin(QObject *parent) : 6 | QImageIOPlugin(parent) 7 | {} 8 | 9 | QImageIOPlugin::Capabilities ApngImagePlugin::capabilities(QIODevice *device, const QByteArray &format) const 10 | { 11 | if (format == "apng") { 12 | if(device && device->bytesAvailable() >= 8) 13 | return ApngReader::checkPngSig(device) ? CanRead : static_cast(0); 14 | else 15 | return CanRead; 16 | } else 17 | return static_cast(0); 18 | } 19 | 20 | QImageIOHandler *ApngImagePlugin::create(QIODevice *device, const QByteArray &format) const 21 | { 22 | if(device && capabilities(device, format).testFlag(CanRead)) { 23 | auto handler = new ApngImageHandler(); 24 | handler->setDevice(device); 25 | handler->setFormat(format); 26 | return handler; 27 | } else 28 | return nullptr; 29 | } 30 | -------------------------------------------------------------------------------- /thirdparty/apng/apngimageplugin.h: -------------------------------------------------------------------------------- 1 | #ifndef APNGIMAGEPLUGIN_H 2 | #define APNGIMAGEPLUGIN_H 3 | 4 | #include 5 | 6 | class ApngImagePlugin : public QImageIOPlugin 7 | { 8 | Q_OBJECT 9 | Q_PLUGIN_METADATA(IID QImageIOHandlerFactoryInterface_iid FILE "qapng.json") 10 | 11 | public: 12 | ApngImagePlugin(QObject *parent = nullptr); 13 | 14 | // QImageIOPlugin interface 15 | Capabilities capabilities(QIODevice *device, const QByteArray &format) const final; 16 | QImageIOHandler *create(QIODevice *device, const QByteArray &format) const final; 17 | }; 18 | 19 | #endif // APNGIMAGEPLUGIN_H 20 | -------------------------------------------------------------------------------- /thirdparty/apng/qapng.json: -------------------------------------------------------------------------------- 1 | { 2 | "Keys" : [ "apng" ] 3 | } 4 | -------------------------------------------------------------------------------- /thirdparty/link_to_png.pri: -------------------------------------------------------------------------------- 1 | !isEmpty(PNG_LIBS) { 2 | LIBS += $${PNG_LIBS} 3 | } 4 | !isEmpty(PNG_INCLUDES) { 5 | INCLUDEPATH += $${PNG_INCLUDES} 6 | DEPENDPATH += $${PNG_INCLUDES} 7 | } 8 | -------------------------------------------------------------------------------- /thirdparty/link_to_sdl.pri: -------------------------------------------------------------------------------- 1 | DEFINES *= SDL_MAIN_HANDLED 2 | 3 | !isEmpty(USE_SDL_GAMEPAD): DEFINES *= WITH_SDL_GAMEPAD 4 | !isEmpty(USE_SDL_POWER): DEFINES *= WITH_SDL_POWER 5 | 6 | 7 | isEmpty(SDL_LIBS):isEmpty(SDL_INCLUDES) { 8 | unix|win32-g++: { 9 | CONFIG += link_pkgconfig 10 | PKGCONFIG += sdl2 11 | } 12 | else: error("Please set SDL_LIBS and SDL_INCLUDES") 13 | } 14 | else { 15 | LIBS += $${SDL_LIBS} 16 | INCLUDEPATH += $${SDL_INCLUDES} 17 | DEPENDPATH += $${SDL_INCLUDES} 18 | } 19 | -------------------------------------------------------------------------------- /thirdparty/thirdparty.pri: -------------------------------------------------------------------------------- 1 | INCLUDEPATH += $$PWD 2 | 3 | include(SortFilterProxyModel/SortFilterProxyModel.pri) 4 | -------------------------------------------------------------------------------- /thirdparty/thirdparty.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | !isEmpty(ENABLE_APNG): { 4 | SUBDIRS += apng 5 | } 6 | 7 | OTHER_FILES += link_to_png.pri 8 | --------------------------------------------------------------------------------