Ensure unique suggested sprite names

This commit is contained in:
Wolfsblvt
2025-02-19 22:12:29 +01:00
parent 58bbfc0d4e
commit 531999dc04

View File

@ -726,6 +726,21 @@ function spriteFolderNameFromCharacter(char) {
return expressionOverride?.path ? expressionOverride.path : avatarFileName; return expressionOverride?.path ? expressionOverride.path : avatarFileName;
} }
/**
* Generates a unique sprite name by appending an index to the given expression. *
* @param {string} expression - The base expression to be used as the prefix for the sprite name.
* @param {ExpressionImage[]} existingFiles - An array of existing file objects, each containing a fileName property.
* @returns {string} - A unique sprite name with the format "expression-index".
*/
function generateUniqueSpriteName(expression, existingFiles) {
let index = existingFiles.length;
let newSpriteName;
do {
newSpriteName = `${expression}-${index++}`;
} while (existingFiles.some(file => withoutExtension(file.fileName) === newSpriteName));
return newSpriteName;
}
/** /**
* Slash command callback for /uploadsprite * Slash command callback for /uploadsprite
* *
@ -1725,9 +1740,10 @@ async function onClickExpressionUpload(event) {
const message = await renderExtensionTemplateAsync(MODULE_NAME, 'templates/upload-expression', { expression, clickedFileName }); const message = await renderExtensionTemplateAsync(MODULE_NAME, 'templates/upload-expression', { expression, clickedFileName });
spriteName = null; spriteName = generateUniqueSpriteName(expression, existingFiles);
const input = await Popup.show.input(t`Upload Expression Sprite`, message, const input = await Popup.show.input(t`Upload Expression Sprite`, message,
`${expression}-${existingFiles.length}`, { customButtons: customButtons }); spriteName, { customButtons: customButtons });
if (input) { if (input) {
if (!validateExpressionSpriteName(expression, input)) { if (!validateExpressionSpriteName(expression, input)) {
@ -1735,6 +1751,8 @@ async function onClickExpressionUpload(event) {
return; return;
} }
spriteName = input; spriteName = input;
} else {
spriteName = null;
} }
} }
} else { } else {