File size: 3,386 Bytes
d40d9ad
cec0eb7
d40d9ad
 
cec0eb7
 
 
 
2bfcbfa
cec0eb7
 
 
2bfcbfa
cec0eb7
2bfcbfa
 
cec0eb7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d40d9ad
cec0eb7
 
 
 
 
d40d9ad
cec0eb7
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# ============================================================
# 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