campfire/src/lib/account.js

64 lines
1.9 KiB
JavaScript

import { server } from '$lib/client/server.js';
import { parseEmoji, renderEmoji } from '$lib/emoji.js';
import { get, writable } from 'svelte/store';
import Lang from '$lib/lang';
const lang = Lang('en_GB');
const cache = writable({});
/**
* Parses an account using API data, and returns a writable store object.
* @param {Object} data
* @param {number} ancestor_count
*/
export function parseAccount(data) {
if (!data) {
console.error(lang.string('logs.account_data_empty'));
return null;
}
let account = get(cache)[data.id];
if (account) return account;
// cache miss!
account = {};
account.id = data.id;
account.nickname = data.display_name.trim().replaceAll('<', '&lt;').replaceAll('>', '&gt;');
account.username = data.username;
account.name = account.nickname || account.username;
account.avatar_url = data.avatar;
account.banner_url = data.header;
account.url = data.url;
account.followers_count = data.followers_count;
account.following_count = data.following_count;
account.posts_count = data.statuses_count;
account.bio = data.note;
account.bot = data.bot;
account.locked = data.locked;
if (data.acct.includes('@'))
account.host = data.acct.split('@')[1];
else
account.host = get(server).host;
account.fqn = data.fqn || account.username + account.host;
account.mention = "@" + account.username;
if (account.host != get(server).host)
account.mention += "@" + account.host;
account.emojis = {};
data.emojis.forEach(emoji => {
account.emojis[emoji.shortcode] = parseEmoji(emoji.shortcode, emoji.url);
});
account.rich_name = account.nickname ? renderEmoji(account.nickname, account.emojis) : account.username;
cache.update(cache => {
cache[account.id] = account;
return cache;
});
return account;
}