pl-fe: default avatar/header detection cleanup
Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
import pick from 'lodash.pick';
|
||||
import * as v from 'valibot';
|
||||
|
||||
import { isDefaultAvatar, isDefaultHeader } from '../utils/accounts';
|
||||
import { guessFqn } from '../utils/domain';
|
||||
|
||||
import { customEmojiSchema } from './custom-emoji';
|
||||
@ -30,6 +31,8 @@ const preprocessAccount = v.transform((account: any) => {
|
||||
domain,
|
||||
avatar: account.avatar || account.avatar_static,
|
||||
header: account.header || account.header_static,
|
||||
avatar_default: isDefaultAvatar(account.avatar || account.avatar_static),
|
||||
header_default: isDefaultHeader(account.header || account.header_static),
|
||||
local: typeof account.pleroma?.is_local === 'boolean' ? account.pleroma.is_local : account.acct.split('@')[1] === undefined,
|
||||
discoverable: account.discoverable || account.pleroma?.source?.discoverable,
|
||||
verified: account.verified || account.pleroma?.tags?.includes('verified'),
|
||||
@ -187,6 +190,9 @@ const baseAccountSchema = v.object({
|
||||
pleroma: v.optional(v.any(), undefined),
|
||||
source: v.optional(v.any(), undefined),
|
||||
}),
|
||||
|
||||
avatar_default: v.fallback(v.boolean(), false),
|
||||
header_default: v.fallback(v.boolean(), false),
|
||||
});
|
||||
|
||||
const accountWithMovedAccountSchema = v.object({
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import * as v from 'valibot';
|
||||
|
||||
import { isDefaultAvatar, isDefaultHeader } from '../utils/accounts';
|
||||
import { getDomainFromURL } from '../utils/domain';
|
||||
|
||||
import { customEmojiSchema } from './custom-emoji';
|
||||
@ -35,6 +36,8 @@ const groupSchema = v.pipe(v.any(), v.transform((group: any) => {
|
||||
...group,
|
||||
avatar: group.avatar || group.avatar_static,
|
||||
header: group.header || group.header_static,
|
||||
avatar_default: isDefaultAvatar(group.avatar || group.avatar_static),
|
||||
header_default: isDefaultHeader(group.header || group.header_static),
|
||||
};
|
||||
}), v.object({
|
||||
avatar: v.fallback(v.string(), ''),
|
||||
@ -58,6 +61,9 @@ const groupSchema = v.pipe(v.any(), v.transform((group: any) => {
|
||||
|
||||
avatar_description: v.fallback(v.string(), ''),
|
||||
header_description: v.fallback(v.string(), ''),
|
||||
|
||||
avatar_default: v.fallback(v.boolean(), false),
|
||||
header_default: v.fallback(v.boolean(), false),
|
||||
}));
|
||||
|
||||
/**
|
||||
|
||||
27
packages/pl-api/lib/utils/accounts.ts
Normal file
27
packages/pl-api/lib/utils/accounts.ts
Normal file
@ -0,0 +1,27 @@
|
||||
/** Default header filenames from various backends */
|
||||
const DEFAULT_HEADERS: string[] = [
|
||||
'/assets/default_header.webp', // GoToSocial
|
||||
'/headers/original/missing.png', // Mastodon
|
||||
'/api/v1/accounts/identicon', // Mitra
|
||||
'/images/banner.png', // Pleroma
|
||||
'/assets/transparent.png', // Iceshrimp.net
|
||||
];
|
||||
|
||||
/** Check if the avatar is a default avatar */
|
||||
const isDefaultHeader = (url: string = '') => url === '' || DEFAULT_HEADERS.some(header => url.endsWith(header));
|
||||
|
||||
/** Default avatar filenames from various backends */
|
||||
const DEFAULT_AVATARS = [
|
||||
...([1, 2, 3, 4, 5, 6].map(i => `/assets/default_avatars/GoToSocial_icon${i}.webp`)), // GoToSocial
|
||||
'/avatars/original/missing.png', // Mastodon
|
||||
'/api/v1/accounts/identicon', // Mitra
|
||||
'/images/avi.png', // Pleroma
|
||||
];
|
||||
|
||||
/** Check if the avatar is a default avatar */
|
||||
const isDefaultAvatar = (url: string = '') => url === '' || DEFAULT_AVATARS.some(avatar => url.endsWith(avatar));
|
||||
|
||||
export {
|
||||
isDefaultHeader,
|
||||
isDefaultAvatar,
|
||||
};
|
||||
Reference in New Issue
Block a user