From 64e3a2db3a538b4b538e6b0520943b5a90eff5a5 Mon Sep 17 00:00:00 2001
From: Kurt Himebauch <136133082+xXJSONDeruloXx@users.noreply.github.com>
Date: Thu, 10 Sep 2026 16:32:58 -0400
Subject: feat: add flatpak profiles tab and now playing
---
src/components/Content.tsx | 84 ++++++++++++++++++++++++++++++++--------------
1 file changed, 59 insertions(+), 25 deletions(-)
(limited to 'src/components/Content.tsx')
diff --git a/src/components/Content.tsx b/src/components/Content.tsx
index 8f83e85..ffb6eef 100644
--- a/src/components/Content.tsx
+++ b/src/components/Content.tsx
@@ -1,18 +1,22 @@
import { Tabs } from "@decky/ui";
import { useEffect, useRef, useState } from "react";
-import { FaFileAlt, FaGamepad, FaList, FaTools } from "react-icons/fa";
+import { FaCube, FaFileAlt, FaGamepad, FaList, FaTools } from "react-icons/fa";
import { ConfigurationData } from "../config/configSchema";
+import { useFlatpakConfiguration } from "../hooks/useFlatpakConfiguration";
import { useGameConfiguration } from "../hooks/useGameConfiguration";
import { useInstallation } from "../hooks/useLsfgHooks";
import { tabStyles } from "../styles";
import { ConfigFileTab } from "./ConfigFileTab";
import { ConfigurationTab } from "./ConfigurationTab";
+import { FlatpakNowPlayingTab } from "./FlatpakNowPlayingTab";
+import { FlatpakTab } from "./FlatpakTab";
import { NowPlayingTab } from "./NowPlayingTab";
import { SetupTab } from "./SetupTab";
const tabIcons = {
nowPlaying: ,
games: ,
+ flatpak: ,
configFile: ,
setup: ,
};
@@ -63,38 +67,46 @@ export function Content() {
install,
uninstall,
} = useInstallation(reload);
- const [tab, setTab] = useState("Setup");
- const [showDebugTab, setShowDebugTab] = usePersistentBoolean(DEBUG_TAB_VISIBILITY_KEY, true);
- const previousRunningAppId = useRef(null);
const setupComplete =
isInstalled &&
losslessScalingInstalled &&
steamBranchStatus?.success === true &&
steamBranchStatus.installed &&
!steamBranchStatus.needs_switch;
+ const flatpak = useFlatpakConfiguration(setupComplete);
+ const [tab, setTab] = useState("Setup");
+ const [showDebugTab, setShowDebugTab] = usePersistentBoolean(DEBUG_TAB_VISIBILITY_KEY, true);
+ const previousRunningWorkload = useRef(null);
+ const runningFlatpak = flatpak.runningApp;
+ const hasNowPlaying = Boolean(runningGame?.configured || runningFlatpak);
+ const runningWorkload = runningGame?.configured
+ ? `steam:${runningGame.appid}`
+ : runningFlatpak ? `flatpak:${runningFlatpak.app_id}` : null;
useEffect(() => {
if (!setupComplete) {
setTab("Setup");
return;
}
- setTab((current) => current === "Setup" ? (runningGame?.configured ? "NowPlaying" : "Games") : current);
- }, [runningGame?.appid, runningGame?.configured, setupComplete]);
+ setTab((current) => current === "Setup" ? (hasNowPlaying ? "NowPlaying" : "Games") : current);
+ }, [hasNowPlaying, setupComplete]);
useEffect(() => {
if (!setupComplete) return;
- const appid = runningGame?.appid || null;
- const previous = previousRunningAppId.current;
- previousRunningAppId.current = appid;
- if (appid && appid !== previous) setTab(runningGame?.configured ? "NowPlaying" : "Games");
- else if (!appid && previous) {
+ const previous = previousRunningWorkload.current;
+ previousRunningWorkload.current = runningWorkload;
+ if (runningWorkload && runningWorkload !== previous) setTab("NowPlaying");
+ else if (!runningWorkload && previous) {
setTab((current) => current === "NowPlaying" ? "Games" : current);
}
- }, [runningGame?.appid, runningGame?.configured, setupComplete]);
+ }, [runningWorkload, setupComplete]);
useEffect(() => {
- if (isInstalled) void reload();
- }, [isInstalled, reload]);
+ if (isInstalled) {
+ void reload();
+ void flatpak.reload();
+ }
+ }, [isInstalled, reload, flatpak.reload]);
useEffect(() => {
if (!showDebugTab && tab === "ConfigFile") setTab("Games");
@@ -120,19 +132,24 @@ export function Content() {
/>
);
+ const nowPlaying = runningGame?.configured ? (
+ handleConfigChange(field, value)}
+ />
+ ) : runningFlatpak ? (
+
+ ) : null;
+
const tabs = setupComplete
? [
- ...(runningGame?.configured ? [{
- id: "NowPlaying",
- title: tabIcons.nowPlaying,
- content: (
- handleConfigChange(field, value)}
- />
- ),
- }] : []),
+ ...(nowPlaying ? [{ id: "NowPlaying", title: tabIcons.nowPlaying, content: nowPlaying }] : []),
{
id: "Games",
title: tabIcons.games,
@@ -153,6 +170,23 @@ export function Content() {
/>
),
},
+ {
+ id: "Flatpak",
+ title: tabIcons.flatpak,
+ content: (
+
+ ),
+ },
...(showDebugTab ? [{ id: "ConfigFile", title: tabIcons.configFile, content: }] : []),
{ id: "Setup", title: tabIcons.setup, content: setup },
]
--
cgit v1.2.3