באג | באג בפתיחת ספרי אוצר החכמה
-
כשפותחים ספר של אוצר החכמה מתוך אוצריא, הקישור פותח חלון חדש במקום לפתוח את הספר בתוכנת אוצר החכמה הפתוחה. זה די מעצבן, כי אז הספר לא נשמר בהיסטוריה, וקשה לנווט בין כל החלונות הפתוחים.
במקורה שלוחצים על קישור כשהתוכנה סגורה זה ממש גרוע, כי אז הפתיחה בחלון נפרד מוחקת את החלונות שהיו פתוחים לי באוצר החכמה, וצריך לנסות לשחזר את כל שולחן העבודה מחדש.
אני רוצה להציע פתרון:
באוצר החכמה יש אפשרות לפתוח ספר בחלון התוכנה על ידי כמה הקשות, לוחצים על מקש F1, כותבים את המספר הסידורי של הספר, ואז אנטר.
ההקשות עובדות רק לאחר לחיצה עם העכבר במיקום כלשהו בדף התוכנה (מלבד בכותרת העליונה).
אפשר להגדיר שהקישור יעבוד בשיטה כזו - יזהה את המספר הסידורי, יכנס לאוצר החכמה, ילחץ על מיקום כלשהוא בעמוד, ילחץ על F1, יכתוב את המספר הסידורי, ואז ילחץ על אנטר.
ניסיתי לבנות משהו כזה לבד, ונוצר לי קובץ שעושה את הפעולה הנ"ל לפי שם הקובץ (במקרה הזה הוא יפתח את ספר 103326, אפשר לשנות למספר אחר והוא יפתח בהתאמה).
103326.exe -
כשפותחים ספר של אוצר החכמה מתוך אוצריא, הקישור פותח חלון חדש במקום לפתוח את הספר בתוכנת אוצר החכמה הפתוחה. זה די מעצבן, כי אז הספר לא נשמר בהיסטוריה, וקשה לנווט בין כל החלונות הפתוחים.
במקורה שלוחצים על קישור כשהתוכנה סגורה זה ממש גרוע, כי אז הפתיחה בחלון נפרד מוחקת את החלונות שהיו פתוחים לי באוצר החכמה, וצריך לנסות לשחזר את כל שולחן העבודה מחדש.
אני רוצה להציע פתרון:
באוצר החכמה יש אפשרות לפתוח ספר בחלון התוכנה על ידי כמה הקשות, לוחצים על מקש F1, כותבים את המספר הסידורי של הספר, ואז אנטר.
ההקשות עובדות רק לאחר לחיצה עם העכבר במיקום כלשהו בדף התוכנה (מלבד בכותרת העליונה).
אפשר להגדיר שהקישור יעבוד בשיטה כזו - יזהה את המספר הסידורי, יכנס לאוצר החכמה, ילחץ על מיקום כלשהוא בעמוד, ילחץ על F1, יכתוב את המספר הסידורי, ואז ילחץ על אנטר.
ניסיתי לבנות משהו כזה לבד, ונוצר לי קובץ שעושה את הפעולה הנ"ל לפי שם הקובץ (במקרה הזה הוא יפתח את ספר 103326, אפשר לשנות למספר אחר והוא יפתח בהתאמה).
103326.exeבחלון פרטי הספר של אוצר החכמה באוצריא כבר קיים כפתור "פתח מקומית" שעושה בדיוק את זה, בלי סימולציית הקשות: הוא מפעיל את התוכנה המותקנת עם קישור
OtzarBook://book/<מספר>/p/1/...— אותו פרוטוקול שבו אוצר החכמה עצמה משתמשת — והספר נפתח ככרטיסייה בחלון התוכנה הקיים, ולא בחלון נפרד.הכפתור מוצג רק כששתי בדיקות עוברות:
- זיהוי התוכנה — משתנה הסביבה
OTZARAPPCDמצביע על התיקייה שבה נמצאotzar.exe(כך בגרסה 18 ומעלה), או לחלופיןC:\OTZAR\otzar.exeבגרסאות ישנות יותר. - איתור הספר בכונן — אחד מאלה:
<כונן>:\books\<מספר>.book,<כונן>:\Otzardisk\books\<מספר>.book, או<כונן>:\zip\<מספר>.ocd.
אם אחת מהבדיקות נכשלת, נשאר רק הכפתור "פתח באתר" — שפותח דפדפן. זה כנראה מה שקורה אצלך.
אז לפני שמוסיפים מנגנון חדש, כדאי לבדוק: כשאתה פותח ספר של אוצר החכמה מתוך אוצריא — הכפתור "פתח מקומית" מופיע בחלון? אם לא, האם דיסק/תיקיית אוצר החכמה מחוברים במחשב, ואיזו גרסה של התוכנה מותקנת?
הקוד הרלוונטי: lib/utils/navigation/otzar_utils.dart
- זיהוי התוכנה — משתנה הסביבה
-
הכפתור "פתח מקומית" מופיע בחלון, ודיסק אוצר החכמה מחובר למחשב בגירסא העדכנית ביותר.
הבעיה היא בקישור עצמו, אוצר החכמה בנו אותו בצורה שפותחת את הספר בחלון נפרד, ולא ככרטיסייה בחלון התוכנה הקיים.
אפשר לעשות ניסוי, לשמור את הקישור כקובץ קיצור דרך, ולפתוח אותו. התוצאה תהיה פתיחה בחלון נפרד ולא ככרטיסיה.
לכן אני מציע לא להשתמש בקישורים של אוצר החכמה עצמם, אלא לעבוד בשיטה אחרת יעילה יותר. -
הכפתור "פתח מקומית" מופיע בחלון, ודיסק אוצר החכמה מחובר למחשב בגירסא העדכנית ביותר.
הבעיה היא בקישור עצמו, אוצר החכמה בנו אותו בצורה שפותחת את הספר בחלון נפרד, ולא ככרטיסייה בחלון התוכנה הקיים.
אפשר לעשות ניסוי, לשמור את הקישור כקובץ קיצור דרך, ולפתוח אותו. התוצאה תהיה פתיחה בחלון נפרד ולא ככרטיסיה.
לכן אני מציע לא להשתמש בקישורים של אוצר החכמה עצמם, אלא לעבוד בשיטה אחרת יעילה יותר.@שווה במקום להביא קובץ EXE שאי אפשר להבין ממנו כלום, פשוט תעלה את קוד המקור של מה שעשית, (או קישור לשיחה שלך עם מי שבנה לך את זה...) כך נוכל להבין יותר מה בדיוק אתה רוצה.
-
זה קוד המקור:
OtzarFast.cs
וזה ההסבר מקודקס:
מטרת הכליפתיחת ספר בתוך החלון הראשי של אוצר החכמה, באמצעות אוטומציה של הממשק. הכלי מחקה את רצף הפעולות הידני שתיארת, במקום להשתמש בקישור OtzarBook://, שאצלך פותח חלון נפרד.
כך פועלת הגרסה הנוכחית
- קריאת מספר הספר: התוכנה קוראת את שם קובץ ה־EXE ללא הסיומת. לדוגמה, הפעלת 198605.exe מבקשת לפתוח את ספר מספר 198605. השם חייב להכיל ספרות בלבד.
- איתור חלון אוצר החכמה: התוכנה עוברת על התהליכים ומחפשת חלון שכותרתו otzar או כוללת „אוצר החכמה”. היא מסירה תווי כיווניות נסתרים לפני ההשוואה. אם אין התאמה או שיש כמה חלונות תואמים, היא עוצרת ומציגה הודעה.
- העברת המיקוד: אם החלון ממוזער, התוכנה משחזרת אותו ומביאה אותו לחזית באמצעות פונקציות Windows.
- לחיצה בתוך התוכנה: מתבצעת לחיצה באמצע רוחב השטח הפנימי ובגובה של 55% ממנו, ללא מסגרת וכותרת החלון. מיקום סמן העכבר הקודם נשמר ומוחזר מיד לאחר הלחיצה.
- שליחת F1 ישירות: לאחר המתנה של 30 מילישניות, הכלי מזהה את רכיב החלון שמחזיק במיקוד ושולח אליו הודעות WM_KEYDOWN ו־WM_KEYUP עם הקוד VK_F1 = 0x70. זו השיטה שעבדה אצלך למרות החלפת F1 ו־F11 בתוכנת מיפוי המקלדת.
- הזנת המספר ופתיחה: לאחר המתנה של 150 מילישניות, הכלי מזין את מספר הספר באמצעות SendKeys.SendWait, ואז שולח Enter.
ה־EXE כתוב ב־C# ומשתמש ב־WinForms ובקריאות Win32 דרך DllImport. הוא אינו דורש PowerShell בכל הפעלה.
אפשרות נוספת למימוש: חיפוש לפי שם הספר באמצעות F2
זו תוספת מוצעת; היא אינה ממומשת בקובץ הנוכחי. רצף הפעולות המבוקש:
- קבלת שם הספר מהקטלוג, רצוי כפרמטר מפורש, למשל:OtzarLauncher.exe --title "בית הלוי"
- יצירת מחרוזת חיפוש הכוללת מירכאות כחלק מהטקסט:"בית הלוי"
- שמירת תוכן לוח ההעתקה והעתקת מחרוזת החיפוש אליו.
- איתור אוצר החכמה, הבאת החלון לחזית ולחיצה בשטח הפנימי שלו.
- שליחת F2 ישירות לרכיב הפעיל, באותה שיטה של F1, עם VK_F2 = 0x71 וקוד סריקה 0x3C.
- המתנה עד ששדה חיפוש שם הספר פעיל, החלפת תוכן חיפוש קודם והדבקת השם עם המירכאות.
- המתנה לקליטת הטקסט ולעדכון התוצאות. אם נדרש Enter להפעלת החיפוש בגרסה המותקנת, יש להוסיפו לאחר בדיקה.
- החזרת תוכן לוח ההעתקה הקודם לאחר שהתוכנה סיימה לקרוא אותו.
לפי התנהגות החיפוש שתיארת, המירכאות מיועדות לחיפוש הביטוי המדויק. עדיין ייתכנו כמה תוצאות, למשל מהדורות שונות של אותו ספר; אין להניח ששם לבדו מזהה ספר יחיד.
דגשים למתכנתים
- לשיפור האמינות והמהירות, עדיף לזהות שהשדה מוכן באמצעות UI Automation, במקום להסתמך רק על המתנה קבועה.
- הפעולה הנוכחית מביאה את אוצר החכמה לחזית ומשתמשת בעכבר; היא אינה מתבצעת כולה ברקע.
- הקוד הנוכחי אינו מוודא שהספר הנכון נפתח. בגרסה המיועדת לשילוב בקטלוג כדאי להוסיף אימות תוצאה, מניעת הפעלות מקבילות ודיווח שגיאות לקטלוג.
-
-
-
-
@יום-חדש-מתחיל אם היה עצה רשמית לשיפור, זה היה מתקבל.
אבל העצה שהוא הציע (קראת את זה?) זה מעקף לא הגיוני בשביל לשל בתוכנה אחרת. -
-
ביקשתי כעת מקודקס לבדוק את הקוד הקיים באוצריא, ולהציע את הפתרון שלו לשינוי.
הוא הכין לי קוד, ובדק שהוא יכול לעבוד עם אוצריא.
זה הקוד
otzaria-f1-proposal.zip
וזה ההסבר:
הצעה: אפשרות פתיחת ספרי אוצר החכמה באמצעות החלון הראשי ב-Windowsבמסלול הנוכחי OtzarUtils.launchOtzarLocal מפעילה את otzar.exe עם BOOK=..., ובמחשב שלי הספר נפתח בחלון נפרד. רצף ידני של לחיצה בשטח התוכנה, F1, מספר הספר ו-Enter נותן את ההתנהגות הרצויה בתוך התוכנה הפעילה.
מצורפת הצעת patch שמשלבת את הרצף בתוך אוצריא באמצעות MethodChannel ורכיב Win32 המתקמפל לתוך ה-runner, בלי EXE נוסף, שינוי משתני סביבה או תיקיית מעקף. F1 נשלח ישירות לרכיב הפעיל, כדי שלא יושפע מהמיפוי F1/F11 המותקן אצלי.
ההצעה מוסיפה preferMainWindow; אפשר לבטל את המסלול החדש עם false. בקשות לעמוד גדול מ-1 נשארות במסלול המקורי. במסלול F1 הספר עשוי להיפתח במיקום האחרון, גם אם הפרמטר page הוא ברירת המחדל 1. אוצר החכמה צריכה להיות פתוחה קודם.
הקוד מסופק לסקירה ולבדיקת המפתחים. הוא נבנה על קוד dev שנקרא ואומת מול Git tree המתועד ב-SOURCE.json. לא בוצעו הידור Flutter/Windows, בדיקות Dart או בדיקה חיה של המימוש החדש. יש לבדוק מוכנות של תיבת F1, קליטת הספרות ו-Enter, טיפול בכשלי מיקוד ורישום הערוץ בכל מנוע Flutter רלוונטי. ההצעה אינה פותחת כרטיסייה ואינה מפעילה ערוץ ניפוי; היא מבקשת רק את התנהגות F1 המקורית.
README.md מפרט את השילוב, ההגבלות, השגיאות ופקודות הבדיקה. מומלץ ליישם באמצעות ה-patch ולא לדרוס קבצים בגרסה חדשה ללא סקירת ההבדלים.
עדכון: רכיב ה-C++ הודר ונבדק כעת במחשב המשתמש באמצעות מעטפת בדיקה עם קוד ערוץ Flutter הרשמי. נמצא ותוקן באג במזהה הטיימר. בגרסה הנוכחית נשלח ספר 103967, והמשתמש אישר שהספר הנכון נפתח בחלון הצף הרצוי. עדיין לא נבנתה אוצריא עם ה-patch ולא הורצו בדיקות Dart. יש להשתמש ב-patch העדכני המצורף.
-
ביקשתי כעת מקודקס לבדוק את הקוד הקיים באוצריא, ולהציע את הפתרון שלו לשינוי.
הוא הכין לי קוד, ובדק שהוא יכול לעבוד עם אוצריא.
זה הקוד
otzaria-f1-proposal.zip
וזה ההסבר:
הצעה: אפשרות פתיחת ספרי אוצר החכמה באמצעות החלון הראשי ב-Windowsבמסלול הנוכחי OtzarUtils.launchOtzarLocal מפעילה את otzar.exe עם BOOK=..., ובמחשב שלי הספר נפתח בחלון נפרד. רצף ידני של לחיצה בשטח התוכנה, F1, מספר הספר ו-Enter נותן את ההתנהגות הרצויה בתוך התוכנה הפעילה.
מצורפת הצעת patch שמשלבת את הרצף בתוך אוצריא באמצעות MethodChannel ורכיב Win32 המתקמפל לתוך ה-runner, בלי EXE נוסף, שינוי משתני סביבה או תיקיית מעקף. F1 נשלח ישירות לרכיב הפעיל, כדי שלא יושפע מהמיפוי F1/F11 המותקן אצלי.
ההצעה מוסיפה preferMainWindow; אפשר לבטל את המסלול החדש עם false. בקשות לעמוד גדול מ-1 נשארות במסלול המקורי. במסלול F1 הספר עשוי להיפתח במיקום האחרון, גם אם הפרמטר page הוא ברירת המחדל 1. אוצר החכמה צריכה להיות פתוחה קודם.
הקוד מסופק לסקירה ולבדיקת המפתחים. הוא נבנה על קוד dev שנקרא ואומת מול Git tree המתועד ב-SOURCE.json. לא בוצעו הידור Flutter/Windows, בדיקות Dart או בדיקה חיה של המימוש החדש. יש לבדוק מוכנות של תיבת F1, קליטת הספרות ו-Enter, טיפול בכשלי מיקוד ורישום הערוץ בכל מנוע Flutter רלוונטי. ההצעה אינה פותחת כרטיסייה ואינה מפעילה ערוץ ניפוי; היא מבקשת רק את התנהגות F1 המקורית.
README.md מפרט את השילוב, ההגבלות, השגיאות ופקודות הבדיקה. מומלץ ליישם באמצעות ה-patch ולא לדרוס קבצים בגרסה חדשה ללא סקירת ההבדלים.
עדכון: רכיב ה-C++ הודר ונבדק כעת במחשב המשתמש באמצעות מעטפת בדיקה עם קוד ערוץ Flutter הרשמי. נמצא ותוקן באג במזהה הטיימר. בגרסה הנוכחית נשלח ספר 103967, והמשתמש אישר שהספר הנכון נפתח בחלון הצף הרצוי. עדיין לא נבנתה אוצריא עם ה-patch ולא הורצו בדיקות Dart. יש להשתמש ב-patch העדכני המצורף.
-
-
-
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות