fix global pack showing all room packs (#1303)

This commit is contained in:
Ajay Bura 2023-06-21 20:59:02 +10:00 committed by GitHub
parent 4c84673bdf
commit 4a6c53703f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,4 +1,4 @@
import { IImageInfo, MatrixClient, Room } from 'matrix-js-sdk'; import { IImageInfo, MatrixClient, MatrixEvent, Room } from 'matrix-js-sdk';
import { AccountDataEvent } from '../../types/matrix/accountData'; import { AccountDataEvent } from '../../types/matrix/accountData';
import { getAccountData, getStateEvents } from '../utils/room'; import { getAccountData, getStateEvents } from '../utils/room';
import { StateEvent } from '../../types/matrix/room'; import { StateEvent } from '../../types/matrix/room';
@ -225,21 +225,24 @@ export class ImagePack {
} }
} }
export function getRoomImagePacks(room: Room): ImagePack[] { export function packEventsToImagePacks(packEvents: MatrixEvent[]): ImagePack[] {
const dataEvents = getStateEvents(room, StateEvent.PoniesRoomEmotes); return packEvents.reduce<ImagePack[]>((imagePacks, packEvent) => {
return dataEvents.reduce<ImagePack[]>((roomPacks, packEvent) => {
const packId = packEvent?.getId(); const packId = packEvent?.getId();
const content = packEvent?.getContent() as PackContent | undefined; const content = packEvent?.getContent() as PackContent | undefined;
if (!packId || !content) return roomPacks; if (!packId || !content) return imagePacks;
const pack = ImagePack.parsePack(packId, content); const pack = ImagePack.parsePack(packId, content);
if (pack) { if (pack) {
roomPacks.push(pack); imagePacks.push(pack);
} }
return roomPacks; return imagePacks;
}, []); }, []);
} }
export function getRoomImagePacks(room: Room): ImagePack[] {
const dataEvents = getStateEvents(room, StateEvent.PoniesRoomEmotes);
return packEventsToImagePacks(dataEvents);
}
export function getGlobalImagePacks(mx: MatrixClient): ImagePack[] { export function getGlobalImagePacks(mx: MatrixClient): ImagePack[] {
const emoteRoomsContent = getAccountData(mx, AccountDataEvent.PoniesEmoteRooms)?.getContent() as const emoteRoomsContent = getAccountData(mx, AccountDataEvent.PoniesEmoteRooms)?.getContent() as
| EmoteRoomsContent | EmoteRoomsContent
@ -255,7 +258,14 @@ export function getGlobalImagePacks(mx: MatrixClient): ImagePack[] {
if (typeof rooms[roomId] !== 'object') return []; if (typeof rooms[roomId] !== 'object') return [];
const room = mx.getRoom(roomId); const room = mx.getRoom(roomId);
if (!room) return []; if (!room) return [];
return getRoomImagePacks(room); const packEventIdToUnknown = rooms[roomId];
const roomPacks = getStateEvents(room, StateEvent.PoniesRoomEmotes);
const globalPacks = roomPacks.filter((mE) => {
const packKey = mE.getStateKey();
if (typeof packKey === 'string') return !!packEventIdToUnknown[packKey];
return false;
});
return packEventsToImagePacks(globalPacks);
}); });
return packs; return packs;