浏览代码

conflicts

Viktoriia 8 月之前
父节点
当前提交
3494c65bc5
共有 6 个文件被更改,包括 45 次插入10 次删除
  1. 5 4
      Route.tsx
  2. 12 2
      app.config.ts
  3. 1 1
      package.json
  4. 2 2
      src/components/ConnectionBanner/ConnectionBanner.tsx
  5. 14 0
      src/components/SplashSpinner/index.tsx
  6. 11 1
      src/db/index.ts

+ 5 - 4
Route.tsx

@@ -92,6 +92,7 @@ import MessagesNotificationsScreen from 'src/screens/NotificationsScreen/Message
 import SystemNotificationsScreen from 'src/screens/NotificationsScreen/SystemNotificationsScreen';
 import SystemNotificationsScreen from 'src/screens/NotificationsScreen/SystemNotificationsScreen';
 import MessagesScreen from 'src/screens/InAppScreens/MessagesScreen';
 import MessagesScreen from 'src/screens/InAppScreens/MessagesScreen';
 import ChatScreen from 'src/screens/InAppScreens/MessagesScreen/ChatScreen';
 import ChatScreen from 'src/screens/InAppScreens/MessagesScreen/ChatScreen';
+import { Splash } from 'src/components/SplashSpinner';
 
 
 enableScreens();
 enableScreens();
 
 
@@ -162,6 +163,7 @@ const Route = () => {
     const prepareApp = async () => {
     const prepareApp = async () => {
       await checkNmToken();
       await checkNmToken();
       await checkTokenAndUpdate();
       await checkTokenAndUpdate();
+      await openDatabases();
       setDbLoaded(true);
       setDbLoaded(true);
       await findFastestServer();
       await findFastestServer();
     };
     };
@@ -180,16 +182,15 @@ const Route = () => {
 
 
   useEffect(() => {
   useEffect(() => {
     const hideSplashScreen = async () => {
     const hideSplashScreen = async () => {
-      if (fontsLoaded && dbLoaded) {
+      if (fontsLoaded) {
         await SplashScreen.hideAsync();
         await SplashScreen.hideAsync();
-        await openDatabases();
         await fetchAndSaveUserInfo();
         await fetchAndSaveUserInfo();
         await setupDatabaseAndSync();
         await setupDatabaseAndSync();
       }
       }
     };
     };
 
 
     hideSplashScreen();
     hideSplashScreen();
-  }, [fontsLoaded, dbLoaded]);
+  }, [fontsLoaded]);
 
 
   const checkTokenAndUpdate = async () => {
   const checkTokenAndUpdate = async () => {
     const storedToken = storage.get('deviceToken', StoreType.STRING);
     const storedToken = storage.get('deviceToken', StoreType.STRING);
@@ -205,7 +206,7 @@ const Route = () => {
   };
   };
 
 
   if (!fontsLoaded || !dbLoaded) {
   if (!fontsLoaded || !dbLoaded) {
-    return null;
+    return <Splash />;
   }
   }
 
 
   const screenOptions = ({
   const screenOptions = ({

+ 12 - 2
app.config.ts

@@ -52,7 +52,7 @@ export default ({ config }: ConfigContext): ExpoConfig => ({
     url: 'https://u.expo.dev/c31c6828-3c32-4c7a-aabc-f9b8336b3b66'
     url: 'https://u.expo.dev/c31c6828-3c32-4c7a-aabc-f9b8336b3b66'
   },
   },
   platforms: ['ios', 'android'],
   platforms: ['ios', 'android'],
-  assetBundlePatterns: ['**/*'],
+  assetBundlePatterns: ['**/*', "assets/db/*.db"],
   ios: {
   ios: {
     supportsTablet: false,
     supportsTablet: false,
     bundleIdentifier: env.PACKAGE_NAME_IOS, // com.nomadmania.app2
     bundleIdentifier: env.PACKAGE_NAME_IOS, // com.nomadmania.app2
@@ -134,7 +134,17 @@ export default ({ config }: ConfigContext): ExpoConfig => ({
         url: 'https://sentry.io/'
         url: 'https://sentry.io/'
       }
       }
     ],
     ],
-    ['expo-asset', 'expo-font'],
+    [
+      'expo-asset',
+      {
+        assets: [
+          "./assets/db/nmRegions.db",
+          "./assets/db/darePlaces.db",
+          "./assets/db/nmCountries.db"
+        ]
+      }
+    ],
+    'expo-font',
     [
     [
       "expo-av",
       "expo-av",
       {
       {

+ 1 - 1
package.json

@@ -44,7 +44,7 @@
     "expo-location": "~17.0.1",
     "expo-location": "~17.0.1",
     "expo-notifications": "~0.28.16",
     "expo-notifications": "~0.28.16",
     "expo-splash-screen": "~0.27.5",
     "expo-splash-screen": "~0.27.5",
-    "expo-sqlite": "~14.0.6",
+    "expo-sqlite": "^14.0.6",
     "expo-updates": "~0.25.24",
     "expo-updates": "~0.25.24",
     "formik": "^2.4.5",
     "formik": "^2.4.5",
     "moment": "^2.29.4",
     "moment": "^2.29.4",

+ 2 - 2
src/components/ConnectionBanner/ConnectionBanner.tsx

@@ -3,7 +3,7 @@ import { View, Text } from 'react-native';
 import { useConnection } from 'src/contexts/ConnectionContext';
 import { useConnection } from 'src/contexts/ConnectionContext';
 import { styles } from './styles';
 import { styles } from './styles';
 import { initializeBanner, showBanner } from 'src/utils/bannerUtils';
 import { initializeBanner, showBanner } from 'src/utils/bannerUtils';
-import { refreshDatabases } from 'src/db';
+import { openDatabases } from 'src/db';
 
 
 const ConnectionBanner = () => {
 const ConnectionBanner = () => {
   const netInfo = useConnection();
   const netInfo = useConnection();
@@ -16,7 +16,7 @@ const ConnectionBanner = () => {
 
 
     if (netInfo?.isInternetReachable !== null) {
     if (netInfo?.isInternetReachable !== null) {
       if (hadConnection === false && netInfo?.isInternetReachable) {
       if (hadConnection === false && netInfo?.isInternetReachable) {
-        refreshDatabases();
+        openDatabases();
         showBanner('Internet connection restored!');
         showBanner('Internet connection restored!');
       } else if (netInfo?.isInternetReachable === false) {
       } else if (netInfo?.isInternetReachable === false) {
         showBanner('No internet connection!');
         showBanner('No internet connection!');

+ 14 - 0
src/components/SplashSpinner/index.tsx

@@ -0,0 +1,14 @@
+import React from 'react';
+import { ActivityIndicator, ImageBackground } from 'react-native';
+import { Colors } from 'src/theme';
+
+export const Splash = () => {
+  return (
+    <ImageBackground
+      source={require('../../../assets/loading-screen.png')}
+      style={{ display: 'flex', height: '100%', justifyContent: 'center', alignItems: 'center' }}
+    >
+      <ActivityIndicator size={'large'} color={Colors.WHITE} style={{ paddingTop: '70%' }} />
+    </ImageBackground>
+  );
+};

+ 11 - 1
src/db/index.ts

@@ -4,6 +4,7 @@ import { Asset } from 'expo-asset';
 import { API_HOST } from 'src/constants';
 import { API_HOST } from 'src/constants';
 import { storage } from 'src/storage';
 import { storage } from 'src/storage';
 import { fetchLastDareDbUpdate, fetchLastRegionsDbUpdate } from '@api/app';
 import { fetchLastDareDbUpdate, fetchLastRegionsDbUpdate } from '@api/app';
+import NetInfo from '@react-native-community/netinfo';
 
 
 let db1: SQLite.SQLiteDatabase | null = null;
 let db1: SQLite.SQLiteDatabase | null = null;
 let db2: SQLite.SQLiteDatabase | null = null;
 let db2: SQLite.SQLiteDatabase | null = null;
@@ -16,9 +17,18 @@ const sqliteFullPath = FileSystem.documentDirectory + sqliteDirectory;
 const DS = '/';
 const DS = '/';
 
 
 async function copyDatabaseFile(dbName: string, dbAsset: Asset) {
 async function copyDatabaseFile(dbName: string, dbAsset: Asset) {
+  const state = await NetInfo.fetch();
+
+  if (!state.isConnected || state.isInternetReachable === false) return;
+
+  if (state.isInternetReachable === null) {
+    await new Promise(resolve => setTimeout(resolve, 1000));
+    const retryState = await NetInfo.fetch();
+    if (!retryState.isConnected || retryState.isInternetReachable === false) return;
+  }
+  
   console.log('DB copy start - ' + dbName);
   console.log('DB copy start - ' + dbName);
   await dbAsset.downloadAsync();
   await dbAsset.downloadAsync();
-  await FileSystem.downloadAsync(dbAsset.uri, sqliteFullPath + DS + dbName);
 
 
   const dbUri = sqliteFullPath + DS + dbName;
   const dbUri = sqliteFullPath + DS + dbName;