diff --git a/src/renderer/containers/Header/UserMenu.tsx b/src/renderer/containers/Header/UserMenu.tsx index 6fd2c5049..9e79b279e 100644 --- a/src/renderer/containers/Header/UserMenu.tsx +++ b/src/renderer/containers/Header/UserMenu.tsx @@ -1,3 +1,4 @@ +import { DolphinLaunchType } from "@dolphin/types"; import AccountBoxIcon from "@mui/icons-material/AccountBox"; import EditIcon from "@mui/icons-material/Edit"; import LanguageIcon from "@mui/icons-material/Language"; @@ -11,6 +12,7 @@ import { ConfirmationModal } from "@/components/ConfirmationModal"; import type { IconMenuItem } from "@/components/IconMenu"; import { IconMenu } from "@/components/IconMenu"; import { useAccount } from "@/lib/hooks/useAccount"; +import { useDolphinBeta } from "@/lib/hooks/useSettings"; import { useServices } from "@/services"; import type { AuthUser } from "@/services/auth/types"; @@ -27,6 +29,9 @@ export const UserMenu = ({ user, handleError }: { user: AuthUser; handleError: ( const [openLogoutPrompt, setOpenLogoutPrompt] = React.useState(false); const [openNameChangePrompt, setOpenNameChangePrompt] = React.useState(false); const [openActivationDialog, setOpenActivationDialog] = React.useState(false); + const [useNetplayBeta, setUseNetplayBeta] = useDolphinBeta(DolphinLaunchType.NETPLAY); + const [usePlaybackBeta, setUsePlaybackBeta] = useDolphinBeta(DolphinLaunchType.PLAYBACK); + const onLogout = async () => { try { await authService.logout(); @@ -35,6 +40,12 @@ export const UserMenu = ({ user, handleError }: { user: AuthUser; handleError: ( handleError(err); } finally { handleClose(); + if (useNetplayBeta) { + await setUseNetplayBeta(false); + } + if (usePlaybackBeta) { + await setUsePlaybackBeta(false); + } } }; diff --git a/src/renderer/lib/hooks/useApp.ts b/src/renderer/lib/hooks/useApp.ts index 6e986811a..7203f3ad9 100644 --- a/src/renderer/lib/hooks/useApp.ts +++ b/src/renderer/lib/hooks/useApp.ts @@ -6,8 +6,10 @@ import { useAccount } from "@/lib/hooks/useAccount"; import { useToasts } from "@/lib/hooks/useToasts"; import { useServices } from "@/services"; import type { AuthUser } from "@/services/auth/types"; +import { SubscriptionTier } from "@/services/slippi/types"; import { useDesktopApp } from "./useQuickStart"; +import { useDolphinBeta } from "./useSettings"; const log = window.electron.log; @@ -42,6 +44,8 @@ export const useAppInitialization = () => { const setServerError = useAccount((store) => store.setServerError); const setDesktopAppExists = useDesktopApp((store) => store.setExists); const setDesktopAppDolphinPath = useDesktopApp((store) => store.setDolphinPath); + const [useNetplayBeta, setUseNetplayBeta] = useDolphinBeta(DolphinLaunchType.NETPLAY); + const [usePlaybackBeta, setUsePlaybackBeta] = useDolphinBeta(DolphinLaunchType.PLAYBACK); const initialize = async () => { if (initializing || initialized) { @@ -70,6 +74,15 @@ export const useAppInitialization = () => { const userData = await slippiBackendService.fetchUserData(); setServerError(false); setUserData(userData); + if (userData?.subscriptionTier === undefined || userData.subscriptionTier === SubscriptionTier.NONE) { + log.warn("user is not subscribed, removing use of beta builds"); + if (useNetplayBeta) { + await setUseNetplayBeta(false); + } + if (usePlaybackBeta) { + await setUsePlaybackBeta(false); + } + } } catch (err) { setServerError(true); log.warn(err); @@ -78,6 +91,13 @@ export const useAppInitialization = () => { connection or Slippi is experiencing some downtime. Playing online may or may not work.`; showError(message); } + } else { + if (useNetplayBeta) { + await setUseNetplayBeta(false); + } + if (usePlaybackBeta) { + await setUsePlaybackBeta(false); + } } })(), );