speed up char import by postponing tag import

This commit is contained in:
d-ber
2025-01-05 22:36:10 +01:00
parent 989f5a8692
commit c7cbeed9bb

View File

@@ -8851,22 +8851,43 @@ export async function processDroppedFiles(files, data = new Map()) {
'charx',
];
const avatarFileNames = [];
for (const file of files) {
const extension = file.name.split('.').pop().toLowerCase();
if (allowedMimeTypes.some(x => file.type.startsWith(x)) || allowedExtensions.includes(extension)) {
const preservedName = data instanceof Map && data.get(file);
await importCharacter(file, preservedName);
const avatarFileName = await importCharacter(file, preservedName);
if (avatarFileName !== undefined){
avatarFileNames.push(avatarFileName);
}
} else {
toastr.warning(t`Unsupported file type: ` + file.name);
}
}
await ImportMultipleCharactersTags(avatarFileNames);
}
/**
* Imports tags for the given characters
* @param {string[]} avatarFileNames character avatar filenames whose tags are to import
*/
async function ImportMultipleCharactersTags(avatarFileNames) {
await getCharacters();
const currentContext = getContext();
for (let i = 0; i < avatarFileNames.length; i++) {
if (power_user.tag_import_setting !== tag_import_setting.NONE) {
const importedCharacter = currentContext.characters.find(character => character.avatar === avatarFileNames[i]);
await importTags(importedCharacter);
}
}
}
/**
* Imports a character from a file.
* @param {File} file File to import
* @param {string?} preserveFileName Whether to preserve original file name
* @returns {Promise<void>}
* @returns {Promise<string>}
*/
async function importCharacter(file, preserveFileName = '') {
if (is_group_generating || is_send_press) {
@@ -8909,14 +8930,9 @@ async function importCharacter(file, preserveFileName = '') {
oldSelectedChar = characters[this_chid].avatar;
}
await getCharacters();
select_rm_info('char_import', data.file_name, oldSelectedChar);
if (power_user.tag_import_setting !== tag_import_setting.NONE) {
let currentContext = getContext();
let avatarFileName = `${data.file_name}.png`;
let importedCharacter = currentContext.characters.find(character => character.avatar === avatarFileName);
await importTags(importedCharacter);
}
let avatarFileName = `${data.file_name}.png`;
return avatarFileName;
}
}
@@ -10795,9 +10811,15 @@ jQuery(async function () {
return;
}
const avatarFileNames = [];
for (const file of e.target.files) {
await importCharacter(file);
const avatarFileName = await importCharacter(file);
if (avatarFileName !== undefined){
avatarFileNames.push(avatarFileName);
}
}
await ImportMultipleCharactersTags(avatarFileNames);
});
$('#export_button').on('click', function () {