בעיה | הכנסת תוסף לחנות
-
@פלמנמוני @otzaria-bot
שאלה מקלאוד:@otzaria-bot פעם כתב לנו:
"אין כרגע benchmark, טלמטריה או התחייבות לזמן ממוצע שלstorage.set, ולכן אי אפשר לתת מספר אמין במילישניות. הזמן תלוי במערכת ההפעלה, בדיסק, בגודל הערך ובקריאה הראשונה שפותחת את מסד הנתונים.
השמירה עוברת דרך גשר ה־WebView, קידוד JSON, ואזINSERT OR REPLACEלמסד SQLite במצב WAL. לכן אובייקט גדול יהיה איטי יותר: הוא מועבר ומקודד בשלמותו ונכתב מחדש כולו. לא מוגדרת כרגע מגבלת גודל ייעודית ל־storage, אבל לא מומלץ להשתמש בו לנתונים גדולים מאוד. המימוש נמצא ב־plugin_bridge_adapter.dart (שורה 1876) וב־plugin_system_database.dart (שורה 301).
אין כרגע API מסוגstorage.setManyאו batch. האפשרויות הן:- לבצע מספר קריאות נפרדות — הן אינן אטומיות וכל אחת נספרת במגבלת קצב הקריאות.
- לשמור אובייקט אחד המכיל כמה ערכים תחת מפתח יחיד. זו קריאה אחת וכתיבה אחת, למשל:
await Otzaria.call('storage.set', { key: 'state', value: { settings, progress, cacheMetadata } });אין גם אירוע Otzaria ייעודי ואמין כמו
beforeunloadלפני יציאת האפליקציה או סגירת התוסף. קיימיםplugin.suspendedו־plugin.resumed, אבלplugin.suspendedנורה כאשר עוזבים את לשונית התוסף, לא כאירוע shutdown. בסגירת האפליקציה ה־WebViews מפונים ישירות דרך plugin_runtime_dispatcher.dart (שורה 218).
ייתכן שאירוע DOM כמוbeforeunloadיופעל בחלק מהתרחישים, אבל זו אינה הבטחה של ה־SDK ואי אפשר לסמוך עליו להשלמת קריאת RPC אסינכרונית. ההמלצה היא לשמור בזמן שהנתונים משתנים, עם debounce, ולא להמתין ליציאה. אפשר לבצע שמירה נוספת ב־plugin.suspendedכ־best effort בלבד."השתמשנו ב
plugin.suspendedו־plugin.resumedבדרך הזו:Otzaria.on('plugin.suspended', callback); Otzaria.on('plugin.resumed', callback);וקבלנו את השגיאה הזו:

איך נרשמים נכון ל
plugin.suspendedו־plugin.resumed?מצורפים הקבצים שבהם כתוב שיש רישום לevent
access-lock.js
reminders.js
storage-io.js -
@otzaria-bot
תענה בבקשה, קרא את הקוד הרלוונטי.
(אם הוא לא יענה, שלח לי צ'אט עוד כמה שעות). -
@otzaria-bot
תענה בבקשה, קרא את הקוד הרלוונטי.
(אם הוא לא יענה, שלח לי צ'אט עוד כמה שעות). -
@otzaria-bot
קרא את ההודעה הראשונה בשרשור, והגב. -
@הלומד — הרישום שלכם נכון. השגיאה שקיבלתם אינה שגיאת ריצה אלא ולידציה של החנות בהעלאה.
איך זה עובד בפועל
plugin.suspendedו-plugin.resumedנשלחים ישירות כ-CustomEventעלwindowמתוך plugin_runtime_dispatcher.dart (השהיה) ו-שורה 168 (חזרה), וה-dispatch עצמו בשורה 193. מצד ה-SDK,Otzaria.on(event, cb)הוא בסך הכל עטיפה ל-window.addEventListener(plugin_tab_page.dart שורה 712) — בלי בדיקת שם אירוע ובלי בדיקת הרשאה.מכאן שני דברים:
Otzaria.on('plugin.suspended', cb)היא הצורה הנכונה, והיא עובדת.- אין הרשאת
events.subscribe:plugin.suspendedואין צורך בה — אירועי lifecycle אינם עוברים דרך בדיקת ההרשאות שלdispatchEvent. אל תוסיפו אותה ל-manifest, היא תיפסל כהרשאה לא חוקית.
למה החנות בכל זאת חסמה
הוולידטור של החנות בונה את רשימת האירועים המוכרים מתוך
docs/plugin-sdk/API_REFERENCE.md— הוא שולף שמות מדוגמאותOtzaria.on('...')ומהרשאותevents.subscribe:Xשמופיעות שם.plugin.suspendedו-plugin.resumedמתועדים כרגע רק ב-otzaria_plugin.d.ts(שורות 588-590) ולא ב-API_REFERENCE, ולכן הם יוצאים "לא מוכרים". ובהעלאה לחנות כל warning חוסם, לא רק error. זהו פספוס בתיעוד/ולידטור, לא בקוד שלכם.עקיפה שעובדת עכשיו
הסורק מחפש רק
Otzaria.on(/Otzaria.off(. לכן:window.addEventListener('plugin.suspended', () => stopReminderInterval()); window.addEventListener('plugin.resumed', () => startReminderInterval());זהה לחלוטין מבחינת התנהגות (זה מה ש-
Otzaria.onעושה מתחת), ועובר את הולידציה. שימו לב שכאן ה-callback מקבל את אובייקט ה-Event, כך שאם תצטרכו payload באירוע אחר —e.detail. ב-lifecycle ה-detail הואnullבכל מקרה.ובהזדמנות זו:
plugin.suspendedנורה גם ביציאה מלשונית התוסף, לא רק בסגירת האפליקציה, ולכן הוא כן שימושי כ-flush נקודתי — אבל אין להסתמך עליו כאירוע shutdown.התיקון האמיתי הוא להוסיף את שני האירועים ל-API_REFERENCE.md (ולרשימת ה-fallback בוולידטור). @י.-פל.
כדי שזה לא ייעלם — פתחו issue: https://github.com/Otzaria/otzaria/issues
-
@הלומד — הרישום שלכם נכון. השגיאה שקיבלתם אינה שגיאת ריצה אלא ולידציה של החנות בהעלאה.
איך זה עובד בפועל
plugin.suspendedו-plugin.resumedנשלחים ישירות כ-CustomEventעלwindowמתוך plugin_runtime_dispatcher.dart (השהיה) ו-שורה 168 (חזרה), וה-dispatch עצמו בשורה 193. מצד ה-SDK,Otzaria.on(event, cb)הוא בסך הכל עטיפה ל-window.addEventListener(plugin_tab_page.dart שורה 712) — בלי בדיקת שם אירוע ובלי בדיקת הרשאה.מכאן שני דברים:
Otzaria.on('plugin.suspended', cb)היא הצורה הנכונה, והיא עובדת.- אין הרשאת
events.subscribe:plugin.suspendedואין צורך בה — אירועי lifecycle אינם עוברים דרך בדיקת ההרשאות שלdispatchEvent. אל תוסיפו אותה ל-manifest, היא תיפסל כהרשאה לא חוקית.
למה החנות בכל זאת חסמה
הוולידטור של החנות בונה את רשימת האירועים המוכרים מתוך
docs/plugin-sdk/API_REFERENCE.md— הוא שולף שמות מדוגמאותOtzaria.on('...')ומהרשאותevents.subscribe:Xשמופיעות שם.plugin.suspendedו-plugin.resumedמתועדים כרגע רק ב-otzaria_plugin.d.ts(שורות 588-590) ולא ב-API_REFERENCE, ולכן הם יוצאים "לא מוכרים". ובהעלאה לחנות כל warning חוסם, לא רק error. זהו פספוס בתיעוד/ולידטור, לא בקוד שלכם.עקיפה שעובדת עכשיו
הסורק מחפש רק
Otzaria.on(/Otzaria.off(. לכן:window.addEventListener('plugin.suspended', () => stopReminderInterval()); window.addEventListener('plugin.resumed', () => startReminderInterval());זהה לחלוטין מבחינת התנהגות (זה מה ש-
Otzaria.onעושה מתחת), ועובר את הולידציה. שימו לב שכאן ה-callback מקבל את אובייקט ה-Event, כך שאם תצטרכו payload באירוע אחר —e.detail. ב-lifecycle ה-detail הואnullבכל מקרה.ובהזדמנות זו:
plugin.suspendedנורה גם ביציאה מלשונית התוסף, לא רק בסגירת האפליקציה, ולכן הוא כן שימושי כ-flush נקודתי — אבל אין להסתמך עליו כאירוע shutdown.התיקון האמיתי הוא להוסיף את שני האירועים ל-API_REFERENCE.md (ולרשימת ה-fallback בוולידטור). @י.-פל.
כדי שזה לא ייעלם — פתחו issue: https://github.com/Otzaria/otzaria/issues
-
@הלומד
תזכר אותי עוד כמה שעות - א׳ החברים כאן תרם לי מנוי קודקס מורחב (עולה 100$!!!), ואני מתכנן שיפוץ לאתר, לטקסטים ולמהירות הטעינה, על הדרך אתקן גם את זה בע״ה.
אם למישהו יש בעיות נוספות עם האתר (למשל - דף התרומות לא עובד!!!!), אנא פתח שרשור, וכתוב בו את כל הבעיות - אשמח לעבוד בצורה מרוכזת, גם ככה אני על 3-4 repo's במקביל... -
@הלומד
תזכר אותי עוד כמה שעות - א׳ החברים כאן תרם לי מנוי קודקס מורחב (עולה 100$!!!), ואני מתכנן שיפוץ לאתר, לטקסטים ולמהירות הטעינה, על הדרך אתקן גם את זה בע״ה.
אם למישהו יש בעיות נוספות עם האתר (למשל - דף התרומות לא עובד!!!!), אנא פתח שרשור, וכתוב בו את כל הבעיות - אשמח לעבוד בצורה מרוכזת, גם ככה אני על 3-4 repo's במקביל... -
@הלומד
תזכר אותי עוד כמה שעות - א׳ החברים כאן תרם לי מנוי קודקס מורחב (עולה 100$!!!), ואני מתכנן שיפוץ לאתר, לטקסטים ולמהירות הטעינה, על הדרך אתקן גם את זה בע״ה.
אם למישהו יש בעיות נוספות עם האתר (למשל - דף התרומות לא עובד!!!!), אנא פתח שרשור, וכתוב בו את כל הבעיות - אשמח לעבוד בצורה מרוכזת, גם ככה אני על 3-4 repo's במקביל...
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות