diff --git a/site/app.py b/site/app.py
index 6e92d63..fab97b3 100644
--- a/site/app.py
+++ b/site/app.py
@@ -20,7 +20,7 @@ if _sys_path_root not in sys.path:
sys.path.insert(0, _sys_path_root)
# Версия приложения (меняется при изменениях)
-VERSION = "0.0.8"
+VERSION = "0.0.9"
def create_app():
diff --git a/site/templates/index.html b/site/templates/index.html
index 6e8f59f..1983238 100644
--- a/site/templates/index.html
+++ b/site/templates/index.html
@@ -205,6 +205,8 @@ async function uploadFiles() {
// Фаза 2: обработка (SSE — прогресс по каждому файлу)
for (let i = 0; i < total; i++) ss(i, '⏳');
+ const fileTimers = {}; // idx -> performance.now()
+ const fileIntervals = {}; // idx -> setInterval id
st.className = 'status progress';
st.textContent = 'Обработка...';
const t0 = performance.now();
@@ -218,11 +220,17 @@ async function uploadFiles() {
const es = new EventSource('/api/process_stream/' + currentSid);
es.addEventListener('start', function(e) {
const d = JSON.parse(e.data);
- ss(d.idx, '⏳ обработка');
+ fileTimers[d.idx] = performance.now();
+ fileIntervals[d.idx] = setInterval(function() {
+ const elapsed = ((performance.now() - fileTimers[d.idx]) / 1000).toFixed(1);
+ ss(d.idx, '⏳ ' + elapsed + 'с');
+ }, 200);
});
es.addEventListener('done', function(e) {
const d = JSON.parse(e.data);
- ss(d.idx, '✓');
+ clearInterval(fileIntervals[d.idx]);
+ const elapsed = ((performance.now() - (fileTimers[d.idx] || performance.now())) / 1000).toFixed(1);
+ ss(d.idx, '✓ ' + elapsed + 'с');
});
es.addEventListener('complete', function(e) {
es.close();