fix: config modal scrollbar, scheduler-config.js, logging API endpoint, static cache-busting
This commit is contained in:
@@ -24,21 +24,37 @@ AniWorld.SchedulerConfig = (function() {
|
||||
|
||||
if (data.success) {
|
||||
const config = data.config;
|
||||
const runtimeStatus = data.status || {};
|
||||
|
||||
// Update UI elements
|
||||
document.getElementById('scheduled-rescan-enabled').checked = config.enabled;
|
||||
document.getElementById('scheduled-rescan-time').value = config.time || '03:00';
|
||||
document.getElementById('auto-download-after-rescan').checked = config.auto_download_after_rescan;
|
||||
document.getElementById('scheduled-rescan-time').value = config.schedule_time || '03:00';
|
||||
|
||||
// Update status display
|
||||
document.getElementById('next-rescan-time').textContent =
|
||||
config.next_run ? new Date(config.next_run).toLocaleString() : 'Not scheduled';
|
||||
document.getElementById('last-rescan-time').textContent =
|
||||
config.last_run ? new Date(config.last_run).toLocaleString() : 'Never';
|
||||
const autoDownload = document.getElementById('auto-download-after-rescan');
|
||||
if (autoDownload) {
|
||||
autoDownload.checked = config.auto_download_after_rescan || false;
|
||||
}
|
||||
|
||||
// Update schedule day checkboxes
|
||||
const days = config.schedule_days || ['mon','tue','wed','thu','fri','sat','sun'];
|
||||
['mon','tue','wed','thu','fri','sat','sun'].forEach(function(day) {
|
||||
const cb = document.getElementById('scheduler-day-' + day);
|
||||
if (cb) cb.checked = days.indexOf(day) !== -1;
|
||||
});
|
||||
|
||||
// Update status display (runtime fields come from data.status)
|
||||
const nextRunEl = document.getElementById('scheduler-next-run');
|
||||
if (nextRunEl) {
|
||||
nextRunEl.textContent = runtimeStatus.next_run
|
||||
? new Date(runtimeStatus.next_run).toLocaleString()
|
||||
: 'Not scheduled';
|
||||
}
|
||||
|
||||
const statusBadge = document.getElementById('scheduler-running-status');
|
||||
statusBadge.textContent = config.is_running ? 'Running' : 'Stopped';
|
||||
statusBadge.className = 'info-value status-badge ' + (config.is_running ? 'running' : 'stopped');
|
||||
if (statusBadge) {
|
||||
statusBadge.textContent = runtimeStatus.is_running ? 'Running' : 'Stopped';
|
||||
statusBadge.className = 'info-value status-badge ' + (runtimeStatus.is_running ? 'running' : 'stopped');
|
||||
}
|
||||
|
||||
// Enable/disable time input based on checkbox
|
||||
toggleTimeInput();
|
||||
@@ -55,25 +71,45 @@ AniWorld.SchedulerConfig = (function() {
|
||||
async function save() {
|
||||
try {
|
||||
const enabled = document.getElementById('scheduled-rescan-enabled').checked;
|
||||
const interval = parseInt(document.getElementById('scheduled-rescan-interval').value) || 60;
|
||||
const scheduleTime = document.getElementById('scheduled-rescan-time').value || '03:00';
|
||||
|
||||
// Get current config
|
||||
const configResponse = await AniWorld.ApiClient.get(AniWorld.Constants.API.CONFIG);
|
||||
if (!configResponse) return;
|
||||
const config = await configResponse.json();
|
||||
// Collect checked day checkboxes
|
||||
const scheduleDays = ['mon','tue','wed','thu','fri','sat','sun'].filter(function(day) {
|
||||
const cb = document.getElementById('scheduler-day-' + day);
|
||||
return cb && cb.checked;
|
||||
});
|
||||
|
||||
// Update scheduler settings
|
||||
config.scheduler = {
|
||||
const autoDownloadEl = document.getElementById('auto-download-after-rescan');
|
||||
const autoDownload = autoDownloadEl ? autoDownloadEl.checked : false;
|
||||
|
||||
const intervalEl = document.getElementById('scheduled-rescan-interval');
|
||||
const interval = intervalEl ? (parseInt(intervalEl.value) || 60) : 60;
|
||||
|
||||
// POST directly to the scheduler config endpoint
|
||||
const payload = {
|
||||
enabled: enabled,
|
||||
schedule_time: scheduleTime,
|
||||
schedule_days: scheduleDays,
|
||||
auto_download_after_rescan: autoDownload,
|
||||
interval_minutes: interval
|
||||
};
|
||||
|
||||
// Save updated config
|
||||
const response = await AniWorld.ApiClient.put(AniWorld.Constants.API.CONFIG, config);
|
||||
const response = await AniWorld.ApiClient.post(API.SCHEDULER_CONFIG, payload);
|
||||
if (!response) return;
|
||||
|
||||
AniWorld.UI.showToast('Scheduler configuration saved successfully', 'success');
|
||||
await load();
|
||||
const result = await response.json();
|
||||
if (result.success) {
|
||||
AniWorld.UI.showToast('Scheduler configuration saved successfully', 'success');
|
||||
// Update next run display from response
|
||||
const nextRunEl = document.getElementById('scheduler-next-run');
|
||||
if (nextRunEl && result.status) {
|
||||
nextRunEl.textContent = result.status.next_run
|
||||
? new Date(result.status.next_run).toLocaleString()
|
||||
: 'Not scheduled';
|
||||
}
|
||||
} else {
|
||||
AniWorld.UI.showToast('Failed to save scheduler configuration', 'error');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error saving scheduler config:', error);
|
||||
AniWorld.UI.showToast('Failed to save scheduler configuration', 'error');
|
||||
|
||||
Reference in New Issue
Block a user