chore: Update emotes to match MSC
This commit is contained in:
parent
8a0cc70cfe
commit
f7e63097b4
|
@ -437,6 +437,7 @@ class Room {
|
||||||
name = name.replaceAll(RegExp(r'[^\w-]'), '');
|
name = name.replaceAll(RegExp(r'[^\w-]'), '');
|
||||||
return name.toLowerCase();
|
return name.toLowerCase();
|
||||||
};
|
};
|
||||||
|
final allMxcs = <String>{}; // for easy dedupint
|
||||||
final addEmotePack = (String packName, Map<String, dynamic> content,
|
final addEmotePack = (String packName, Map<String, dynamic> content,
|
||||||
[String packNameOverride]) {
|
[String packNameOverride]) {
|
||||||
if (!(content['short'] is Map)) {
|
if (!(content['short'] is Map)) {
|
||||||
|
@ -454,25 +455,18 @@ class Room {
|
||||||
}
|
}
|
||||||
content['short'].forEach((key, value) {
|
content['short'].forEach((key, value) {
|
||||||
if (key is String && value is String && value.startsWith('mxc://')) {
|
if (key is String && value is String && value.startsWith('mxc://')) {
|
||||||
|
if (allMxcs.add(value)) {
|
||||||
packs[packName][key] = value;
|
packs[packName][key] = value;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
// first add all the room emotes
|
// first add all the user emotes
|
||||||
final allRoomEmotes = states.states['im.ponies.room_emotes'];
|
|
||||||
if (allRoomEmotes != null) {
|
|
||||||
for (final entry in allRoomEmotes.entries) {
|
|
||||||
final stateKey = entry.key;
|
|
||||||
final event = entry.value;
|
|
||||||
addEmotePack(stateKey.isEmpty ? 'room' : stateKey, event.content);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// next add all the user emotes
|
|
||||||
final userEmotes = client.accountData['im.ponies.user_emotes'];
|
final userEmotes = client.accountData['im.ponies.user_emotes'];
|
||||||
if (userEmotes != null) {
|
if (userEmotes != null) {
|
||||||
addEmotePack('user', userEmotes.content);
|
addEmotePack('user', userEmotes.content);
|
||||||
}
|
}
|
||||||
// finally add all the external emote rooms
|
// next add all the external emote rooms
|
||||||
final emoteRooms = client.accountData['im.ponies.emote_rooms'];
|
final emoteRooms = client.accountData['im.ponies.emote_rooms'];
|
||||||
if (emoteRooms != null && emoteRooms.content['rooms'] is Map) {
|
if (emoteRooms != null && emoteRooms.content['rooms'] is Map) {
|
||||||
for (final roomEntry in emoteRooms.content['rooms'].entries) {
|
for (final roomEntry in emoteRooms.content['rooms'].entries) {
|
||||||
|
@ -497,6 +491,15 @@ class Room {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// finally add all the room emotes
|
||||||
|
final allRoomEmotes = states.states['im.ponies.room_emotes'];
|
||||||
|
if (allRoomEmotes != null) {
|
||||||
|
for (final entry in allRoomEmotes.entries) {
|
||||||
|
final stateKey = entry.key;
|
||||||
|
final event = entry.value;
|
||||||
|
addEmotePack(stateKey.isEmpty ? 'room' : stateKey, event.content);
|
||||||
|
}
|
||||||
|
}
|
||||||
return packs;
|
return packs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ class EmoteSyntax extends InlineSyntax {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
final element = Element.empty('img');
|
final element = Element.empty('img');
|
||||||
element.attributes['data-mx-emote'] = '';
|
element.attributes['data-mx-emoticon'] = '';
|
||||||
element.attributes['src'] = htmlEscape.convert(mxc);
|
element.attributes['src'] = htmlEscape.convert(mxc);
|
||||||
element.attributes['alt'] = htmlEscape.convert(emote);
|
element.attributes['alt'] = htmlEscape.convert(emote);
|
||||||
element.attributes['title'] = htmlEscape.convert(emote);
|
element.attributes['title'] = htmlEscape.convert(emote);
|
||||||
|
|
|
@ -54,11 +54,11 @@ void main() {
|
||||||
});
|
});
|
||||||
test('emotes', () {
|
test('emotes', () {
|
||||||
expect(markdown(':fox:', emotePacks),
|
expect(markdown(':fox:', emotePacks),
|
||||||
'<img data-mx-emote="" src="mxc://roomfox" alt=":fox:" title=":fox:" height="32" vertical-align="middle" />');
|
'<img data-mx-emoticon="" src="mxc://roomfox" alt=":fox:" title=":fox:" height="32" vertical-align="middle" />');
|
||||||
expect(markdown(':user~fox:', emotePacks),
|
expect(markdown(':user~fox:', emotePacks),
|
||||||
'<img data-mx-emote="" src="mxc://userfox" alt=":fox:" title=":fox:" height="32" vertical-align="middle" />');
|
'<img data-mx-emoticon="" src="mxc://userfox" alt=":fox:" title=":fox:" height="32" vertical-align="middle" />');
|
||||||
expect(markdown(':raccoon:', emotePacks),
|
expect(markdown(':raccoon:', emotePacks),
|
||||||
'<img data-mx-emote="" src="mxc://raccoon" alt=":raccoon:" title=":raccoon:" height="32" vertical-align="middle" />');
|
'<img data-mx-emoticon="" src="mxc://raccoon" alt=":raccoon:" title=":raccoon:" height="32" vertical-align="middle" />');
|
||||||
expect(markdown(':invalid:', emotePacks), ':invalid:');
|
expect(markdown(':invalid:', emotePacks), ':invalid:');
|
||||||
expect(markdown(':room~invalid:', emotePacks), ':room~invalid:');
|
expect(markdown(':room~invalid:', emotePacks), ':room~invalid:');
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue