frontend: manual subfolder suggestion respects configured folder rule
Pass preferTemplate through forceSuggestedDownloadSubfolder so manual subfolder suggestions use the same configured folder rule as post-search autofill. Added a focused test for the manual path.
This commit is contained in:
@@ -4540,6 +4540,63 @@ test('post-search subfolder suggestion can prefer path template metadata', () =>
|
||||
assert.equal(searchSuggestion.value, 'SDXL\\style');
|
||||
});
|
||||
|
||||
test('manual subfolder suggestion respects the configured folder rule', async () => {
|
||||
const forceSuggestedDownloadSubfolder = eval(`(${extractMethod(downloadTargetMethodsSource, 'forceSuggestedDownloadSubfolder')})`);
|
||||
const calls = [];
|
||||
const categoryEl = { dataset: { value: 'loras' } };
|
||||
const subfolderEl = { value: '', dataset: {} };
|
||||
const dialog = {
|
||||
getSavedDownloadTargetSelection() {
|
||||
return null;
|
||||
},
|
||||
normalizeDownloadCategory(value) {
|
||||
return String(value || '');
|
||||
},
|
||||
getDropdownValue(element) {
|
||||
return element.dataset.value;
|
||||
},
|
||||
getSuggestedDownloadCategory() {
|
||||
return 'loras';
|
||||
},
|
||||
shouldPreserveSavedDownloadCategory() {
|
||||
return false;
|
||||
},
|
||||
async ensureDownloadSubfoldersLoaded() {},
|
||||
getAvailableSubfolders() {
|
||||
return [];
|
||||
},
|
||||
getSuggestedDownloadSubfolder(...args) {
|
||||
calls.push(args[3]);
|
||||
return {
|
||||
value: 'KREA2/krea 2 turbo',
|
||||
baseDirectory: '',
|
||||
suggestionSource: 'template',
|
||||
template: '{base_model}/{first_tag}'
|
||||
};
|
||||
},
|
||||
setDropdownValue(element, value) {
|
||||
element.dataset.value = value;
|
||||
},
|
||||
getCategoryDisplayName(value) {
|
||||
return value;
|
||||
},
|
||||
normalizeDownloadPathValue(value) {
|
||||
return String(value || '').replace(/\\/g, '/');
|
||||
},
|
||||
saveDownloadTargetSelection() {},
|
||||
getSubfolderSuggestionTrackingPatch() {
|
||||
return {};
|
||||
},
|
||||
syncDownloadTargetFolderContext() {}
|
||||
};
|
||||
|
||||
const result = await forceSuggestedDownloadSubfolder.call(dialog, {}, categoryEl, subfolderEl);
|
||||
|
||||
assert.deepEqual(calls, [{ preferTemplate: true }]);
|
||||
assert.equal(result.subfolder, 'KREA2/krea 2 turbo');
|
||||
assert.equal(subfolderEl.value, 'KREA2/krea 2 turbo');
|
||||
});
|
||||
|
||||
test('post-search auto-fill can refresh earlier suggested subfolder', async () => {
|
||||
const applySuggestedDownloadSubfolder = eval(`(${extractMethod(downloadTargetMethodsSource, 'applySuggestedDownloadSubfolder')})`);
|
||||
const getSubfolderSuggestionTrackingPatch = eval(`(${extractMethod(downloadTargetMethodsSource, 'getSubfolderSuggestionTrackingPatch')})`);
|
||||
|
||||
@@ -2075,7 +2075,7 @@ export const downloadTargetMethods = {
|
||||
}
|
||||
},
|
||||
|
||||
async forceSuggestedDownloadSubfolder(missing, categoryEl, subfolderEl) {
|
||||
async forceSuggestedDownloadSubfolder(missing, categoryEl, subfolderEl, options = {}) {
|
||||
if (!categoryEl || !subfolderEl) return null;
|
||||
|
||||
const saved = this.getSavedDownloadTargetSelection(missing);
|
||||
@@ -2088,13 +2088,17 @@ export const downloadTargetMethods = {
|
||||
}
|
||||
await this.ensureDownloadSubfoldersLoaded(category);
|
||||
let folders = this.getAvailableSubfolders(category);
|
||||
let suggestion = this.getSuggestedDownloadSubfolder(missing, category, folders);
|
||||
const suggestionOptions = {
|
||||
// Manual Suggest must use the same configured folder rule as post-search autofill.
|
||||
preferTemplate: options.preferTemplate !== false
|
||||
};
|
||||
let suggestion = this.getSuggestedDownloadSubfolder(missing, category, folders, suggestionOptions);
|
||||
|
||||
if (!suggestion && suggestedCategory && suggestedCategory !== category) {
|
||||
category = suggestedCategory;
|
||||
await this.ensureDownloadSubfoldersLoaded(category);
|
||||
folders = this.getAvailableSubfolders(category);
|
||||
suggestion = this.getSuggestedDownloadSubfolder(missing, category, folders);
|
||||
suggestion = this.getSuggestedDownloadSubfolder(missing, category, folders, suggestionOptions);
|
||||
}
|
||||
|
||||
if (!suggestion) {
|
||||
|
||||
Reference in New Issue
Block a user