speed up char import by postponing tag import

c7cbeed9bb1b73ccb011ad2ba5da373837109360

d-ber <davide.bertalero@studenti.unimi.it>

1 files changed, +31 -9Showing whitespace changes
public/script.js+31 -9
@@ -8851,22 +8851,43 @@ export async function processDroppedFiles(files, data = new Map()) {
8851 'charx',8851 'charx',
8852 ];8852 ];
88538853
8854 const avatarFileNames = [];
8854 for (const file of files) {8855 for (const file of files) {
8855 const extension = file.name.split('.').pop().toLowerCase();8856 const extension = file.name.split('.').pop().toLowerCase();
8856 if (allowedMimeTypes.some(x => file.type.startsWith(x)) || allowedExtensions.includes(extension)) {8857 if (allowedMimeTypes.some(x => file.type.startsWith(x)) || allowedExtensions.includes(extension)) {
8857 const preservedName = data instanceof Map && data.get(file);8858 const preservedName = data instanceof Map && data.get(file);
8858 await importCharacter(file, preservedName);8859 const avatarFileName = await importCharacter(file, preservedName);
8860 if (avatarFileName !== undefined){
8861 avatarFileNames.push(avatarFileName);
8862 }
8859 } else {8863 } else {
8860 toastr.warning(t`Unsupported file type: ` + file.name);8864 toastr.warning(t`Unsupported file type: ` + file.name);
8861 }8865 }
8862 }8866 }
8867
8868 await ImportMultipleCharactersTags(avatarFileNames);
8869}
8870
8871/**
8872 * Imports tags for the given characters
8873 * @param {string[]} avatarFileNames character avatar filenames whose tags are to import
8874 */
8875async function ImportMultipleCharactersTags(avatarFileNames) {
8876 await getCharacters();
8877 const currentContext = getContext();
8878 for (let i = 0; i < avatarFileNames.length; i++) {
8879 if (power_user.tag_import_setting !== tag_import_setting.NONE) {
8880 const importedCharacter = currentContext.characters.find(character => character.avatar === avatarFileNames[i]);
8881 await importTags(importedCharacter);
8882 }
8883 }
8863}8884}
88648885
8865/**8886/**
8866 * Imports a character from a file.8887 * Imports a character from a file.
8867 * @param {File} file File to import8888 * @param {File} file File to import
8868 * @param {string?} preserveFileName Whether to preserve original file name8889 * @param {string?} preserveFileName Whether to preserve original file name
8869 * @returns {Promise<void>}8890 * @returns {Promise<string>}
8870 */8891 */
8871async function importCharacter(file, preserveFileName = '') {8892async function importCharacter(file, preserveFileName = '') {
8872 if (is_group_generating || is_send_press) {8893 if (is_group_generating || is_send_press) {
@@ -8909,14 +8930,9 @@ async function importCharacter(file, preserveFileName = '') {
8909 oldSelectedChar = characters[this_chid].avatar;8930 oldSelectedChar = characters[this_chid].avatar;
8910 }8931 }
89118932
8912 await getCharacters();
8913 select_rm_info('char_import', data.file_name, oldSelectedChar);8933 select_rm_info('char_import', data.file_name, oldSelectedChar);
8914 if (power_user.tag_import_setting !== tag_import_setting.NONE) {
8915 let currentContext = getContext();
8916 let avatarFileName = `${data.file_name}.png`;8934 let avatarFileName = `${data.file_name}.png`;
8917 let importedCharacter = currentContext.characters.find(character => character.avatar === avatarFileName);8935 return avatarFileName;
8918 await importTags(importedCharacter);
8919 }
8920 }8936 }
8921}8937}
89228938
@@ -10795,9 +10811,15 @@ jQuery(async function () {
10795 return;10811 return;
10796 }10812 }
1079710813
10814 const avatarFileNames = [];
10798 for (const file of e.target.files) {10815 for (const file of e.target.files) {
10799 await importCharacter(file);10816 const avatarFileName = await importCharacter(file);
10817 if (avatarFileName !== undefined){
10818 avatarFileNames.push(avatarFileName);
10800 }10819 }
10820 }
10821
10822 await ImportMultipleCharactersTags(avatarFileNames);
10801 });10823 });
1080210824
10803 $('#export_button').on('click', function () {10825 $('#export_button').on('click', function () {