Ensure unique suggested sprite names
| @@ -727,6 +727,21 @@ function spriteFolderNameFromCharacter(char) { | |||
| 727 | } | 727 | } |
| 728 | 728 | ||
| 729 | /** | 729 | /** |
| 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 | /** | ||
| 730 | * Slash command callback for /uploadsprite | 745 | * Slash command callback for /uploadsprite |
| 731 | * | 746 | * |
| 732 | * label= is required | 747 | * label= is required |
| @@ -1725,9 +1740,10 @@ async function onClickExpressionUpload(event) { | |||
| 1725 | 1740 | ||
| 1726 | const message = await renderExtensionTemplateAsync(MODULE_NAME, 'templates/upload-expression', { expression, clickedFileName }); | 1741 | const message = await renderExtensionTemplateAsync(MODULE_NAME, 'templates/upload-expression', { expression, clickedFileName }); |
| 1727 | 1742 | ||
| 1728 | spriteName = null; | 1743 | spriteName = generateUniqueSpriteName(expression, existingFiles); |
| 1744 | |||
| 1729 | const input = await Popup.show.input(t`Upload Expression Sprite`, message, | 1745 | const input = await Popup.show.input(t`Upload Expression Sprite`, message, |
| 1730 | `${expression}-${existingFiles.length}`, { customButtons: customButtons }); | 1746 | spriteName, { customButtons: customButtons }); |
| 1731 | 1747 | ||
| 1732 | if (input) { | 1748 | if (input) { |
| 1733 | if (!validateExpressionSpriteName(expression, input)) { | 1749 | if (!validateExpressionSpriteName(expression, input)) { |
| @@ -1735,6 +1751,8 @@ async function onClickExpressionUpload(event) { | |||
| 1735 | return; | 1751 | return; |
| 1736 | } | 1752 | } |
| 1737 | spriteName = input; | 1753 | spriteName = input; |
| 1754 | } else { | ||
| 1755 | spriteName = null; | ||
| 1738 | } | 1756 | } |
| 1739 | } | 1757 | } |
| 1740 | } else { | 1758 | } else { |