65 lines
1.9 KiB
JavaScript
65 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('<', '<').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;
|
|
account.rich_bio = renderEmoji(account.bio, account.emojis);
|
|
|
|
cache.update(cache => {
|
|
cache[account.id] = account;
|
|
return cache;
|
|
});
|
|
|
|
return account;
|
|
}
|
|
|