Ensure unique suggested sprite names

531999dc04c89c21232d6992619075139eec7249

Wolfsblvt <wolfsblvt@gmail.com>

1 files changed, +20 -2Showing whitespace changes
public/scripts/extensions/expressions/index.js+20 -2
@@ -727,6 +727,21 @@ function spriteFolderNameFromCharacter(char) {
727727}
728728
729729/**
730+ * Generates a unique sprite name by appending an index to the given expression. *
731+ * @param {string} expression - The base expression to be used as the prefix for the sprite name.
732+ * @param {ExpressionImage[]} existingFiles - An array of existing file objects, each containing a fileName property.
733+ * @returns {string} - A unique sprite name with the format "expression-index".
734+ */
735+function generateUniqueSpriteName(expression, existingFiles) {
736+ let index = existingFiles.length;
737+ let newSpriteName;
738+ do {
739+ newSpriteName = `${expression}-${index++}`;
740+ } while (existingFiles.some(file => withoutExtension(file.fileName) === newSpriteName));
741+ return newSpriteName;
742+}
743+
744+/**
730745 * Slash command callback for /uploadsprite
731746 *
732747 * label= is required
@@ -1725,9 +1740,10 @@ async function onClickExpressionUpload(event) {
17251740
17261741 const message = await renderExtensionTemplateAsync(MODULE_NAME, 'templates/upload-expression', { expression, clickedFileName });
17271742
17281743 spriteName = nullgenerateUniqueSpriteName(expression, existingFiles);
1744+
17291745 const input = await Popup.show.input(t`Upload Expression Sprite`, message,
17301746 `${expression}-${existingFiles.length}`spriteName, { customButtons: customButtons });
17311747
17321748 if (input) {
17331749 if (!validateExpressionSpriteName(expression, input)) {
@@ -1735,6 +1751,8 @@ async function onClickExpressionUpload(event) {
17351751 return;
17361752 }
17371753 spriteName = input;
1754+ } else {
1755+ spriteName = null;
17381756 }
17391757 }
17401758 } else {