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 |
});
|