import * as SQLite from 'expo-sqlite'; import * as FileSystem from 'expo-file-system'; 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, sqliteFullPath + DS + dbName ); const dbUri = sqliteFullPath + DS + dbName; await FileSystem.copyAsync({ from: dbAsset.localUri ?? '', to: dbUri, }); return dbUri; } export async function openDatabases() { try { const fileInfo = await FileSystem.getInfoAsync(sqliteFullPath); if (!fileInfo.exists) { 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))); } 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 = null; db2 = null; db1 = openDatabase(nmRegionsDBname); db2 = openDatabase(darePlacesDBname); } catch (error) { console.error('refreshDatabases - Error:'); console.error(JSON.stringify(error, null, 2)); } } export function getFirstDatabase() { return db1; } export function getSecondDatabase() { return db2; }