Viktoriia 1 nedēļu atpakaļ
vecāks
revīzija
3e48a061fb

+ 10 - 4
src/database/index.ts

@@ -72,14 +72,20 @@ export const updateMasterRanking = async () => {
 };
 
 export async function initializeDatabase(token: string) {
-  const chats = await database.get('chats').query().fetch();
-  if (chats.length) {
+  const chatsCount = await database.get('chats').query().fetchCount();
+  if (chatsCount > 0) {
+    const messagesCount = await database.get('messages').query().fetchCount();
+    if (messagesCount === 0) {
+      await importChatsFromServer(token);
+      return;
+    }
+
     await backfillChatKeys();
     await dedupeChats();
-    console.log('🟢 Database already initialized');
+    console.log('Database already initialized');
     return;
   } else {
-    console.log('🔵 Importing chats from server...');
+    console.log('Importing chats from server...');
     await importChatsFromServer(token);
   }
 

+ 9 - 2
src/screens/InAppScreens/MessagesScreen/ChatScreen/index.tsx

@@ -1132,7 +1132,7 @@ const ChatScreen = ({ route }: { route: any }) => {
   }, [chatData, isRefetching]);
 
   useEffect(() => {
-    if (!isFetchedAfterMount || isFetching) return;
+    if (!isFetchedAfterMount || isFetching || didInitUnreadRef.current) return;
     if (
       giftedMessages?.length === 0 &&
       !modalInfo.visible &&
@@ -1172,13 +1172,20 @@ const ChatScreen = ({ route }: { route: any }) => {
       if (!older.length) {
         setHasMoreMessages(false);
       } else {
-        setExtraMessages((prev) => [...prev, ...older]);
+        setExtraMessages((prev) => {
+          const existingIds = new Set([...allMessages, ...prev].map((m) => m.messageId));
+
+          const deduped = older.filter((m) => !existingIds.has(m.messageId));
+
+          return [...prev, ...deduped];
+        });
       }
 
       setIsLoadingEarlier(false);
     };
 
     if (visibleBeforeId && visibleBeforeId !== -1) {
+      console.log('visibleBeforeId', visibleBeforeId);
       getExtraData();
     }
   }, [visibleBeforeId]);

+ 11 - 1
src/screens/InAppScreens/MessagesScreen/GroupChatScreen/index.tsx

@@ -1199,7 +1199,17 @@ const GroupChatScreen = ({ route }: { route: any }) => {
       if (!older.length) {
         setHasMoreMessages(false);
       } else {
-        setExtraMessages((prev) => [...prev, ...older]);
+        setExtraMessages((prev) => {
+          const existingIds = new Set(
+            [...allMessages, ...prev].map((m) => m.messageId)
+          );
+        
+          const deduped = older.filter(
+            (m) => !existingIds.has(m.messageId)
+          );
+        
+          return [...prev, ...deduped];
+        });
       }
 
       setIsLoadingEarlier(false);

+ 2 - 2
src/watermelondb/features/chat/data/importChatsFromServer.ts

@@ -17,7 +17,7 @@ export async function importAllMessagesForChat(
   params: { chatUid?: number; groupToken?: string }
 ) {
   const isGroup = Boolean(params.groupToken);
-  const chatKey = makeChatKey(params);
+  const chatKey = makeChatKey({ chatUid: params.chatUid, groupChatToken: params.groupToken });
 
   const res = isGroup
     ? await chatApi.getGroupChatAll(token, params.groupToken!)
@@ -45,7 +45,7 @@ export async function importAllMessagesForChat(
     }
 
     if (batch.length) {
-      await database.batch(...batch);
+      await database.batch(batch);
     }
   });
 }