Update app.py
Browse files
app.py
CHANGED
@@ -1038,6 +1038,16 @@ HTML_TEMPLATE = r"""
|
|
1038 |
const serverVid = "__VID__";
|
1039 |
const serverMsg = "__MSG__";
|
1040 |
document.getElementById('msg').textContent = serverMsg;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1041 |
|
1042 |
// Références DOM globales pour l’éditeur (nécessaires à tout le code en dessous)
|
1043 |
const statusEl = document.getElementById('status');
|
@@ -1459,6 +1469,7 @@ function fileStem(name){ const i = name.lastIndexOf('.'); return i>0 ? name.slic
|
|
1459 |
let vidStem = '';
|
1460 |
let bustToken = Date.now();
|
1461 |
let fps = 30, frames = 0;
|
|
|
1462 |
let currentIdx = 0;
|
1463 |
let mode = 'view';
|
1464 |
|
@@ -1846,8 +1857,9 @@ async function loadVideoAndMeta() {
|
|
1846 |
player.load();
|
1847 |
fitCanvas();
|
1848 |
statusEl.textContent = 'Chargement vidéo…';
|
1849 |
-
|
1850 |
-
|
|
|
1851 |
if(r.ok){
|
1852 |
const m=await r.json();
|
1853 |
fps=m.fps||30; frames=m.frames||0;
|
@@ -1868,7 +1880,12 @@ async function loadVideoAndMeta() {
|
|
1868 |
player.addEventListener('loadedmetadata', async ()=>{
|
1869 |
fitCanvas();
|
1870 |
if(!frames || frames<=0){
|
1871 |
-
try{
|
|
|
|
|
|
|
|
|
|
|
1872 |
}
|
1873 |
currentIdx=0; goFrame.value=1; draw();
|
1874 |
});
|
|
|
1038 |
const serverVid = "__VID__";
|
1039 |
const serverMsg = "__MSG__";
|
1040 |
document.getElementById('msg').textContent = serverMsg;
|
1041 |
+
// Après affichage du message, on retire ?msg=... de l'URL pour éviter qu'il persiste au refresh.
|
1042 |
+
try {
|
1043 |
+
const u = new URL(location.href);
|
1044 |
+
if (u.searchParams.has('msg')) {
|
1045 |
+
u.searchParams.delete('msg');
|
1046 |
+
const q = u.searchParams.toString();
|
1047 |
+
history.replaceState({}, '', u.pathname + (q ? ('?' + q) : ''));
|
1048 |
+
}
|
1049 |
+
} catch (_) {}
|
1050 |
+
|
1051 |
|
1052 |
// Références DOM globales pour l’éditeur (nécessaires à tout le code en dessous)
|
1053 |
const statusEl = document.getElementById('status');
|
|
|
1469 |
let vidStem = '';
|
1470 |
let bustToken = Date.now();
|
1471 |
let fps = 30, frames = 0;
|
1472 |
+
let metaPromise = null; // évite les doubles requêtes /meta
|
1473 |
let currentIdx = 0;
|
1474 |
let mode = 'view';
|
1475 |
|
|
|
1857 |
player.load();
|
1858 |
fitCanvas();
|
1859 |
statusEl.textContent = 'Chargement vidéo…';
|
1860 |
+
try{
|
1861 |
+
metaPromise = fetch('/meta/'+encodeURICompnent(vidName));
|
1862 |
+
const r = await metaPromise;
|
1863 |
if(r.ok){
|
1864 |
const m=await r.json();
|
1865 |
fps=m.fps||30; frames=m.frames||0;
|
|
|
1880 |
player.addEventListener('loadedmetadata', async ()=>{
|
1881 |
fitCanvas();
|
1882 |
if(!frames || frames<=0){
|
1883 |
+
try{
|
1884 |
+
if (metaPromise) {
|
1885 |
+
const r = await metaPromise;
|
1886 |
+
if (r.ok) { const m = await r.json(); fps = m.fps||30; frames = m.frames||0; }
|
1887 |
+
}
|
1888 |
+
}catch{}
|
1889 |
}
|
1890 |
currentIdx=0; goFrame.value=1; draw();
|
1891 |
});
|