Forráskód Böngészése

NM + DARE dbs - small fixes

Daniel 1 éve
szülő
commit
0f1e4674d5
2 módosított fájl, 60 hozzáadás és 16 törlés
  1. 58 15
      src/db/index.ts
  2. 2 1
      src/screens/InAppScreens/MapScreen/index.tsx

+ 58 - 15
src/db/index.ts

@@ -4,43 +4,86 @@ import { Asset } from 'expo-asset';
 
 let db1: SQLite.SQLiteDatabase | null = null;
 let db2: SQLite.SQLiteDatabase | null = null;
+const nmRegionsDBname = 'nmRegions.db';
+const darePlacesDBname = 'darePlaces.db';
+const sqliteDirectory = 'SQLite';
+const sqliteFullPath = FileSystem.documentDirectory + sqliteDirectory;
+const DS = '/';
 
 async function copyDatabaseFile(dbName: string, dbAsset: Asset) {
+  console.log("DB copy start - " + dbName);
   await dbAsset.downloadAsync();
   await FileSystem.downloadAsync(
     dbAsset.uri,
-    FileSystem.documentDirectory + "SQLite/" + dbName
+    FileSystem.documentDirectory + DS + dbName
   );
-  
-  const dbUri = FileSystem.documentDirectory + `SQLite/${dbName}`;
+
+  const dbUri = sqliteFullPath + DS + dbName;
 
   await FileSystem.copyAsync({
     from: dbAsset.localUri ?? '',
     to: dbUri,
   });
-
+  console.log("DB copy OK - " + dbUri);
   return dbUri;
 }
 
 export async function openDatabases() {
   try {
-    const sqlDir = FileSystem.documentDirectory + "SQLite";
-    const fileInfo = await FileSystem.getInfoAsync(sqlDir);
-
+    const fileInfo = await FileSystem.getInfoAsync(sqliteFullPath);
     if (!fileInfo.exists) {
-      await FileSystem.makeDirectoryAsync(sqlDir, { intermediates: true });
-      console.log('openDatabase - Downloading databases');
-      await copyDatabaseFile('nmRegions.db', Asset.fromModule(require('../../assets/db/nmRegions.db')));
-      await copyDatabaseFile('darePlaces.db', Asset.fromModule(require('../../assets/db/darePlaces.db')));
+      await FileSystem.makeDirectoryAsync(sqliteFullPath, { intermediates: true });
+    }
+
+    const nmRegionsDB = await FileSystem.getInfoAsync(sqliteFullPath + DS + nmRegionsDBname, { size: true });
+    if (!nmRegionsDB.exists) {
+      await copyDatabaseFile(nmRegionsDBname, Asset.fromModule(require('../../assets/db/' + nmRegionsDBname)));
+    }
+    if (nmRegionsDB.size == 0) {
+      await FileSystem.deleteAsync(sqliteFullPath + DS + nmRegionsDBname);
+      await copyDatabaseFile(nmRegionsDBname, Asset.fromModule(require('../../assets/db/' + nmRegionsDBname)));
+    }
+
 
-      console.log('openDatabase - Databases downloaded');
+    const darePlacesDB = await FileSystem.getInfoAsync(sqliteFullPath + DS + nmRegionsDBname, { size: true });
+    if (!darePlacesDB.exists) {
+      await copyDatabaseFile(darePlacesDBname, Asset.fromModule(require('../../assets/db/' + darePlacesDBname)));
     }
+    
+    if (darePlacesDB.size == 0) {
+      await FileSystem.deleteAsync(sqliteFullPath + DS + darePlacesDBname);
+      await copyDatabaseFile(darePlacesDBname, Asset.fromModule(require('../../assets/db/' + darePlacesDBname)));
+    }
+
+    const openDatabase = (dbName: string) => SQLite.openDatabase(dbName);
+    db1 = openDatabase(nmRegionsDBname);
+    db2 = openDatabase(darePlacesDBname);
+  } catch (error) {
+    console.error('openDatabases - Error:');
+    console.error(JSON.stringify(error, null, 2));
+  }
+}
+
+export async function refreshDatabases() {
+  try {
+    const fileInfo = await FileSystem.getInfoAsync(sqliteFullPath);
+    if (!fileInfo.exists) {
+      await FileSystem.makeDirectoryAsync(sqliteFullPath, { intermediates: true });
+    }
+    await FileSystem.deleteAsync(sqliteFullPath + DS + nmRegionsDBname, {idempotent: true});
+    await copyDatabaseFile(nmRegionsDBname, Asset.fromModule(require('../../assets/db/' + nmRegionsDBname)));
+
+    await FileSystem.deleteAsync(sqliteFullPath + DS +  darePlacesDBname , {idempotent: true} );
+    await copyDatabaseFile(darePlacesDBname, Asset.fromModule(require('../../assets/db/' + darePlacesDBname)));
 
     const openDatabase = (dbName: string) => SQLite.openDatabase(dbName);
-    db1 = openDatabase("nmRegions.db");
-    db2 = openDatabase("darePlaces.db");
+    db1 = null;
+    db2 = null;
+    db1 = openDatabase(nmRegionsDBname);
+    db2 = openDatabase(darePlacesDBname);
   } catch (error) {
-    console.error('openDatabase - Error:', error);
+    console.error('refreshDatabases - Error:');
+    console.error(JSON.stringify(error, null, 2));
   }
 }
 

+ 2 - 1
src/screens/InAppScreens/MapScreen/index.tsx

@@ -16,7 +16,7 @@ import regions from '../../../../assets/geojson/nm2022.json';
 import dareRegions from '../../../../assets/geojson/mqp.json';
 
 import NetInfo from '@react-native-community/netinfo';
-import { getFirstDatabase, getSecondDatabase } from '../../../db';
+import { getFirstDatabase, getSecondDatabase, refreshDatabases } from '../../../db';
 import { LocationPopup, RegionPopup, WarningModal } from '../../../components';
 
 import { styles } from './style';
@@ -317,6 +317,7 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation }) => {
         })
         .catch((error) => {
           console.error('Error fetching data', error);
+          refreshDatabases();
         });
 
       const bounds = turf.bbox(foundRegion);