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('<', '<').replaceAll('>', '>'); 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; }