File size: 3,341 Bytes
562e9b6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>디지털 굿판</title>
    
    <!-- PWA 메타 태그 -->
    <link rel="manifest" href="/static/manifest.json">
    <meta name="theme-color" content="#000000">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="apple-mobile-web-app-title" content="디지털 굿판">
    <link rel="apple-touch-icon" href="/static/icons/icon-152x152.png">
    
    <script>

        // 화면 꺼짐 방지

        async function preventSleep() {

            try {

                if ('wakeLock' in navigator) {

                    const wakeLock = await navigator.wakeLock.request('screen');

                    console.log('화면 켜짐 유지 활성화');

                    

                    // 화면이 다시 활성화될 때 wakeLock 재요청

                    document.addEventListener('visibilitychange', async () => {

                        if (document.visibilityState === 'visible') {

                            await preventSleep();

                        }

                    });

                }

            } catch (err) {

                console.log('화면 켜짐 유지 실패:', err);

            }

        }



        // 앱 상태 관리

        class AppState {

            static async save(state) {

                try {

                    localStorage.setItem('appState', JSON.stringify(state));

                } catch (err) {

                    console.error('상태 저장 실패:', err);

                }

            }



            static async load() {

                try {

                    const state = localStorage.getItem('appState');

                    return state ? JSON.parse(state) : null;

                } catch (err) {

                    console.error('상태 복원 실패:', err);

                    return null;

                }

            }

        }



        // 초기화

        window.addEventListener('load', async () => {

            // PWA 설치 확인

            if ('serviceWorker' in navigator) {

                try {

                    const registration = await navigator.serviceWorker.register('/static/service-worker.js');

                    console.log('ServiceWorker 등록 성공:', registration.scope);

                } catch (err) {

                    console.log('ServiceWorker 등록 실패:', err);

                }

            }



            // 화면 켜짐 유지

            await preventSleep();



            // 상태 복원

            const savedState = await AppState.load();

            if (savedState) {

                // Gradio 앱 상태 복원 로직

                window.gradioApp().querySelector('#component-0').value = savedState;

            }

        });



        // 상태 저장

        window.addEventListener('beforeunload', () => {

            const currentState = window.gradioApp().querySelector('#component-0').value;

            AppState.save(currentState);

        });

    </script>
</head>
<body>
    <div id="gradio-app"></div>
</body>
</html>