Skip to content
palmoni5 edited this page Jul 17, 2026 · 1 revision

עדכון הספרייה

lib/library_update/ — עדכון seforim.db לגרסה חדשה, מבוסס החבילה seforim_library_updater.

הזרימה — LibraryUpdateRepository

  1. התאוששות — אם עדכון קודם נקטע באמצע, משוחזר בעליית האפליקציה (_recoverInterruptedLibraryUpdate ב־main).
  2. בדיקת עדכוןcheckForUpdate משווה את הגרסה המקומית (db_meta) מול הקטלוג ב־GitHub. ‏SeforimLibrary מפרסם דיפים (patches) בין גרסאות.
  3. החלה — באחד משני מסלולים.

שני מסלולי עדכון

מסלול דלתא — applyDeltaPlan

  • בחירת ה־patch המשתלם ביותר בין הגרסה המקומית לאחרונה (אלגוריתם Dijkstra על גרף ה־patches — מעדיף patch ישיר, לא בהכרח דרך גרסאות ביניים).
  • הורדת ה־patch והחלה אטומית ב־isolate‏ (PatchApplier): אימות hash של כל הטבלאות, טרנזקציה יחידה — קריסה מתגלגלת אחורה.
  • ‏WAL פעיל בזמן ההחלה כדי שקוראים ימשיכו לעבוד.

הורדה מלאה — applyFullDownload

  • ‏~1.1GB, דורש אישור משתמש.
  • הורדה ← חילוץ zst‏ (streaming) ← אימות (quick_check + בדיקת גרסה ב־isolate) ← החלפה אטומית (rename).

שני המסלולים רצים דרך operationQueue עם סגירה/פתיחה מחודשת של חיבור ה־read-only.

LibraryUpdateBloc

  • _operationId — ביטול ועמידות בפני תוצאות מיושנות.
  • נקודת אל־חזור משלב הכתיבה — ביטול אפשרי רק לפניה.
  • CompanionAssetsService — בסוף העדכון מאומתים/מעודכנים גם קבצי הלוואי: תלמוד PDF, קטלוג חיצוני, מילון lexical.
  • LibraryRuntimeRefreshService.refreshAfterDbUpdate — מנקה מטמונים, מאפס providers ופותח את ה־DB מחדש — בלי restart של האפליקציה.

עדכון האפליקציה עצמה

נושא נפרד — ראו עדכון האפליקציה.

דפים קשורים

Clone this wiki locally