-
Notifications
You must be signed in to change notification settings - Fork 56
Plugins
דף זה מתעד את הצד של אוצריא — הגשר, האכיפה וה־runtime. למי שרוצה לכתוב תוסף: פיתוח תוספים.
lib/plugins/ — תוספים הם אפליקציות web (HTML/JS) שרצות ב־WebView ומדברות עם אוצריא דרך גשר RPC. עקרון האבטחה המרכזי: כתיבה לדיסק מגודרת בהסכמת משתמש מפורשת (בחירת תיקייה/קובץ), לא בהרשאת manifest בלבד.
-
PluginManifest— id, name(עד 14 תווים), version, entrypoint, backgroundEntrypoint(ריצת רקע), אייקון, טווח גרסאות אפליקציה,permissions[], רשת (networkEnabled+ allowlist), הגדרות לשונית כלים,publishedDataTypes, databaseSources. -
InstalledPlugin— רשומת ההתקנה: enabled, pinned (גם ל־nav rail), הרשאות שניתנו בפועל, סוג מקור (packaged / development / localhost_dev), סדר משתמש. - אריזה: קובץ
.otzplugin (ZIP). אפשר לארוז גם מה־CLI:otzaria pack-plugin.
bridge/plugin_bridge_adapter.dart (~2150 שורות) מממש את כל תחומי ה־RPC:
| תחום | פעולות עיקריות |
|---|---|
app |
מידע, theme (payload מלא של ColorScheme — נבנה מאותו createColorScheme של האפליקציה), locale, פתיחת URL |
library |
חיפוש ספרים, מטא־דטה, תוכן ספר (chunks של עד 5000 תווים עם מטמון LRU), TOC, עץ הספרייה |
search |
חיפוש מלא־טקסט |
reader |
פתיחת ספר / פתיחה לפי מראה מקום (openBookAtRef — עם מנוע find_ref), מצב נוכחי, בחירה, פריטי תפריט הקשר, הדגשות |
navigation |
מעבר מסכים |
notes |
קריאה/כתיבה של הערות אישיות |
ui |
הודעות, אישורים, בחירת תיקייה (רושמת תיקייה מאושרת) |
fs |
חילוץ ZIP / מחיקה (רק בתיקיות מאושרות, עם קנוניזציה נגד traversal); קבצים אישיים — בחירת קובץ, קריאת טקסט (עד 10MB), הגשת קובץ דרך שרת מקומי |
storage |
KV פר־תוסף |
settings |
קריאת הגדרות לפי allowlist מפורש (בלי סיסמאות/נתיבים/סודות) |
database |
שאילתות read-only דקלרטיביות |
network |
fetch/הורדה דרך צד ה־Flutter (עוקף CORS) עם allowlist |
| נוספים | לוח שנה, נתונים מפורסמים בין תוספים, היסטוריה, התראות, קיצורי דרך, התקנת תוספים |
-
Rate limiting — token bucket (50 טוקנים);
getBookContentפטור. -
מיפוי הרשאות — כל domain/action ממופה למחרוזת הרשאה (
library.content.read, fs.user_files.read, network.access...). - timeout ברירת מחדל 30 שניות; קודי שגיאה אחידים.
HttpServer על 127.0.0.1 בפורט אקראי, מגיש רק קבצים שנרשמו עם token אקראי 256-bit. תומך ב־HTTP Range (חיוני ל־PDF.js). נועד להגיש PDF גדול בלי להעבירו כ־base64 דרך הגשר. הערה: PDF ב־iframe מובנה לא עובד ב־Android/Linux — תוספים חייבים PDF.js.
-
PluginInstallerService— התקנה דו־שלבית: prepare (חילוץ ב־isolate, validation) ← finalize (העתקה ל־plugins/installed/<id>/current, seed הרשאות — משמר revokes של המשתמש בעדכון). - תוספי פיתוח — טעינה מתיקייה מקומית או מ־localhost, עם מעקב שינויי קבצים ו־reload אוטומטי.
-
PluginRuntimeDispatcher— singleton שמנהל את ה־WebViews: foreground (לשונית) ורקע (PluginBackgroundHost, בהרשאתapp.run_on_startup), השהיה/חידוש לחיסכון משאבים, שידור אירועים (בכפוף להרשאתevents.subscribe:<topic>), teardown לפני restart. -
ReaderLocationTracker— עוקב אחרי מיקום הקריאה הנוכחי ומשדרreader.current_ref_changedלתוספים (debounce 150ms). -
אחסון — SQLite
plugins_host.db: התקנות, הרשאות, KV, נתונים מפורסמים, לוגים. -
חיבור למערכת ההפעלה — רישום פרוטוקול
otzaria://ושיוך סיומת.otzplugin (Windows: reg.exe; Linux: desktop entry + MIME). קישורי חנות:otzaria://plugin/install?url=....
שאילתות דקלרטיביות (JSON: from/joins/select/where/orderBy/limit) שמקומפלות ל־SQL פרמטרי, עם policy מלא של טבלאות/עמודות/joins מותרים, read-only, ומטמון תוצאות קצר.
קיים ריפו נפרד — Otzaria Plugin Validator — GitHub Action שבודק תוספים (מניפסט, מבנה, מגבלות) לפני קבלתם לחנות.
- פיתוח תוספים
- הגדרות
- ארכיטקטורה (deep links)
- גיבוי ושחזור
📖 מדריך למשתמש
- התחלת העבודה
- הספרייה
- קריאת ספר
- קריאת PDF
- חיפוש
- איתור מקורות
- טאבים ושולחנות
- סימניות והערות
- ספרים אישיים
- הגדרות
- גיבוי ושחזור
- עדכונים
- תוספים
- כלים
- קישורי עומק
🛠️ למפתחים — יסודות
נתונים וספרייה
קריאה
חיפוש
אישי ומערכת
עיצוב ו־UI