Rocket.Chat.ReactNative/app/lib/methods/helpers/getAvatarUrl.ts

67 lines
1.8 KiB
TypeScript

import { PixelRatio } from 'react-native';
import { SubscriptionType } from '../../../definitions';
import { IAvatar } from '../../../containers/Avatar/interfaces';
import { compareServerVersion } from './compareServerVersion';
export const formatUrl = (url: string, size: number, query?: string) => {
const hasQuestionMark = /\/[^\/?]+\?/.test(url);
return `${url}${hasQuestionMark ? '&' : '?'}format=png&size=${PixelRatio.get() * size}${query || ''}`;
};
export const getAvatarURL = ({
type,
text = '',
size = 25,
userId,
token,
avatar,
server,
avatarETag,
rid,
blockUnauthenticatedAccess,
serverVersion,
avatarExternalProviderUrl,
roomAvatarExternalProviderUrl,
cdnPrefix
}: IAvatar): string => {
let room;
if (type === SubscriptionType.DIRECT) {
room = text;
if (avatarExternalProviderUrl) {
const externalUri = avatarExternalProviderUrl.trim().replace(/\/+$/, '').replace('{username}', room);
return formatUrl(`${externalUri}`, size);
}
} else if (rid && compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '3.8.0') && roomAvatarExternalProviderUrl) {
const externalUri = roomAvatarExternalProviderUrl.trim().replace(/\/+$/, '').replace('{roomId}', rid);
return formatUrl(`${externalUri}`, size);
} else if (rid && !compareServerVersion(serverVersion, 'lowerThan', '3.6.0')) {
room = `room/${rid}`;
} else {
room = `@${text}`;
}
let query = '';
if (userId && token && blockUnauthenticatedAccess) {
query += `&rc_token=${token}&rc_uid=${userId}`;
}
if (avatarETag) {
query += `&etag=${avatarETag}`;
}
cdnPrefix = cdnPrefix?.trim();
if (cdnPrefix && cdnPrefix.startsWith('http')) {
server = cdnPrefix.replace(/\/+$/, '');
}
if (avatar) {
if (avatar.startsWith('http')) {
return avatar;
}
return formatUrl(`${server}${avatar}`, size, query);
}
return formatUrl(`${server}/avatar/${room}`, size, query);
};