Fix group VN updates on switching to chat

a7d7b6fb0fc4e35ece5aa056a6c3e0bdaf102160

Cohee <18619528+Cohee1207@users.noreply.github.com>

1 files changed, +28 -2Showing whitespace changes
public/scripts/extensions/expressions/index.js+28 -2
@@ -178,6 +178,7 @@ async function visualNovelRemoveInactive(container) {
178 * @returns {Promise<Array>} - An array of promises that resolve when the sprites are set178 * @returns {Promise<Array>} - An array of promises that resolve when the sprites are set
179 */179 */
180async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, expression) {180async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, expression) {
181 const originalExpression = expression;
181 const context = getContext();182 const context = getContext();
182 const group = context.groups.find(x => x.id == context.groupId);183 const group = context.groups.find(x => x.id == context.groupId);
183184
@@ -208,6 +209,10 @@ async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, exp
208209
209 const prevExpressionSrc = expressionImage.find('img').attr('src') || null;210 const prevExpressionSrc = expressionImage.find('img').attr('src') || null;
210211
212 if (!originalExpression && Array.isArray(spriteCache[memberSpriteFolderName]) && spriteCache[memberSpriteFolderName].length > 0) {
213 expression = await getLastMessageSprite(avatar);
214 }
215
211 const spriteFile = chooseSpriteForExpression(memberSpriteFolderName, expression, { prevExpressionSrc: prevExpressionSrc });216 const spriteFile = chooseSpriteForExpression(memberSpriteFolderName, expression, { prevExpressionSrc: prevExpressionSrc });
212 if (expressionImage.length) {217 if (expressionImage.length) {
213 if (!spriteFolderName || spriteFolderName == memberSpriteFolderName) {218 if (!spriteFolderName || spriteFolderName == memberSpriteFolderName) {
@@ -251,6 +256,23 @@ async function visualNovelSetCharacterSprites(vnContainer, spriteFolderName, exp
251 return setSpritePromises;256 return setSpritePromises;
252}257}
253258
259/**
260 * Classifies the text of the latest message and returns the expression label.
261 * @param {string} avatar - The avatar of the character to get the last message for
262 * @returns {Promise<string>} - The expression label
263 */
264async function getLastMessageSprite(avatar) {
265 const context = getContext();
266 const lastMessage = context.chat.slice().reverse().find(x => x.original_avatar == avatar || (x.force_avatar && x.force_avatar.includes(encodeURIComponent(avatar))));
267
268 if (lastMessage) {
269 const text = lastMessage.mes || '';
270 return await getExpressionLabel(text);
271 }
272
273 return null;
274}
275
254async function visualNovelUpdateLayers(container) {276async function visualNovelUpdateLayers(container) {
255 const context = getContext();277 const context = getContext();
256 const group = context.groups.find(x => x.id == context.groupId);278 const group = context.groups.find(x => x.id == context.groupId);
@@ -445,7 +467,7 @@ async function setImage(img, path) {
445 });467 });
446}468}
447469
448async function moduleWorker() {470async function moduleWorker({ newChat = false } = {}) {
449 const context = getContext();471 const context = getContext();
450472
451 // non-characters not supported473 // non-characters not supported
@@ -514,6 +536,10 @@ async function moduleWorker() {
514 offlineMode.css('display', 'none');536 offlineMode.css('display', 'none');
515 }537 }
516538
539 if (context.groupId && vnMode && newChat) {
540 await forceUpdateVisualNovelMode();
541 }
542
517 // Don't bother classifying if current char has no sprites and no default expressions are enabled543 // Don't bother classifying if current char has no sprites and no default expressions are enabled
518 if ((!Array.isArray(spriteCache[spriteFolderName]) || spriteCache[spriteFolderName].length === 0) && !extension_settings.expressions.showDefault) {544 if ((!Array.isArray(spriteCache[spriteFolderName]) || spriteCache[spriteFolderName].length === 0) && !extension_settings.expressions.showDefault) {
519 return;545 return;
@@ -2134,7 +2160,7 @@ function migrateSettings() {
2134 $('#visual-novel-wrapper').empty();2160 $('#visual-novel-wrapper').empty();
2135 }2161 }
21362162
2137 updateFunction();2163 updateFunction({ newChat: true });
2138 });2164 });
2139 eventSource.on(event_types.MOVABLE_PANELS_RESET, updateVisualNovelModeDebounced);2165 eventSource.on(event_types.MOVABLE_PANELS_RESET, updateVisualNovelModeDebounced);
2140 eventSource.on(event_types.GROUP_UPDATED, updateVisualNovelModeDebounced);2166 eventSource.on(event_types.GROUP_UPDATED, updateVisualNovelModeDebounced);