feat: Bundled NW.js with appimages

feat: Implemented self update
feat: Added rclone saves for emulators
fix: Fixed auto focus in builds
feat: Added helper cards on empty library
This commit is contained in:
Simeon Radivoev 2026-04-26 03:26:15 +03:00
parent 587956c792
commit 813785f4f3
Signed by: simeonradivoev
GPG key ID: C16C2132A7660C8E
59 changed files with 1210 additions and 480 deletions

2
.config/appimage/AppRun Normal file
View file

@ -0,0 +1,2 @@
#!/bin/bash
exec "$APPDIR/usr/bin/{{BINARY_NAME}}" "$@"

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
<id>{{APP_ID}}</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>{{LICENSE}}</project_license>
<name>{{APP_NAME}}</name>
<summary>Retro gaming frontend designed for handheld and controllers</summary>
<developer id="com.simeonradivoev">
<name>Simeon Radivoev</name>
</developer>
<description>
<p>A Cross-Platform Retro gaming frontend designed for handheld and controllers. Focused on building a simple user experience and intuitive UI.</p>
</description>
<categories>
<category>Game</category>
</categories>
<recommends>
<internet>always</internet>
</recommends>
<launchable type="desktop-id">{{APP_ID}}.desktop</launchable>
<url type="homepage">https://github.com/simeonradivoev/gameflow-deck</url>
<url type="bugtracker">https://github.com/simeonradivoev/gameflow-deck/issues</url>
<url type="donation">https://github.com/sponsors/simeonradivoev</url>
<screenshots>
<screenshot type="default">
<image>https://media.githubusercontent.com/media/simeonradivoev/gameflow-deck/master/.github/screenshots/yObFD2LySH.jpg</image>
</screenshot>
<screenshot>
<caption>Game Details</caption>
<image>https://media.githubusercontent.com/media/simeonradivoev/gameflow-deck/master/.github/screenshots/3nhuKCK6E3.jpg</image>
</screenshot>
<screenshot>
<caption>The Settings Panel</caption>
<image>https://media.githubusercontent.com/media/simeonradivoev/gameflow-deck/master/.github/screenshots/GL7SkQbHIY.png</image>
</screenshot>
<screenshot>
<caption>Emulator Details</caption>
<image>https://media.githubusercontent.com/media/simeonradivoev/gameflow-deck/master/.github/screenshots/xNj7scPEDQ.png</image>
</screenshot>
<screenshot>
<caption>Gameflow Store</caption>
<image>https://media.githubusercontent.com/media/simeonradivoev/gameflow-deck/master/.github/screenshots/CpBLzTNM6N.png</image>
</screenshot>
</screenshots>
<releases>
{{{RELEASES}}}
</releases>
<content_rating type="oars-1.0" />
<provides>
<id>{{APP_ID}}.desktop</id>
<binary>gameflow</binary>
</provides>
</component>

View file

@ -0,0 +1,10 @@
[Desktop Entry]
X-AppImage-Name={{APP_NAME}}
X-AppImage-Version={{VERSION}}
X-AppImage-Arch={{ARCH}}
Name={{APP_NAME}}
Comment={{DESCRIPTION}}
Exec=gameflow
Icon=gameflow
Type=Application
Categories=Game;

View file

@ -4,4 +4,4 @@ Comment=GameFlow Deck
Exec=gameflow
Icon=com.simeonradivoev.gameflow-deck
Type=Application
Categories=Game;
Categories=Games;

View file

@ -1,23 +1,36 @@
{
"app-id": "com.simeonradivoev.gameflow-deck",
"runtime": "org.kde.Platform",
"runtime-version": "6.10",
"sdk": "org.kde.Sdk",
"runtime": "org.freedesktop.Platform",
"runtime-version": "25.08",
"sdk": "org.freedesktop.Sdk",
"command": "/app/bin/gameflow",
"base": "io.qt.qtwebengine.BaseApp",
"base-version": "6.10",
"finish-args": [
"--share=ipc",
"--share=network",
"--socket=pulseaudio",
"--socket=wayland",
"--socket=inherit-wayland-socket",
"--socket=x11",
"--socket=fallback-x11",
"--socket=session-bus",
"--socket=system-bus",
"--device=all",
"--filesystem=host",
"--filesystem=home",
"--filesystem=~/.steam/steam:rw",
"--filesystem=~/.steam:rw",
"--filesystem=~/.var/app/com.valvesoftware.Steam:rw",
"--filesystem=/run/udev:ro",
"--filesystem=/run/media",
"--filesystem=xdg-documents",
"--filesystem=xdg-desktop",
"--filesystem=xdg-run/gamescope-0:rw",
"--env=PKG_CONFIG_LIBDIR=/app/lib",
"--env=FLATPAK_BUILD=true",
"--allow=devel"
"--allow=devel",
"--talk-name=org.freedesktop.portal.OpenURI",
"--talk-name=org.freedesktop.Flatpak",
"--talk-name=org.a11y.Bus"
],
"modules": [
{
@ -29,7 +42,6 @@
"mkdir -p /app/lib",
"install -Dm644 256x256.png /app/share/icons/hicolor/256x256/apps/com.simeonradivoev.gameflow-deck.png",
"install -Dm644 com.simeonradivoev.gameflow-deck.desktop /app/share/applications/com.simeonradivoev.gameflow-deck.desktop",
"mv libvips-cpp.so.* /app/lib",
"mv * /app/share/gameflow/",
"mv /app/share/gameflow/gameflow /app/bin",
"mv /app/share/gameflow/bun /app/bin",
@ -39,15 +51,15 @@
"sources": [
{
"type": "dir",
"path": "../build/linux"
"path": "../../build/linux"
},
{
"type": "file",
"path": "../flatpak/com.simeonradivoev.gameflow-deck.desktop"
"path": "com.simeonradivoev.gameflow-deck.desktop"
},
{
"type": "file",
"path": "../src/mainview/public/256x256.png"
"path": "../../src/mainview/public/256x256.png"
},
{
"type": "script",
@ -72,23 +84,22 @@
"only-arches": [
"aarch64"
]
},
{
"type": "file",
"path": "../node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3",
"only-arches": [
"x86_64"
]
}
]
},
{
"name": "webview",
"buildsystem": "cmake-ninja",
"name": "NW.js",
"buildsystem": "simple",
"build-commands": [
"mkdir -p /app/bin/nw",
"mv * /app/bin/nw",
"chmod +x /app/bin/nw/nw"
],
"sources": [
{
"type": "dir",
"path": "../flatpak/webview"
"type": "archive",
"url": "https://dl.nwjs.io/v0.110.1/nwjs-v0.110.1-linux-x64.tar.gz",
"sha256": "d9a9ed2255e9ee87c9dd1860d9c7a479cea5279dcd80d3e80e23b083d325554a"
}
]
}

View file

@ -1,35 +0,0 @@
cmake_minimum_required(VERSION 3.16)
project(SimpleWebView LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Required for Qt WebEngine
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt6 REQUIRED COMPONENTS
Core
Widgets
WebEngineWidgets,
Gamepad
)
add_executable(webview
main.cpp
)
target_link_libraries(webview PRIVATE
Qt6::Core
Qt6::Widgets
Qt6::WebEngineWidgets,
Qt6::Gamepad
)
# Install binary into Flatpak prefix (/app)
install(TARGETS webview
RUNTIME DESTINATION bin
)

View file

@ -1,14 +0,0 @@
#include <QApplication>
#include <QWebEngineView>
#include <QWebEngineSettings>
#include <QUrl>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
if (argc < 2) { return 1; }
QWebEngineView view;
view.setUrl(QUrl(argv[1]));
view.showFullScreen();
return app.exec();
}