Skip to content
palmoni5 edited this page Jul 21, 2026 · 3 revisions

ספרים אישיים ותוכן משתמש

אוצריא מאפשרת להוסיף ספרים אישיים (TXT‏, DOCX‏, PDF) מתיקיות מותאמות אישית, וכן לייבא דורות וקישורים לספרים אלה. הכל נשמר ב־user_books.db — נפרד מהספרייה הרשמית ושורד עדכוני ספרייה.

תיקיות מותאמות אישית — lib/settings/services/custom_folders/

  • CustomFolder — מודל: ‏path, ‏addToDatabase, ‏addedAt. נשמר כ־JSON במפתח key-custom-folders.
  • CustomFoldersBloc — הוספה/הסרה/סריקה מחדש/ייבוא/ניקוי. הוספת תיקייה מפעילה סריקה שמוסיפה את הספרים ל־DB, עם דיווח כמה נוספו/עודכנו/נכשלו.
  • סנכרון ומחיקה רצים ב־isolate עם סגירת חיבור ה־read-only סביב הכתיבה.
  • שיוך ספר לתיקייה נעשה לפי source = הנתיב המלא (מונע התנגשות בין קבצים באותו שם בתיקיות שונות).
  • מובייל: PersonalBooksImportService מעתיק קבצים נבחרים לתיקייה קבועה "הספרים שלי" באחסון האפליקציה, שנרשמת כתיקייה מותאמת רגילה.

סריקה — scanAndAddExternalBooksFromFolder

ב־DatabaseLibraryProvider:

  1. שלב 1 ב־isolate — סריקת התיקייה, בדיקה מול user_books.db (השוואת גודל קובץ + זמן שינוי — ללא שינוי = דילוג), פרסור TOC ל־TXT/DOCX.
  2. שלב 2 ב־main isolate — הכנסות/עדכוני מטא־דטה בלבד. ‏outline של PDF נפרסר ב־main (דרך pdfrx).
  3. כל הכתיבות דרך PersonalBooksOperationQueue — תור סריאלי עם מונה נצפה.

סנכרון רקע — lib/migration/sync/

  • FileSyncService — סורק את התיקיות המותאמות: כותב ספרים חדשים/שהשתנו, גוזם ספרים שקובצם נמחק (רק ספרים מבוססי־קובץ), ומעבד קבצי קישורים.
  • background_db_sync_worker — מריץ את הסנכרון ב־isolate בשני שלבים: (1) ספרים אישיים ← ‏user_books.db (בלי לגעת ב־seforim), (2) קישורים ← ‏seforim.db (כתיבה, רק אם יש קבצים שטרם עובדו). ‏Watchdog של 90 שניות עם Isolate.kill.
  • background_sync_initializer — מפעיל ~5 שניות אחרי העלייה, רק אם לא במצב מנותק. חשוב: סגירת חיבור ה־read-only נעשית בתוך יחידת התור — סגירה מחוץ לתור גרמה בעבר למסכי קריאה ריקים בעלייה.

ייבוא דורות וקישורים — lib/user_content_import/

מייבא קבצי CSV/JSON שהמשתמש בחר, לצמיתות (מצטבר; מחיקה רק ב"נקה הכל"):

קובץ תוכן
דורות.csv עמודות: ספר / דור / [מחבר] / [קטגוריה]
קישורים.csv או .json קישורים רוחביים עם עמודת ספר_מקור
<ספר>.links.csv / .json קישורים פר־ספר
<ספר>_links.json הפורמט המקורי של אוצריא (line_index_1/2, path_2, heRef_2, Conection Type). כלי־העזר הקהילתי Link-Notes מייצר פורמט זה
  • UserImportParser — פרסור סלחני, מיפוי תוויות עבריות לסוגי connection ("פירוש"←COMMENTARY) ולדורות קנוניים.
  • UserContentImporterאטומי: כל הקבצים מפורסרים קודם; כל שגיאה חוסמת את הכתיבה כולה. קישורים תלויי־טקסט מנורמלים לכיוון קנוני (בסיס←מפרש).
  • UserContentRepository — כתיבה ל־book_generation (דור) ו־user_link (קישורים חוצי־DB, מזוהים לפי כותרת ולא FK).
  • user_links_loader — בזמן קריאה, קישורי המשתמש נטענים בשני הכיוונים: ‏forward (מהספר הנקרא) ו־inverse (מפרש־משתמש שמצביע על ספר רשמי מופיע גם בו).

נקודות חשובות

  • זהות ספר: ‏categoryId אינו ייחודי בין ה־DBs — כל מסלול טעינה חייב להעביר preferUserBooks: book.isUserBook, אחרת ספר אישי ייפתח כרשמי.
  • ספרים אישיים מוצגים תחת קטגוריית "ספרים אישיים" או ממוזגים לעץ הראשי (הגדרה mergeUserBooksIntoLibrary).
  • ספרים אישיים מאונדקסים לחיפוש המלא כמו ספרים רשמיים (אינדוקס).

דפים קשורים

Clone this wiki locally