Plugin lives in Plugin/ — invisible to User Script Plugin. dev_install.sh symlinks into /usr/local/emhttp/plugins/varaverk/ for development. Pages: Monitor (5s poll), Scheduler (orchs + Advanced children, toggle + cron), Config (raw editor, host-aware file access), Docs (markdown + live $VAR substitution). API endpoints: monitor.php (JSON), scheduler.php (writes schedule.json + cron.d), config.php (writes conf files with host permission check). Includes: config.php (parser, host detection, var map), scheduler.php (job tree, cron.d rebuild), monitor.php (docker, GPU, resources, fallback, transcode), docs.php (file tree, var substitution, Parsedown renderer).
55 lines
1.7 KiB
PHP
55 lines
1.7 KiB
PHP
<?php
|
|
require_once dirname(__DIR__) . '/include/config.php';
|
|
$files = vv_get_conf_files();
|
|
$active = $_GET['conf'] ?? ($files[0] ?? '');
|
|
if (!in_array($active, $files)) $active = $files[0] ?? '';
|
|
?>
|
|
|
|
<div id="vv-config">
|
|
|
|
<!-- File selector -->
|
|
<div id="vv-conf-tabs">
|
|
<?php foreach ($files as $f): ?>
|
|
<a href="?tab=config&conf=<?= urlencode($f) ?>"
|
|
class="vv-conf-tab<?= $f === $active ? ' active' : '' ?>">
|
|
<?= htmlspecialchars($f) ?>
|
|
</a>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
|
|
<?php if ($active): ?>
|
|
<form id="vv-conf-form">
|
|
<input type="hidden" name="file" value="<?= htmlspecialchars($active) ?>">
|
|
<textarea id="vv-conf-editor" name="content" spellcheck="false"><?=
|
|
htmlspecialchars(vv_read_conf_raw($active))
|
|
?></textarea>
|
|
<div id="vv-conf-actions">
|
|
<button type="button" onclick="vvSaveConf()">Save</button>
|
|
<span id="vv-conf-status"></span>
|
|
</div>
|
|
</form>
|
|
<?php else: ?>
|
|
<p>No configuration files found.</p>
|
|
<?php endif; ?>
|
|
|
|
</div>
|
|
|
|
<script>
|
|
function vvSaveConf() {
|
|
const form = document.getElementById('vv-conf-form');
|
|
const file = form.querySelector('[name=file]').value;
|
|
const content = form.querySelector('[name=content]').value;
|
|
const status = document.getElementById('vv-conf-status');
|
|
|
|
status.textContent = 'Saving...';
|
|
fetch('/plugins/varaverk/api/config.php', {
|
|
method: 'POST',
|
|
headers: {'Content-Type': 'application/json'},
|
|
body: JSON.stringify({file, content})
|
|
})
|
|
.then(r => r.json())
|
|
.then(d => { status.textContent = d.ok ? '✓ Saved' : '✗ ' + (d.error ?? 'Error'); })
|
|
.catch(() => { status.textContent = '✗ Request failed'; });
|
|
}
|
|
</script>
|