From a332562928519fa458b1faea1532ac875d681a34 Mon Sep 17 00:00:00 2001 From: ppc Date: Wed, 4 Sep 2024 11:21:10 +0100 Subject: [PATCH] add server startup warning message --- amnet-native/app/ServerCardIn.tsx | 67 +++++++++++++++++------------- amnet-native/app/ServerManager.tsx | 2 +- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/amnet-native/app/ServerCardIn.tsx b/amnet-native/app/ServerCardIn.tsx index e1bb5fa..a10e840 100644 --- a/amnet-native/app/ServerCardIn.tsx +++ b/amnet-native/app/ServerCardIn.tsx @@ -1,17 +1,10 @@ import {BSON} from "realm"; -import {fetchServerInfo, getGameName, performCardIn} from "amnet-shared"; import React, {useCallback, useEffect, useLayoutEffect, useMemo, useState} from "react"; import {ActivityIndicator, Button, Paragraph, Title, useTheme} from "react-native-paper"; import {Alert, RefreshControl, ScrollView, Share, StyleSheet, TouchableOpacity, View} from "react-native"; import { - CircleCheck, - CircleDot, - CreditCard, - Nfc, - Plus, - SmartphoneNfcIcon, - Share as ShareIcon, - WifiOff, + CircleCheck, CircleDot, CreditCard, Nfc, Plus, SmartphoneNfcIcon, + Share as ShareIcon, WifiOff, TvMinimalPlay } from "lucide-react-native"; import {EmptyStatePlaceholder} from "../components/EmptyStatePlaceholder"; @@ -22,6 +15,13 @@ import RealmContext from "../models/RealmContext"; import {AMServer} from "../models/AMServer"; import {AMCard} from "../models/AMCard"; import ObjectId = BSON.ObjectId; +import { + AMServerConnectionInfo, + AMServerInstanceMetrics, + fetchServerInfo, + getGameName, + performCardIn +} from "amnet-shared"; const {useRealm, useQuery, useObject} = RealmContext; @@ -61,7 +61,7 @@ export default function ServerCardIn({route, navigation}) { const server = useObject(AMServer, ObjectId.createFromHexString(serverId)); useLayoutEffect(() => { - if (!server) { + if (server?.isValid() !== true) { return; } @@ -75,16 +75,7 @@ export default function ServerCardIn({route, navigation}) { }); }, [navigation, server]); - // set selected card (once) - useEffect(() => { - if (selectedCard?.isValid() === true) { - return; - } - - setSelectedCard(cards.length ? cards[0] : null); - }, [realm]); - - // refresh server info (server change or reload request) + // card selection, server connection checks useEffect(() => { if (server?.isValid() !== true) { navigation.goBack(); @@ -97,6 +88,10 @@ export default function ServerCardIn({route, navigation}) { return; } + if (selectedCard?.isValid() !== true) { + setSelectedCard(cards.length ? cards[0] : null); + } + const abortController = new AbortController(); fetchServerInfo(server.serverAddress, abortController.signal).then(r => { if (r) { @@ -143,6 +138,11 @@ export default function ServerCardIn({route, navigation}) { return () => abortController.abort(); }, [server, selectedCard]); + const performRefresh = () => { + setServerRefreshing(true); + setServerReloadCounter(serverReloadCounter + 1); + } + const gameName = useMemo(() => getGameName(server.gameId), [server.gameId]); const disableCardIn = useMemo(() => cardInCompleted !== null || !connectionTestResult, [cardInCompleted, connectionTestResult]); @@ -158,12 +158,7 @@ export default function ServerCardIn({route, navigation}) { return ( { - setServerRefreshing(true); - setServerReloadCounter(serverReloadCounter + 1); - }}/>}> + refreshControl={}> {gameName ? `Play ${gameName}` : "Selected Card"} @@ -218,17 +213,31 @@ export default function ServerCardIn({route, navigation}) { ) } -function StatusAlert(props: {server: AMServer, connectionEstablished: boolean}) { +function StatusAlert(props: { + server: AMServerConnectionInfo & Partial, + connectionEstablished: boolean +}) { if (!props.connectionEstablished) { return ( - + There was an issue connecting to {props.server.serverAddress}. Check the network connection and try again. - ); + ) + } + + // don't show if undefined (some older server versions) + if (props.server.timeSinceLastPoll === null) { + return ( + + + Scanning a card below may not have any effect until the service has fully started up. + + + ) } return null; diff --git a/amnet-native/app/ServerManager.tsx b/amnet-native/app/ServerManager.tsx index b55aad8..f04a46c 100644 --- a/amnet-native/app/ServerManager.tsx +++ b/amnet-native/app/ServerManager.tsx @@ -8,8 +8,8 @@ import {AMUICard, AMUICardDetail} from "../components/AMUICard"; import TimeAgo from "../components/TimeAgo"; import RealmContext from "../models/RealmContext"; -import {getGameName} from "../../amnet-shared"; import {AMServer} from "../models/AMServer"; +import {getGameName} from "amnet-shared"; const {useRealm, useQuery} = RealmContext;