Spaces:
Paused
Paused
| # ============================================================ | |
| # 5) بناء الواجهة الرادارية الرسمية المحصنة (تم تحويلها لدالة استدعاء) | |
| # ============================================================ | |
| def build_upload_ui(): | |
| # ننشئ لير عمودي يحتوي على واجهتك لكي نتحكم بظهوره واختفائه من البوابة الرئيسية | |
| with gr.Column() as upload_layout: | |
| gr.Markdown("<h1 style='text-align:center;'>📤 بوابة الرفع ودورة حياة الملفات الموثقة</h1>") | |
| # تهيئة حالة الجلسة الأمنية داخلياً | |
| user_session = gr.State({"authenticated": False}) | |
| panel_visible_state = gr.State(False) | |
| welcome_box = gr.HTML("<p role='status'>🟢 تم نقل الجلسة السيادية الموحدة بنجاح. الواجهة نشطة وجاهزة لاستلام العتاد.</p>") | |
| with gr.Row(): | |
| rank_icon_btn = gr.Button("🥈 FREE", elem_id="rank_icon_btn", scale=0, min_width=110, visible=True) | |
| subscription_panel = gr.HTML(visible=False) | |
| with gr.Group() as upload_area: | |
| uploader = gr.File(label="اختر ملفاتك", file_count="multiple") | |
| upload_btn = gr.Button("رفع الملفات", variant="primary") | |
| status_box = gr.HTML("<div>بانتظار رفع الملفات...</div>") | |
| with gr.Group() as options_area: | |
| gr.Markdown("### ⚙️ خيارات معالجة العتاد المتقدمة") | |
| with gr.Row(): | |
| enable_table = gr.Checkbox(label="📊 كشف الجداول", value=False) | |
| enable_handwriting = gr.Checkbox(label="🖐️ خط يدوي", value=False) | |
| enable_heavy_prep = gr.Checkbox(label="🔧 معالجة ثقيلة", value=False) | |
| enable_high_dpi = gr.Checkbox(label="📐 دقة عالية (300 DPI)", value=False) | |
| enable_fast = gr.Checkbox(label="⚡ الوضع السريع (EasyOCR)", value=False) | |
| enable_tashkeel = gr.Checkbox(label="🔤 تشكيل النص", value=False) | |
| gr.Markdown("### 📜 حالة التجميع والمعالجة الفورية") | |
| system_status = gr.HTML("<div role='status' aria-live='polite'>بانتظار تحديث الحالة من system/status.json...</div>") | |
| # ربط الأحداث الداخلية للواجهة كما هي بكودك الأصلي | |
| rank_icon_btn.click( | |
| fn=toggle_subscription_panel, | |
| inputs=[user_session, panel_visible_state], | |
| outputs=[subscription_panel, panel_visible_state] | |
| ) | |
| upload_btn.click( | |
| fn=handle_upload, | |
| inputs=[uploader, user_session, enable_table, enable_handwriting, enable_heavy_prep, enable_high_dpi, enable_fast, enable_tashkeel], | |
| outputs=status_box | |
| ).then(read_status_json, None, system_status) | |
| status_timer = gr.Timer(3.0) | |
| status_timer.tick(read_status_json, None, system_status) | |
| # نرجع العناصر المهمة للبوابة الرئيسية لكي نقوم بحقن بيانات المستخدم فيها وتحديثها ديناميكياً | |
| return upload_layout, user_session, welcome_box, rank_icon_btn | |