From f073c93795f65d624c3ef5a5612612b757e87749 Mon Sep 17 00:00:00 2001 From: Adrian Gri <33498069+AdrianGri@users.noreply.github.com> Date: Wed, 10 May 2023 01:02:35 -0400 Subject: [PATCH 1/2] add new atom --- src/components/common/DefaultHeader.tsx | 13 +++++++++---- src/hooks/useInitializeApp.ts | 10 ++++++++++ src/pages/DiscoverPage/CreateChatModal.tsx | 6 ++++-- src/pages/DiscoverPage/DiscoverPage.tsx | 6 ++++-- src/services/atoms.ts | 8 ++++++++ 5 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/components/common/DefaultHeader.tsx b/src/components/common/DefaultHeader.tsx index 0a9dbdff..3433da3c 100644 --- a/src/components/common/DefaultHeader.tsx +++ b/src/components/common/DefaultHeader.tsx @@ -1,11 +1,15 @@ import { useNavigation } from '@react-navigation/native'; import { StackNavigationProp } from '@react-navigation/stack'; import { Text } from '@rneui/themed'; -import { useAtom, useAtomValue } from 'jotai'; +import { useAtom, useAtomValue, useSetAtom } from 'jotai'; import React from 'react'; import { StyleSheet, TouchableOpacity, View } from 'react-native'; -import { bridgefyStatusAtom, currentUserInfoAtom, disableRefreshAtom } from '../../services/atoms'; -import { refreshSDK } from '../../services/bridgefy-link'; +import { + bridgefyStatusAtom, + currentUserInfoAtom, + disableRefreshAtom, + refreshSDKAtom, +} from '../../services/atoms'; import { BridgefyStatus } from '../../utils/globals'; import { theme } from '../../utils/theme'; import SettingsIcon from '../ui/Icons/HeaderIcons/SettingsIcon'; @@ -18,6 +22,7 @@ const DefaultHeader = ({ pageName }: { pageName: string }) => { const userInfo = useAtomValue(currentUserInfoAtom); const [disableRefresh, setDisableRefresh] = useAtom(disableRefreshAtom); const [bridgefyStatus] = useAtom(bridgefyStatusAtom); + const refreshSDK = useSetAtom(refreshSDKAtom); if (!userInfo.userID && bridgefyStatus !== BridgefyStatus.DESTROYED) { throw new Error('No user info found.'); @@ -25,7 +30,7 @@ const DefaultHeader = ({ pageName }: { pageName: string }) => { async function refreshApp() { setDisableRefresh(true); - await refreshSDK(); + refreshSDK(); // Wait 5 seconds before re-enabling the refresh button setTimeout(() => { setDisableRefresh(false); diff --git a/src/hooks/useInitializeApp.ts b/src/hooks/useInitializeApp.ts index 1a18bc04..1d0ad0f4 100644 --- a/src/hooks/useInitializeApp.ts +++ b/src/hooks/useInitializeApp.ts @@ -17,6 +17,7 @@ import { publicChatInfoAtom, removeConnectionAtom, SecureStatus, + shouldStartSDKAtom, } from '../services/atoms'; import { addMessageToConversationAtom, @@ -127,6 +128,8 @@ export default function useInitializeApp() { const appState = useRef(AppState.currentState); const [appStateVisible, setAppStateVisible] = useAtom(appVisibleAtom); + const [shouldStartSDK, setShouldStartSDK] = useAtom(shouldStartSDKAtom); + const setNotificationContent = useSetAtom(notificationContentAtom); const addMessageToConversation = useSetAtom(addMessageToConversationAtom); @@ -350,6 +353,13 @@ export default function useInitializeApp() { // eslint-disable-next-line react-hooks/exhaustive-deps }, [event]); + useEffect(() => { + if (shouldStartSDK && bridgefyStatus === BridgefyStatus.OFFLINE) { + startSDK(); + setShouldStartSDK(false); + } + }, [shouldStartSDK, bridgefyStatus, setShouldStartSDK]); + /* EVENT LISTENERS diff --git a/src/pages/DiscoverPage/CreateChatModal.tsx b/src/pages/DiscoverPage/CreateChatModal.tsx index 17a10ae8..67ae00f1 100644 --- a/src/pages/DiscoverPage/CreateChatModal.tsx +++ b/src/pages/DiscoverPage/CreateChatModal.tsx @@ -13,10 +13,11 @@ import { connectionInfoAtom, connectionInfoAtomInterface, createChatWithUserAtom, + refreshSDKAtom, SecureStatus, StoredConnectionInfo, } from '../../services/atoms'; -import { establishSecureConnection, refreshSDK } from '../../services/bridgefy-link'; +import { establishSecureConnection } from '../../services/bridgefy-link'; import { getConnectionName } from '../../services/connections'; import { vars } from '../../utils/theme'; @@ -40,6 +41,7 @@ const CreateChatModal = () => { const [modalState, setModalState] = useState(ModalState.CREATE); const [connections] = useAtom(activeConnectionsAtom); const [allContacts] = useAtom(allContactsAtom); + const refreshSDK = useSetAtom(refreshSDKAtom); const insets = useSafeAreaInsets(); const navigation = useNavigation>(); @@ -165,7 +167,7 @@ const CreateChatModal = () => { ) { refreshSDK(); } - }, [chatContact, connectionInfo, modalState]); + }, [chatContact, connectionInfo, modalState, refreshSDK]); // When the user accepts the chat request, navigate to the chat screen useEffect(() => { diff --git a/src/pages/DiscoverPage/DiscoverPage.tsx b/src/pages/DiscoverPage/DiscoverPage.tsx index ccf03a4a..aaaebbb5 100644 --- a/src/pages/DiscoverPage/DiscoverPage.tsx +++ b/src/pages/DiscoverPage/DiscoverPage.tsx @@ -16,8 +16,8 @@ import { createChatWithUserAtom, disableRefreshAtom, getActiveConnectionsAtom, + refreshSDKAtom, } from '../../services/atoms'; -import { refreshSDK } from '../../services/bridgefy-link'; import { theme, vars } from '../../utils/theme'; interface EllipsisTextProps { @@ -48,12 +48,14 @@ const DiscoverPage = () => { const [connections] = useAtom(getActiveConnectionsAtom); const [disableRefresh, setDisableRefresh] = useAtom(disableRefreshAtom); const [contacts] = useAtom(allContactsAtom); + const refreshSDK = useSetAtom(refreshSDKAtom); + const createChatWithUser = useSetAtom(createChatWithUserAtom); const navigation = useNavigation>(); async function refreshApp() { setDisableRefresh(true); - await refreshSDK(); + refreshSDK(); // Wait 5 seconds before re-enabling the refresh button setTimeout(() => { setDisableRefresh(false); diff --git a/src/services/atoms.ts b/src/services/atoms.ts index 18f66d10..9c94253b 100644 --- a/src/services/atoms.ts +++ b/src/services/atoms.ts @@ -2,6 +2,7 @@ import { atom } from 'jotai'; import { Content } from '../components/ui/InAppNotification'; import { atomWithMMKV } from '../utils/atomWithMMKV'; import { BridgefyState, BridgefyStatus } from '../utils/globals'; +import { stopSDK } from './bridgefy-link'; import { ContactInfo, CONTACT_INFO_KEY, @@ -61,6 +62,8 @@ export const disableRefreshAtom = atom(false); export const createChatWithUserAtom = atom(undefined); +export const shouldStartSDKAtom = atom(false); + // allContactsAtom: List of all contacts. export const allContactsAtom = atom((get) => { const contactInfo = get(contactInfoAtom); @@ -128,6 +131,11 @@ export const connectionInfoAtomInterface = atom( } ); +export const refreshSDKAtom = atom(null, (get, set) => { + set(shouldStartSDKAtom, true); + stopSDK(); +}); + // TODO: (adriangri) Find a better solution to this export const resetAllDataAtom = atom(null, (get, set) => { wipeDatabase(); From 33970005d1a9d1f168b384895777f7dc3f77ae88 Mon Sep 17 00:00:00 2001 From: Adrian Gri <33498069+AdrianGri@users.noreply.github.com> Date: Wed, 10 May 2023 01:06:42 -0400 Subject: [PATCH 2/2] Delete current refreshSDK function --- src/services/bridgefy-link.ts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/services/bridgefy-link.ts b/src/services/bridgefy-link.ts index 39f57af5..e3adeeee 100644 --- a/src/services/bridgefy-link.ts +++ b/src/services/bridgefy-link.ts @@ -212,19 +212,6 @@ export const linkListenersToEvents = (handleEvent: (event: EventPacket) => void) ); }; -export async function refreshSDK(): Promise { - console.log('(refreshSDK) Restarting Bridgefy...'); - await stopSDK().catch((e) => { - console.warn(e); - return; - }); - await startSDK().catch((e) => { - console.warn(e); - return; - }); - return Promise.resolve(); -} - export async function startSDK(): Promise { console.log('(startSDK) Starting Bridgefy...'); return new Promise((resolve, reject) => {