diff --git a/src/api/room/widgets/ChatBubbleUtilities.ts b/src/api/room/widgets/ChatBubbleUtilities.ts index 2f6d54c..bbfbc5b 100644 --- a/src/api/room/widgets/ChatBubbleUtilities.ts +++ b/src/api/room/widgets/ChatBubbleUtilities.ts @@ -2,6 +2,8 @@ import { AvatarFigurePartType, AvatarScaleType, AvatarSetType, GetAvatarRenderMa export class ChatBubbleUtilities { + private static MAX_CACHE_SIZE: number = 200; + public static AVATAR_COLOR_CACHE: Map = new Map(); public static AVATAR_IMAGE_CACHE: Map = new Map(); public static PET_IMAGE_CACHE: Map = new Map(); @@ -9,6 +11,19 @@ export class ChatBubbleUtilities private static placeHolderImageUrl: string = ''; + private static pruneCache(cache: Map, maxSize: number = ChatBubbleUtilities.MAX_CACHE_SIZE): void + { + if(cache.size <= maxSize) return; + + const deleteCount = cache.size - maxSize; + const iterator = cache.keys(); + + for(let i = 0; i < deleteCount; i++) + { + cache.delete(iterator.next().value as string); + } + } + public static async setFigureImage(figure: string): Promise { const avatarImage = GetAvatarRenderManager().createAvatarImage(figure, AvatarScaleType.LARGE, null, { @@ -34,6 +49,9 @@ export class ChatBubbleUtilities this.AVATAR_COLOR_CACHE.set(figure, ((color && color.rgb) || 16777215)); this.AVATAR_IMAGE_CACHE.set(figure, imageUrl); + this.pruneCache(this.AVATAR_COLOR_CACHE); + this.pruneCache(this.AVATAR_IMAGE_CACHE); + avatarImage.dispose(); return imageUrl; @@ -100,7 +118,11 @@ export class ChatBubbleUtilities if(!resolvedImage) resolvedImage = await getImageUrl(imageResult); - if(resolvedImage) this.PET_IMAGE_CACHE.set(cacheKey, resolvedImage); + if(resolvedImage) + { + this.PET_IMAGE_CACHE.set(cacheKey, resolvedImage); + this.pruneCache(this.PET_IMAGE_CACHE); + } return resolvedImage; })(); diff --git a/src/components/catalog/CatalogClassicView.tsx b/src/components/catalog/CatalogClassicView.tsx index a5fabd4..e86b384 100644 --- a/src/components/catalog/CatalogClassicView.tsx +++ b/src/components/catalog/CatalogClassicView.tsx @@ -155,7 +155,7 @@ const CatalogClassicViewInner: FC<{}> = () => } { !navigationHidden && - + { activeNodes && (activeNodes.length > 0) && } } diff --git a/src/css/chat/chats.css b/src/css/chat/Chats.css similarity index 100% rename from src/css/chat/chats.css rename to src/css/chat/Chats.css