From 47f5a20a9136472dd49a719de5cf96f90dfb30e3 Mon Sep 17 00:00:00 2001 From: hbrain Date: Wed, 27 May 2026 22:53:57 +0200 Subject: [PATCH] Show active worker in admin footer --- new.php | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/new.php b/new.php index 3984e60..cbfc9f0 100644 --- a/new.php +++ b/new.php @@ -234,6 +234,33 @@ function input_dir_state($dir){ $state = is_file($stateFile) ? json_decode((string)file_get_contents($stateFile), true) : []; return is_array($state) ? $state : []; } +function active_worker_jobs($config){ + $jobs = []; + foreach (input_dirs($config['uploads_dir']) as $dir) { + $name = basename($dir); + $state = input_dir_state($dir); + $status = (string)($state['status'] ?? ''); + $locked = is_dir($dir . '/.movmaker-lock'); + if ($locked || $status === 'processing') { + $started = ''; + if (is_file($dir . '/.movmaker-lock/started_at')) $started = trim((string)file_get_contents($dir . '/.movmaker-lock/started_at')); + if ($started === '' && !empty($state)) $started = (string)($state['started_at'] ?? $state['updated_at'] ?? ''); + $jobs[] = ['name'=>$name,'status'=>$status ?: ($locked ? 'processing' : 'unknown'),'started_at'=>$started]; + } + } + return $jobs; +} +function format_job_age($startedAt){ + $ts = strtotime((string)$startedAt); + if (!$ts) return ''; + $seconds = max(0, time() - $ts); + $h = intdiv($seconds, 3600); + $m = intdiv($seconds % 3600, 60); + $s = $seconds % 60; + if ($h > 0) return $h . 'h ' . $m . 'm'; + if ($m > 0) return $m . 'm ' . $s . 's'; + return $s . 's'; +} function input_dir_output($dir){ $state = input_dir_state($dir); return basename((string)($state['output'] ?? '')); @@ -415,6 +442,7 @@ $page = max(1, (int)($_GET['page'] ?? 1)); $editName = $_GET['edit'] ?? ''; $editDir = null; $editStatus = ''; $editRunning = false; $editData = ['title'=>'','date'=>'','place'=>'','description'=>'','captions'=>[],'video_audio'=>[]]; $editFiles = []; if ($editName !== '') { try { $editDir = safe_input_dir($config['uploads_dir'], $editName); $editStatus = input_dir_status($editDir); $editRunning = input_dir_running($editDir); if (!$editRunning) { $editData = read_data($editDir); $editFiles = media_sort_files($editDir, list_files($editDir)); } } catch (Throwable $e) { $err = $e->getMessage(); } } +$runningJobs = active_worker_jobs($config); ?> Admin - <?=h($config['site_name'])?> @@ -605,10 +633,15 @@ document.querySelectorAll('.admin-switches input[type="checkbox"]').forEach(func box.hidden=false; box.innerHTML=jobs.map(fmt).join(''); }catch(e){ - box.hidden=true; + if(box.innerHTML.trim() !== '') box.hidden=false; } } updateJobs(); setInterval(updateJobs,30000); })(); - + + + + + + \ No newline at end of file