Update app.py
Browse files
app.py
CHANGED
|
@@ -1311,51 +1311,38 @@ document.addEventListener('keydown', function(e) {{
|
|
| 1311 |
}}
|
| 1312 |
}});
|
| 1313 |
|
| 1314 |
-
// postMessage๋ก ๋ฏธ๋์ด ๋ฐ์ดํฐ ์์
|
| 1315 |
-
window.addEventListener('message', function(e) {{
|
| 1316 |
-
console.log('Received message:', e.data ? e.data.type : 'unknown');
|
| 1317 |
-
if (e.data && e.data.type === 'loadMedia' && e.data.encoded) {{
|
| 1318 |
-
try {{
|
| 1319 |
-
var jsonStr = atob(e.data.encoded);
|
| 1320 |
-
var mediaList = JSON.parse(jsonStr);
|
| 1321 |
-
console.log('Loading media from postMessage:', mediaList.length, 'items');
|
| 1322 |
-
mediaList.forEach(function(m, idx) {{
|
| 1323 |
-
console.log('Adding media:', idx, m.name, m.type);
|
| 1324 |
-
addMedia(m.name, m.type, m.dataUrl, m.filePath);
|
| 1325 |
-
}});
|
| 1326 |
-
stat('๋ฏธ๋์ด ' + mediaList.length + '๊ฐ ๋ก๋๋จ');
|
| 1327 |
-
}} catch(err) {{
|
| 1328 |
-
console.error('Decode error:', err);
|
| 1329 |
-
stat('๋ฏธ๋์ด ๋ก๋ ์ค๋ฅ');
|
| 1330 |
-
}}
|
| 1331 |
-
}}
|
| 1332 |
-
}});
|
| 1333 |
-
|
| 1334 |
// ์ด๊ธฐํ
|
| 1335 |
init();
|
| 1336 |
renderTL();
|
| 1337 |
stat('์ค๋น๋จ | ๋จ์ถํค: Space(์ฌ์), Delete(์ญ์ ), โโ(์ด๋)');
|
| 1338 |
|
| 1339 |
-
|
|
|
|
| 1340 |
var encodedData = '{media_data}';
|
| 1341 |
-
console.log('Encoded data length:', encodedData.length);
|
| 1342 |
-
|
| 1343 |
-
|
| 1344 |
-
|
| 1345 |
-
|
| 1346 |
-
|
| 1347 |
-
|
| 1348 |
-
|
| 1349 |
-
|
| 1350 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1351 |
}}
|
| 1352 |
}} else {{
|
| 1353 |
-
console.log('No
|
| 1354 |
}}
|
| 1355 |
-
}}
|
| 1356 |
-
console.error('Init error:', e);
|
| 1357 |
-
stat('postMessage ๋๊ธฐ ์ค...');
|
| 1358 |
-
}}
|
| 1359 |
</script>
|
| 1360 |
</body>
|
| 1361 |
</html>'''
|
|
@@ -1417,34 +1404,18 @@ def process_files(files):
|
|
| 1417 |
|
| 1418 |
def make_editor(media_list):
|
| 1419 |
"""์๋ํฐ HTML ์์ฑ"""
|
|
|
|
| 1420 |
j = json.dumps(media_list, ensure_ascii=False)
|
| 1421 |
-
|
| 1422 |
-
|
| 1423 |
-
#
|
| 1424 |
-
|
| 1425 |
-
|
| 1426 |
-
|
| 1427 |
-
|
| 1428 |
-
|
| 1429 |
-
|
| 1430 |
-
|
| 1431 |
-
var checkIframe = setInterval(function() {{
|
| 1432 |
-
var iframe = document.querySelector('iframe');
|
| 1433 |
-
if (iframe && iframe.contentWindow) {{
|
| 1434 |
-
try {{
|
| 1435 |
-
iframe.contentWindow.postMessage({{type: 'loadMedia', encoded: '{encoded}'}}, '*');
|
| 1436 |
-
console.log('Sent encoded media data');
|
| 1437 |
-
clearInterval(checkIframe);
|
| 1438 |
-
}} catch(e) {{
|
| 1439 |
-
console.error('PostMessage error:', e);
|
| 1440 |
-
}}
|
| 1441 |
-
}}
|
| 1442 |
-
}}, 500);
|
| 1443 |
-
setTimeout(function() {{ clearInterval(checkIframe); }}, 10000);
|
| 1444 |
-
}})();
|
| 1445 |
-
</script>
|
| 1446 |
-
'''
|
| 1447 |
-
return f"<iframe srcdoc='{h}' style='width:100%;height:700px;border:none;border-radius:10px'></iframe>{inject_script}"
|
| 1448 |
|
| 1449 |
|
| 1450 |
def export_mp4(export_json):
|
|
|
|
| 1311 |
}}
|
| 1312 |
}});
|
| 1313 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1314 |
// ์ด๊ธฐํ
|
| 1315 |
init();
|
| 1316 |
renderTL();
|
| 1317 |
stat('์ค๋น๋จ | ๋จ์ถํค: Space(์ฌ์), Delete(์ญ์ ), โโ(์ด๋)');
|
| 1318 |
|
| 1319 |
+
// ๋ฏธ๋์ด ๋ฐ์ดํฐ ๋ก๋
|
| 1320 |
+
(function() {{
|
| 1321 |
var encodedData = '{media_data}';
|
| 1322 |
+
console.log('[VideoEditor] Encoded data length:', encodedData.length);
|
| 1323 |
+
|
| 1324 |
+
if (encodedData && encodedData.length > 4) {{
|
| 1325 |
+
try {{
|
| 1326 |
+
var jsonStr = atob(encodedData);
|
| 1327 |
+
console.log('[VideoEditor] Decoded JSON length:', jsonStr.length);
|
| 1328 |
+
var mediaList = JSON.parse(jsonStr);
|
| 1329 |
+
console.log('[VideoEditor] Parsed media count:', mediaList.length);
|
| 1330 |
+
|
| 1331 |
+
if (mediaList && mediaList.length > 0) {{
|
| 1332 |
+
mediaList.forEach(function(m, idx) {{
|
| 1333 |
+
console.log('[VideoEditor] Adding:', idx, m.name, m.type);
|
| 1334 |
+
addMedia(m.name, m.type, m.dataUrl, m.filePath);
|
| 1335 |
+
}});
|
| 1336 |
+
stat('๋ฏธ๋์ด ' + mediaList.length + '๊ฐ ๋ก๋๋จ');
|
| 1337 |
+
}}
|
| 1338 |
+
}} catch(e) {{
|
| 1339 |
+
console.error('[VideoEditor] Parse error:', e);
|
| 1340 |
+
stat('๋ฏธ๋์ด ๋ก๋ ์ค๋ฅ: ' + e.message);
|
| 1341 |
}}
|
| 1342 |
}} else {{
|
| 1343 |
+
console.log('[VideoEditor] No media data');
|
| 1344 |
}}
|
| 1345 |
+
}})();
|
|
|
|
|
|
|
|
|
|
| 1346 |
</script>
|
| 1347 |
</body>
|
| 1348 |
</html>'''
|
|
|
|
| 1404 |
|
| 1405 |
def make_editor(media_list):
|
| 1406 |
"""์๋ํฐ HTML ์์ฑ"""
|
| 1407 |
+
# ๋ฏธ๋์ด ๋ฐ์ดํฐ๋ฅผ base64๋ก ์ธ์ฝ๋ฉ
|
| 1408 |
j = json.dumps(media_list, ensure_ascii=False)
|
| 1409 |
+
encoded = base64.b64encode(j.encode('utf-8')).decode('ascii')
|
| 1410 |
+
|
| 1411 |
+
# HTML ์์ฑ (์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ ํฌํจ)
|
| 1412 |
+
h = get_editor_html(encoded)
|
| 1413 |
+
|
| 1414 |
+
# srcdoc ์์ฑ(double quote)์ ์ํด double quote๋ง ์ด์ค์ผ์ดํ
|
| 1415 |
+
# single quote๋ ๊ทธ๋๋ก ์ ์ง (JavaScript ๋ฌธ์์ด ๋ฑ์์ ์ฌ์ฉ)
|
| 1416 |
+
h = h.replace('"', '"')
|
| 1417 |
+
|
| 1418 |
+
return f'<iframe srcdoc="{h}" style="width:100%;height:700px;border:none;border-radius:10px"></iframe>'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1419 |
|
| 1420 |
|
| 1421 |
def export_mp4(export_json):
|