diff options
author | Samuel Newman <mozzius@protonmail.com> | 2025-03-06 00:01:17 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-05 16:01:17 -0800 |
commit | 9fde3957e76050a78c04509c84e5091f20975555 (patch) | |
tree | 557166acd4090279e9250e36223831ca1f87cc96 | |
parent | dae152da85d74f68e637d5867cdba46a20d79251 (diff) | |
download | voidsky-9fde3957e76050a78c04509c84e5091f20975555.tar.zst |
ota helper in dev mode (#7911)
-rw-r--r-- | src/screens/Settings/AboutSettings.tsx | 2 | ||||
-rw-r--r-- | src/screens/Settings/components/OTAInfo.tsx | 82 | ||||
-rw-r--r-- | src/screens/Settings/components/OTAInfo.web.tsx | 3 |
3 files changed, 87 insertions, 0 deletions
diff --git a/src/screens/Settings/AboutSettings.tsx b/src/screens/Settings/AboutSettings.tsx index 8b1b1f76d..afae1096c 100644 --- a/src/screens/Settings/AboutSettings.tsx +++ b/src/screens/Settings/AboutSettings.tsx @@ -17,6 +17,7 @@ import {Globe_Stroke2_Corner0_Rounded as GlobeIcon} from '#/components/icons/Glo import {Newspaper_Stroke2_Corner2_Rounded as NewspaperIcon} from '#/components/icons/Newspaper' import {Wrench_Stroke2_Corner2_Rounded as WrenchIcon} from '#/components/icons/Wrench' import * as Layout from '#/components/Layout' +import {OTAInfo} from './components/OTAInfo' type Props = NativeStackScreenProps<CommonNavigatorParams, 'AboutSettings'> export function AboutSettingsScreen({}: Props) { @@ -92,6 +93,7 @@ export function AboutSettingsScreen({}: Props) { </SettingsList.ItemText> <SettingsList.BadgeText>{bundleInfo}</SettingsList.BadgeText> </SettingsList.PressableItem> + {devModeEnabled && <OTAInfo />} </SettingsList.Container> </Layout.Content> </Layout.Screen> diff --git a/src/screens/Settings/components/OTAInfo.tsx b/src/screens/Settings/components/OTAInfo.tsx new file mode 100644 index 000000000..ee63d150f --- /dev/null +++ b/src/screens/Settings/components/OTAInfo.tsx @@ -0,0 +1,82 @@ +import * as Updates from 'expo-updates' +import {msg, Trans} from '@lingui/macro' +import {useLingui} from '@lingui/react' +import {useMutation, useQuery} from '@tanstack/react-query' + +import * as Toast from '#/view/com/util/Toast' +import {Button, ButtonIcon, ButtonText} from '#/components/Button' +import {ArrowRotateCounterClockwise_Stroke2_Corner0_Rounded as RetryIcon} from '#/components/icons/ArrowRotateCounterClockwise' +import {Shapes_Stroke2_Corner0_Rounded as ShapesIcon} from '#/components/icons/Shapes' +import {Loader} from '#/components/Loader' +import * as SettingsList from '../components/SettingsList' + +export function OTAInfo() { + const {_} = useLingui() + const { + data: isAvailable, + isPending: isPendingInfo, + isFetching: isFetchingInfo, + isError: isErrorInfo, + refetch, + } = useQuery({ + queryKey: ['ota-info'], + queryFn: async () => { + const status = await Updates.checkForUpdateAsync() + return status.isAvailable + }, + }) + + const {mutate: fetchAndLaunchUpdate, isPending: isPendingUpdate} = + useMutation({ + mutationFn: async () => { + await Updates.fetchUpdateAsync() + await Updates.reloadAsync() + }, + onError: error => + Toast.show(`Failed to update: ${error.message}`, 'xmark'), + }) + + if (!Updates.isEnabled || __DEV__) { + return null + } + + return ( + <SettingsList.Item> + <SettingsList.ItemIcon icon={ShapesIcon} /> + <SettingsList.ItemText> + {isAvailable ? ( + <Trans>OTA status: Available!</Trans> + ) : isErrorInfo ? ( + <Trans>OTA status: Error fetching update</Trans> + ) : isPendingInfo ? ( + <Trans>OTA status: ...</Trans> + ) : ( + <Trans>OTA status: None available</Trans> + )} + </SettingsList.ItemText> + <Button + label={isAvailable ? _(msg`Update`) : _(msg`Fetch update`)} + disabled={isFetchingInfo || isPendingUpdate} + variant="solid" + size="small" + color={isAvailable ? 'primary' : 'secondary_inverted'} + onPress={() => { + if (isFetchingInfo || isPendingUpdate) return + + if (isAvailable) { + fetchAndLaunchUpdate() + } else { + refetch() + } + }}> + {isAvailable ? ( + <ButtonText> + <Trans>Update</Trans> + </ButtonText> + ) : ( + <ButtonIcon icon={isFetchingInfo ? Loader : RetryIcon} /> + )} + </Button> + </SettingsList.Item> + ) +} diff --git a/src/screens/Settings/components/OTAInfo.web.tsx b/src/screens/Settings/components/OTAInfo.web.tsx new file mode 100644 index 000000000..af6464ee6 --- /dev/null +++ b/src/screens/Settings/components/OTAInfo.web.tsx @@ -0,0 +1,3 @@ +export function OTAInfo() { + return null +} |