Browse Source

added flags sync

Viktoriia 1 year ago
parent
commit
f5da658f81

+ 31 - 0
src/database/flagsService/index.ts

@@ -0,0 +1,31 @@
+import * as FileSystem from 'expo-file-system';
+import { API_HOST } from 'src/constants';
+
+const downloadFlag = async (flagId: number) => {
+  try {
+    const flagUrl = `${API_HOST}/img/flags_new/${flagId}.png`;
+    const fileName = `${flagId}.png`;
+    let fileUri = `${FileSystem.documentDirectory}flags/${fileName}`;
+
+    await FileSystem.downloadAsync(flagUrl, fileUri);
+  } catch (error) {
+    console.error('Error downloading flags: ', error);
+  }
+};
+
+export const downloadFlags = async () => {
+  const totalFlags = 635;
+  const dirInfo = await FileSystem.getInfoAsync(`${FileSystem.documentDirectory}flags`);
+
+  if (!dirInfo.exists) {
+    await FileSystem.makeDirectoryAsync(`${FileSystem.documentDirectory}flags`, { intermediates: true });
+
+    for (let flagId = 1; flagId <= totalFlags; flagId++) {
+      try {
+        await downloadFlag(flagId);
+      } catch (error) {
+        console.error(`Error downloading flag ${flagId}:`, error);
+      }
+    }
+  }
+}

+ 4 - 2
src/database/index.ts

@@ -3,6 +3,7 @@ import NetInfo, { NetInfoState } from '@react-native-community/netinfo';
 import { StoreType, getOnlineStatus, storage } from 'src/storage';
 import { fetchLimitedRanking, fetchLpi, fetchInHistory, fetchInMemoriam } from '@api/ranking';
 import { initTilesDownload } from './tilesService';
+import { downloadFlags } from './flagsService';
 
 const db = SQLite.openDatabase('nomadManiaDb.db');
 
@@ -29,14 +30,15 @@ export const checkInternetConnection = async (): Promise<NetInfoState> => {
 
 export const syncDataWithServer = async (): Promise<void> => {
   const userId = storage.get('uid', StoreType.STRING) as string;
-
-  const { isConnected, isInternetReachable } = await checkInternetConnection();
+  const { isConnected } = await checkInternetConnection();
   const isOnline = getOnlineStatus();
+
   if (isConnected && isOnline) {
     console.log('Syncing data with server...');
     processSyncQueue();
     await updateAvatars();
     await updateMasterRanking();
+    await downloadFlags();
     await initTilesDownload(userId);
   }
 };

+ 3 - 2
src/screens/InAppScreens/TravellersScreen/Components/Profile.tsx

@@ -11,6 +11,7 @@ import TickIcon from '../../../../../assets/icons/tick.svg';
 import UNIcon from '../../../../../assets/icons/un_icon.svg';
 import NMIcon from '../../../../../assets/icons/nm_icon.svg';
 import { getOnlineStatus } from 'src/storage';
+import * as FileSystem from 'expo-file-system';
 
 type Props = {
   avatar: string;
@@ -70,12 +71,12 @@ export const Profile: FC<Props> = ({
                 Age: {date_of_birth}
               </Text>
               <Image
-                source={{ uri: isOnline ? API_HOST + '/img/flags_new/' + homebase_flag : '' }}
+                source={{ uri: `${FileSystem.documentDirectory}flags/${homebase_flag}` }}
                 style={styles.countryFlag}
               />
               {homebase2_flag ? (
                 <Image
-                  source={{ uri: isOnline ? API_HOST + '/img/flags_new/' + homebase2_flag : '' }}
+                  source={{ uri: `${FileSystem.documentDirectory}flags/${homebase2_flag}` }}
                   style={[styles.countryFlag, { marginLeft: -15 }]}
                 />
               ) : null}