Update database schema and synchronization logic
- Add `useEffect` in `ScribeLeftBar` for handling book state changes. - Extend `BooksSyncContext` with new properties and stricter typings. - Refine `Repositories` to include `lastUpdate` handling for synchronization processes. - Add comprehensive `fetchComplete*` repository methods for retrieving entity-specific sync data. - Enhance offline logic for chapters, characters, locations, and world synchronization. - Improve error handling across IPC handlers and repositories.
This commit is contained in:
49
app/page.tsx
49
app/page.tsx
@@ -33,7 +33,7 @@ import OfflineProvider from "@/context/OfflineProvider";
|
||||
import OfflineContext from "@/context/OfflineContext";
|
||||
import OfflinePinSetup from "@/components/offline/OfflinePinSetup";
|
||||
import OfflinePinVerify from "@/components/offline/OfflinePinVerify";
|
||||
import {SyncedBook} from "@/lib/models/SyncedBook";
|
||||
import {SyncedBook, BookSyncCompare, compareBookSyncs} from "@/lib/models/SyncedBook";
|
||||
import {BooksSyncContext} from "@/context/BooksSyncContext";
|
||||
|
||||
const messagesMap = {
|
||||
@@ -64,8 +64,8 @@ function ScribeContent() {
|
||||
|
||||
const [serverSyncedBooks, setServerSyncedBooks] = useState<SyncedBook[]>([]);
|
||||
const [localSyncedBooks, setLocalSyncedBooks] = useState<SyncedBook[]>([]);
|
||||
const [booksToSyncFromServer, setBooksToSyncFromServer] = useState<SyncedBook[]>([]);
|
||||
const [booksToSyncToServer, setBooksToSyncToServer] = useState<SyncedBook[]>([]);
|
||||
const [bookSyncDiffsFromServer, setBookSyncDiffsFromServer] = useState<BookSyncCompare[]>([]);
|
||||
const [bookSyncDiffsToServer, setBookSyncDiffsToServer] = useState<BookSyncCompare[]>([]);
|
||||
const [serverOnlyBooks, setServerOnlyBooks] = useState<SyncedBook[]>([]);
|
||||
const [localOnlyBooks, setLocalOnlyBooks] = useState<SyncedBook[]>([]);
|
||||
|
||||
@@ -165,17 +165,36 @@ function ScribeContent() {
|
||||
}
|
||||
}, [currentBook]);
|
||||
|
||||
useEffect(():void => {
|
||||
setBooksToSyncFromServer(serverSyncedBooks.filter((serverBook: SyncedBook):boolean => {
|
||||
const localBook: SyncedBook | undefined = localSyncedBooks.find((localBook: SyncedBook):boolean => localBook.id === serverBook.id);
|
||||
console.log('localBook from setBookToSyncFromServer',localBook);
|
||||
console.log('serverBook from setBookToSyncFromServer',serverBook);
|
||||
return !localBook || localBook.lastUpdate < serverBook.lastUpdate;
|
||||
}))
|
||||
setBooksToSyncToServer(localSyncedBooks.filter((localBook: SyncedBook):boolean => {
|
||||
const serverBook: SyncedBook | undefined = serverSyncedBooks.find((serverBook: SyncedBook):boolean => serverBook.id === localBook.id);
|
||||
return !serverBook || serverBook.lastUpdate < localBook.lastUpdate;
|
||||
}))
|
||||
useEffect((): void => {
|
||||
const diffsFromServer: BookSyncCompare[] = [];
|
||||
const diffsToServer: BookSyncCompare[] = [];
|
||||
|
||||
serverSyncedBooks.forEach((serverBook: SyncedBook): void => {
|
||||
const localBook: SyncedBook | undefined = localSyncedBooks.find((book: SyncedBook): boolean => book.id === serverBook.id);
|
||||
if (!localBook) {
|
||||
return;
|
||||
}
|
||||
|
||||
const diff: BookSyncCompare | null = compareBookSyncs(serverBook, localBook);
|
||||
if (diff) {
|
||||
diffsFromServer.push(diff);
|
||||
}
|
||||
});
|
||||
|
||||
localSyncedBooks.forEach((localBook: SyncedBook): void => {
|
||||
const serverBook: SyncedBook | undefined = serverSyncedBooks.find((book: SyncedBook): boolean => book.id === localBook.id);
|
||||
if (!serverBook) {
|
||||
return;
|
||||
}
|
||||
|
||||
const diff: BookSyncCompare | null = compareBookSyncs(localBook, serverBook);
|
||||
if (diff) {
|
||||
diffsToServer.push(diff);
|
||||
}
|
||||
});
|
||||
|
||||
setBookSyncDiffsFromServer(diffsFromServer);
|
||||
setBookSyncDiffsToServer(diffsToServer);
|
||||
setServerOnlyBooks(serverSyncedBooks.filter((serverBook: SyncedBook):boolean => !localSyncedBooks.find((localBook: SyncedBook):boolean => localBook.id === serverBook.id)))
|
||||
setLocalOnlyBooks(localSyncedBooks.filter((localBook: SyncedBook):boolean => !serverSyncedBooks.find((serverBook: SyncedBook):boolean => serverBook.id === localBook.id)))
|
||||
}, [localSyncedBooks, serverSyncedBooks]);
|
||||
@@ -488,7 +507,7 @@ function ScribeContent() {
|
||||
|
||||
return (
|
||||
<SessionContext.Provider value={{session: session, setSession: setSession}}>
|
||||
<BooksSyncContext.Provider value={{serverSyncedBooks, localSyncedBooks, booksToSyncFromServer, booksToSyncToServer, serverOnlyBooks, localOnlyBooks}}>
|
||||
<BooksSyncContext.Provider value={{serverSyncedBooks, localSyncedBooks, booksToSyncFromServer:bookSyncDiffsFromServer, booksToSyncToServer:bookSyncDiffsToServer, setServerOnlyBooks, setLocalOnlyBooks, serverOnlyBooks, localOnlyBooks}}>
|
||||
<BookContext.Provider value={{book: currentBook, setBook: setCurrentBook}}>
|
||||
<ChapterContext.Provider value={{chapter: currentChapter, setChapter: setCurrentChapter}}>
|
||||
<AIUsageContext.Provider value={{
|
||||
|
||||
Reference in New Issue
Block a user