feat: add metadata refresh skip paths setting, #790

This commit is contained in:
Will Miao
2026-02-09 09:53:40 +08:00
parent a13fbbff48
commit 024dfff021
15 changed files with 257 additions and 1 deletions

View File

@@ -133,6 +133,10 @@ export class SettingsManager {
backendSettings?.auto_organize_exclusions ?? defaults.auto_organize_exclusions
);
merged.metadata_refresh_skip_paths = this.normalizePatternList(
backendSettings?.metadata_refresh_skip_paths ?? defaults.metadata_refresh_skip_paths
);
Object.keys(merged).forEach(key => this.backendSettingKeys.add(key));
return merged;
@@ -349,6 +353,16 @@ export class SettingsManager {
});
}
const metadataRefreshSkipPathsInput = document.getElementById('metadataRefreshSkipPaths');
if (metadataRefreshSkipPathsInput) {
metadataRefreshSkipPathsInput.addEventListener('keydown', (event) => {
if (event.key === 'Enter' && !event.shiftKey) {
event.preventDefault();
this.saveMetadataRefreshSkipPaths();
}
});
}
this.setupPriorityTagInputs();
this.initialized = true;
@@ -410,6 +424,16 @@ export class SettingsManager {
autoOrganizeExclusionsError.textContent = '';
}
const metadataRefreshSkipPathsInput = document.getElementById('metadataRefreshSkipPaths');
if (metadataRefreshSkipPathsInput) {
const skipPaths = this.normalizePatternList(state.global.settings.metadata_refresh_skip_paths);
metadataRefreshSkipPathsInput.value = skipPaths.join(', ');
}
const metadataRefreshSkipPathsError = document.getElementById('metadataRefreshSkipPathsError');
if (metadataRefreshSkipPathsError) {
metadataRefreshSkipPathsError.textContent = '';
}
// Set video autoplay on hover setting
const autoplayOnHoverCheckbox = document.getElementById('autoplayOnHover');
if (autoplayOnHoverCheckbox) {
@@ -1721,6 +1745,58 @@ export class SettingsManager {
}
}
async saveMetadataRefreshSkipPaths() {
const input = document.getElementById('metadataRefreshSkipPaths');
const errorElement = document.getElementById('metadataRefreshSkipPathsError');
if (!input) return;
const normalized = this.normalizePatternList(input.value);
if (input.value.trim() && normalized.length === 0) {
if (errorElement) {
errorElement.textContent = translate(
'settings.metadataRefreshSkipPaths.validation.noPaths',
{},
'Enter at least one path separated by commas.'
);
}
return;
}
const current = this.normalizePatternList(state.global.settings.metadata_refresh_skip_paths);
if (normalized.join('|') === current.join('|')) {
if (errorElement) {
errorElement.textContent = '';
}
return;
}
try {
if (errorElement) {
errorElement.textContent = '';
}
await this.saveSetting('metadata_refresh_skip_paths', normalized);
input.value = normalized.join(', ');
showToast(
'toast.settings.settingsUpdated',
{ setting: translate('settings.metadataRefreshSkipPaths.label') },
'success'
);
} catch (error) {
console.error('Failed to save metadata refresh skip paths:', error);
if (errorElement) {
errorElement.textContent = translate(
'settings.metadataRefreshSkipPaths.validation.saveFailed',
{ message: error.message },
`Unable to save skip paths: ${error.message}`
);
}
showToast('toast.settings.settingSaveFailed', { message: error.message }, 'error');
}
}
async saveInputSetting(elementId, settingKey) {
const element = document.getElementById(elementId);
if (!element) return;

View File

@@ -35,6 +35,7 @@ const DEFAULT_SETTINGS_BASE = Object.freeze({
priority_tags: { ...DEFAULT_PRIORITY_TAG_CONFIG },
update_flag_strategy: 'same_base',
auto_organize_exclusions: [],
metadata_refresh_skip_paths: [],
});
export function createDefaultSettings() {