Consolidate all paths to plugin flash dir, fix watchdog 7.3 triggers
- Move SCRIPTS_DIR/DATA_DIR/STATE_DIR from appdata to /boot/config/plugins/varaverk - All state files now in STATE_DIR (no more /tmp or /boot/config root writes) - Bootstrap: Gitea-first clone with GitHub fallback, no array dependency - varaverk.cfg seeded with Gitea connection settings - .gitignore: add State_Files/, varaverk.cfg, varaverk-*.txz - Partnership/transcode/fallback scripts use STATE_DIR variables - PHP config.php: DATA_DIR/STATE_DIR constants, VV_SETUP_STATE_FILE dynamic - deploy.sh PROD_ROOT updated to plugin flash dir Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
9191a54637
commit
fb0530deba
@@ -93,8 +93,8 @@ $isConfOnlyFlow = !empty($masterHost1) && $confMissing;
|
||||
method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: params
|
||||
}).then(r => r.json()).then(d => {
|
||||
if (d.ok) {
|
||||
status.textContent = '✓ Created — loading…'; status.className = 'ok';
|
||||
setTimeout(() => { window.location.href = '?tab=scheduler&vv_setup=' + encodeURIComponent(<?= json_encode($myHostId . '.conf') ?>); }, 600);
|
||||
status.textContent = '✓ Created'; status.className = 'ok';
|
||||
vvShowStep2('?tab=scheduler&vv_setup=' + encodeURIComponent(<?= json_encode($myHostId . '.conf') ?>));
|
||||
} else {
|
||||
btn.disabled = false; btn.textContent = 'Create <?= htmlspecialchars($myHostId) ?>.conf and continue →';
|
||||
status.textContent = '✗ ' + (d.error ?? 'Error'); status.className = 'err';
|
||||
@@ -151,8 +151,8 @@ $isConfOnlyFlow = !empty($masterHost1) && $confMissing;
|
||||
method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: params
|
||||
}).then(r => r.json()).then(d => {
|
||||
if (d.ok) {
|
||||
status.textContent = '✓ Configuration pulled — loading…'; status.className = 'ok';
|
||||
setTimeout(() => { window.location.href = d.redirect ?? '?tab=scheduler'; }, 600);
|
||||
status.textContent = '✓ Configuration pulled'; status.className = 'ok';
|
||||
vvShowStep2(d.redirect ?? '?tab=scheduler');
|
||||
} else {
|
||||
btn.disabled = false; btn.textContent = 'Pull configuration from HOST1 →';
|
||||
status.textContent = '✗ ' + (d.error ?? 'Error'); status.className = 'err';
|
||||
@@ -244,8 +244,8 @@ $isConfOnlyFlow = !empty($masterHost1) && $confMissing;
|
||||
method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: params
|
||||
}).then(r => r.json()).then(d => {
|
||||
if (d.ok) {
|
||||
status.textContent = '✓ Saved — loading…'; status.className = 'ok';
|
||||
setTimeout(() => { window.location.href = d.redirect ?? '?tab=scheduler&vv_setup=master.conf'; }, 600);
|
||||
status.textContent = '✓ Saved'; status.className = 'ok';
|
||||
vvShowStep2(d.redirect ?? '?tab=scheduler&vv_setup=master.conf');
|
||||
} else {
|
||||
btn.disabled = false; btn.textContent = 'Save and continue →';
|
||||
status.textContent = '✗ ' + (d.error ?? 'Error'); status.className = 'err';
|
||||
@@ -255,4 +255,58 @@ $isConfOnlyFlow = !empty($masterHost1) && $confMissing;
|
||||
</script>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Step 2: API key — shown after any wizard flow completes -->
|
||||
<div id="vv-setup-step2" style="display:none;">
|
||||
<hr class="vv-setup-divider">
|
||||
<div style="font-size:10px;color:#555;text-transform:uppercase;letter-spacing:.06em;margin-bottom:10px;">Step 2 of 2 — Unraid API Key</div>
|
||||
<div class="vv-setup-info-box">
|
||||
Varaverk uses the local Unraid API to display live stats on the Monitor tab.
|
||||
Creates a <strong>Varaverk</strong> key via <code style="color:#555;">unraid-api</code> and writes it to your host conf.
|
||||
</div>
|
||||
<div style="display:flex;gap:10px;align-items:center;">
|
||||
<button id="vv-key-btn2" onclick="vvCreateApiKeyWizard(this)"
|
||||
style="flex:1;padding:10px 0;background:#1a3a1a;border:1px solid #2e6b2e;color:#6fcf97;
|
||||
font-family:monospace;font-size:13px;border-radius:3px;cursor:pointer;">
|
||||
Create API Key
|
||||
</button>
|
||||
<a id="vv-skip-link" href="#" onclick="vvWizardContinue(event)"
|
||||
style="font-size:11px;color:#444;text-decoration:none;white-space:nowrap;">Skip →</a>
|
||||
</div>
|
||||
<div id="vv-key-status2" style="margin-top:8px;font-size:12px;min-height:16px;"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let _vvWizardNext = '';
|
||||
function vvShowStep2(redirect) {
|
||||
_vvWizardNext = redirect;
|
||||
document.getElementById('vv-setup-step2').style.display = 'block';
|
||||
}
|
||||
function vvWizardContinue(e) {
|
||||
if (e) e.preventDefault();
|
||||
window.location.href = _vvWizardNext || '?tab=scheduler';
|
||||
}
|
||||
function vvCreateApiKeyWizard(btn) {
|
||||
const status = document.getElementById('vv-key-status2');
|
||||
btn.disabled = true; btn.textContent = '⟳ Creating…';
|
||||
fetch('/plugins/varaverk/api/create_api_key.php?_=' + Date.now())
|
||||
.then(r => r.json())
|
||||
.then(d => {
|
||||
if (d.ok) {
|
||||
status.textContent = '✓ Key created — ' + d.key_preview; status.style.color = '#4a8';
|
||||
btn.textContent = 'Continue →'; btn.disabled = false;
|
||||
btn.onclick = vvWizardContinue;
|
||||
const skip = document.getElementById('vv-skip-link');
|
||||
if (skip) skip.style.display = 'none';
|
||||
} else {
|
||||
status.textContent = '✗ ' + (d.error ?? 'Failed'); status.style.color = '#a44';
|
||||
btn.disabled = false; btn.textContent = 'Retry';
|
||||
}
|
||||
})
|
||||
.catch(e => {
|
||||
status.textContent = '✗ ' + e; status.style.color = '#a44';
|
||||
btn.disabled = false; btn.textContent = 'Retry';
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user