קרא בעיון את הקבצים "lib\migration\README.md", "lib\migration\CATEGORY_SYNC_PLAN.md". עברנו לספרייה מבוססת DB, ואני רוצה להחליף את לוגיקת האיתור מחיפוש בקבצים לחיפוש בטבלת "acronym". כדי שתוכל להריץ פקודות על הDB עצמו, התקנתי כלי sqlite, ושמתי את הDB בפרוייקט [seforim.db]. === אני רוצה לחדד את הבקשה שלי: כרגע, הנתונים נשלחים לtantivy, שבונה אינדקס בשם "ref_index" לאיתור. האינדקס נבנה מהקבצים ומהכותרות. כרגע, יש לנו בDB כבר את שמות הקבצים, יש גם את הכותרות בטבלאות משלהם, ובמקום הקובץ "lib\utils\text_manipulation.dart" שאחראי על ההחלפות, יש להשתמש בטבלה "acronym". === ממכיון שאי מעוניין לתת למשתמשים אפשרות להכנסת ספרים לתוכנה, ללא הכנסה לDB. בגלל זה, יש צורך שtantivy ימשיך לאנדקס את "ref_index", אך הוא יאנדקס **אך ורק** קבצים שלא הוכנסו לDB. צורת ביצוע: 1) להגדיר לtantivy לאנדקס בref_index רק קבצים שלא נמצאים בDB. 2) התחשבות בשמות קבצים: התוכנה כעת טוענת [לפני הפעלת מסך ספרייה "lib\library\view\library_browser.dart"] את שמות הספרים **גם** מהDB, **וגם** מהקבצים שאינם בDB. הקוד נמצא בXXXXX. 3) את לוגיקת האיתור תוכל למצוא בקובץ לוגיקת חיפוש.txt, והעיקרון לא משתנה: שמות הקבצים שבDB נטענים מהטבלה..., שמות הקבצים שאינם בDB נטענים מ... 4) ההחלפות וראשי התיבות: גם כאן: לספרים שנמצאים בDB יש להשתמש בטבלה "acronym", בעוד שספרים שאינם בDB יש להמשיך ולהשתמש ב"lib\utils\text_manipulation.dart". 5) כותרות פנימיות: כותרות פנימיות של ספרים שנמצאים בDB יתקבלו מהטבלה הרלוונטית. כותרות של ספרים שאינם בDB, יתקבלו מהאינדקס של tantivy. חשוב: טבלת הacronym מספקת רק שמות ספרים: את הכותרות הפנימיות יש לקחת מטבלת הספר עצמו. האינדקס של טנטיבי מספק גם את שמות הקבצים, וגם את הכותרות שלהם! חשוב מאוד: כל המניפולציות שאנו מבצעים על הטקסט שהמשתמש מספק [באמצעות הקובץ text_manipulation.dart, או הבטלה acronym בDB], מבוצעות רק על שם הספר עצמו, ולא על הכותרות! הכותרות מתקבלות ללא מניפולציות כלל, מלבד חריג אחד: כשהמשתמש מקליד '.' או 'ע"א' = 'עמוד א', וכשהוא מקליד ':' או 'ע"א' = 'עמוד ב'. לסיכום, כשהמשתמש מחפש באיתור, התוכנה צריכה לפנות ל2 מקורות בבת אחת: הDB והקבצים שאינם בDB. לכל מקור יש את מקום מידע שמות הספרים שלו, ההחלפות שלו, והכותרות הפנימיות של שמות הקבצים שלו. לאחר כל הקשת משתמש [כל תו שהוא מזין], התוכנה תריץ את הבקשות במקביל, ולאחר ביצוע המניפולציות השונות התוצאות יולחמו ויגיעו למשתמש כמידע מאוחד.