# ============================================================ # 5) بناء الواجهة الرادارية الرسمية المحصنة (تم تحويلها لدالة استدعاء) # ============================================================ def build_upload_ui(): # ننشئ لير عمودي يحتوي على واجهتك لكي نتحكم بظهوره واختفائه من البوابة الرئيسية with gr.Column() as upload_layout: gr.Markdown("

📤 بوابة الرفع ودورة حياة الملفات الموثقة

") # تهيئة حالة الجلسة الأمنية داخلياً user_session = gr.State({"authenticated": False}) panel_visible_state = gr.State(False) welcome_box = gr.HTML("

🟢 تم نقل الجلسة السيادية الموحدة بنجاح. الواجهة نشطة وجاهزة لاستلام العتاد.

") 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("
بانتظار رفع الملفات...
") 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("
بانتظار تحديث الحالة من system/status.json...
") # ربط الأحداث الداخلية للواجهة كما هي بكودك الأصلي 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