37 lines
946 B
JavaScript
37 lines
946 B
JavaScript
|
import initMatrix from '../../../client/initMatrix';
|
||
|
import { emojis } from './emoji';
|
||
|
|
||
|
const eventType = 'io.element.recent_emoji';
|
||
|
|
||
|
function getRecentEmojisRaw() {
|
||
|
return initMatrix.matrixClient.getAccountData(eventType).getContent().recent_emoji ?? [];
|
||
|
}
|
||
|
|
||
|
export function getRecentEmojis(limit) {
|
||
|
const res = [];
|
||
|
getRecentEmojisRaw()
|
||
|
.sort((a, b) => b[1] - a[1])
|
||
|
.find(([unicode]) => {
|
||
|
const emoji = emojis.find((e) => e.unicode === unicode);
|
||
|
if (emoji) return res.push(emoji) >= limit;
|
||
|
return false;
|
||
|
});
|
||
|
return res;
|
||
|
}
|
||
|
|
||
|
export function addRecentEmoji(unicode) {
|
||
|
const recent = getRecentEmojisRaw();
|
||
|
const i = recent.findIndex(([u]) => u === unicode);
|
||
|
let entry;
|
||
|
if (i < 0) {
|
||
|
entry = [unicode, 1];
|
||
|
} else {
|
||
|
[entry] = recent.splice(i, 1);
|
||
|
entry[1] += 1;
|
||
|
}
|
||
|
recent.unshift(entry);
|
||
|
initMatrix.matrixClient.setAccountData(eventType, {
|
||
|
recent_emoji: recent.slice(0, 100),
|
||
|
});
|
||
|
}
|