mirror of
				https://github.com/SillyTavern/SillyTavern.git
				synced 2025-06-05 21:59:27 +02:00 
			
		
		
		
	Fix group VN updates on switching to chat
This commit is contained in:
		| @@ -178,6 +178,7 @@ async function visualNovelRemoveInactive(container) { | |||||||
|  * @returns {Promise<Array>} - An array of promises that resolve when the sprites are set |  * @returns {Promise<Array>} - An array of promises that resolve when the sprites are set | ||||||
|  */ |  */ | ||||||
| async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, expression) { | async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, expression) { | ||||||
|  |     const originalExpression = expression; | ||||||
|     const context = getContext(); |     const context = getContext(); | ||||||
|     const group = context.groups.find(x => x.id == context.groupId); |     const group = context.groups.find(x => x.id == context.groupId); | ||||||
|  |  | ||||||
| @@ -208,6 +209,10 @@ async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, exp | |||||||
|  |  | ||||||
|         const prevExpressionSrc = expressionImage.find('img').attr('src') || null; |         const prevExpressionSrc = expressionImage.find('img').attr('src') || null; | ||||||
|  |  | ||||||
|  |         if (!originalExpression && Array.isArray(spriteCache[memberSpriteFolderName]) && spriteCache[memberSpriteFolderName].length > 0) { | ||||||
|  |             expression = await getLastMessageSprite(avatar); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         const spriteFile = chooseSpriteForExpression(memberSpriteFolderName, expression, { prevExpressionSrc: prevExpressionSrc }); |         const spriteFile = chooseSpriteForExpression(memberSpriteFolderName, expression, { prevExpressionSrc: prevExpressionSrc }); | ||||||
|         if (expressionImage.length) { |         if (expressionImage.length) { | ||||||
|             if (!spriteFolderName || spriteFolderName == memberSpriteFolderName) { |             if (!spriteFolderName || spriteFolderName == memberSpriteFolderName) { | ||||||
| @@ -251,6 +256,23 @@ async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, exp | |||||||
|     return setSpritePromises; |     return setSpritePromises; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Classifies the text of the latest message and returns the expression label. | ||||||
|  |  * @param {string} avatar - The avatar of the character to get the last message for | ||||||
|  |  * @returns {Promise<string>} - The expression label | ||||||
|  |  */ | ||||||
|  | async function getLastMessageSprite(avatar) { | ||||||
|  |     const context = getContext(); | ||||||
|  |     const lastMessage = context.chat.slice().reverse().find(x => x.original_avatar == avatar || (x.force_avatar && x.force_avatar.includes(encodeURIComponent(avatar)))); | ||||||
|  |  | ||||||
|  |     if (lastMessage) { | ||||||
|  |         const text = lastMessage.mes || ''; | ||||||
|  |         return await getExpressionLabel(text); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return null; | ||||||
|  | } | ||||||
|  |  | ||||||
| async function visualNovelUpdateLayers(container) { | async function visualNovelUpdateLayers(container) { | ||||||
|     const context = getContext(); |     const context = getContext(); | ||||||
|     const group = context.groups.find(x => x.id == context.groupId); |     const group = context.groups.find(x => x.id == context.groupId); | ||||||
| @@ -445,7 +467,7 @@ async function setImage(img, path) { | |||||||
|     }); |     }); | ||||||
| } | } | ||||||
|  |  | ||||||
| async function moduleWorker() { | async function moduleWorker({ newChat = false } = {}) { | ||||||
|     const context = getContext(); |     const context = getContext(); | ||||||
|  |  | ||||||
|     // non-characters not supported |     // non-characters not supported | ||||||
| @@ -514,6 +536,10 @@ async function moduleWorker() { | |||||||
|         offlineMode.css('display', 'none'); |         offlineMode.css('display', 'none'); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     if (context.groupId && vnMode && newChat) { | ||||||
|  |         await forceUpdateVisualNovelMode(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     // Don't bother classifying if current char has no sprites and no default expressions are enabled |     // Don't bother classifying if current char has no sprites and no default expressions are enabled | ||||||
|     if ((!Array.isArray(spriteCache[spriteFolderName]) || spriteCache[spriteFolderName].length === 0) && !extension_settings.expressions.showDefault) { |     if ((!Array.isArray(spriteCache[spriteFolderName]) || spriteCache[spriteFolderName].length === 0) && !extension_settings.expressions.showDefault) { | ||||||
|         return; |         return; | ||||||
| @@ -2134,7 +2160,7 @@ function migrateSettings() { | |||||||
|             $('#visual-novel-wrapper').empty(); |             $('#visual-novel-wrapper').empty(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         updateFunction(); |         updateFunction({ newChat: true }); | ||||||
|     }); |     }); | ||||||
|     eventSource.on(event_types.MOVABLE_PANELS_RESET, updateVisualNovelModeDebounced); |     eventSource.on(event_types.MOVABLE_PANELS_RESET, updateVisualNovelModeDebounced); | ||||||
|     eventSource.on(event_types.GROUP_UPDATED, updateVisualNovelModeDebounced); |     eventSource.on(event_types.GROUP_UPDATED, updateVisualNovelModeDebounced); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user