2023-07-27 07:31:52 +02:00
|
|
|
/*
|
2024-02-12 03:37:45 +01:00
|
|
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
2023-07-27 07:31:52 +02:00
|
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
*/
|
|
|
|
|
2023-09-19 09:37:43 +02:00
|
|
|
import { query } from '@/scripts/url.js';
|
|
|
|
import { url } from '@/config.js';
|
|
|
|
import { instance } from '@/instance.js';
|
2022-11-12 01:39:11 +01:00
|
|
|
|
2023-07-27 07:31:52 +02:00
|
|
|
export function getProxiedImageUrl(imageUrl: string, type?: 'preview' | 'emoji' | 'avatar', mustOrigin = false, noFallback = false): string {
|
2023-02-28 09:14:23 +01:00
|
|
|
const localProxy = `${url}/proxy`;
|
|
|
|
|
|
|
|
if (imageUrl.startsWith(instance.mediaProxy + '/') || imageUrl.startsWith('/proxy/') || imageUrl.startsWith(localProxy + '/')) {
|
|
|
|
// もう既にproxyっぽそうだったらurlを取り出す
|
|
|
|
imageUrl = (new URL(imageUrl)).searchParams.get('url') ?? imageUrl;
|
2022-12-30 04:00:50 +01:00
|
|
|
}
|
|
|
|
|
2023-03-11 06:11:40 +01:00
|
|
|
return `${mustOrigin ? localProxy : instance.mediaProxy}/${
|
2023-03-12 09:31:52 +01:00
|
|
|
type === 'preview' ? 'preview.webp'
|
2023-03-11 06:11:40 +01:00
|
|
|
: 'image.webp'
|
|
|
|
}?${query({
|
2022-11-12 01:39:11 +01:00
|
|
|
url: imageUrl,
|
2023-04-12 03:58:56 +02:00
|
|
|
...(!noFallback ? { 'fallback': '1' } : {}),
|
2022-12-08 09:16:50 +01:00
|
|
|
...(type ? { [type]: '1' } : {}),
|
2023-02-28 09:14:23 +01:00
|
|
|
...(mustOrigin ? { origin: '1' } : {}),
|
2022-11-12 01:39:11 +01:00
|
|
|
})}`;
|
|
|
|
}
|
|
|
|
|
2022-11-27 00:57:11 +01:00
|
|
|
export function getProxiedImageUrlNullable(imageUrl: string | null | undefined, type?: 'preview'): string | null {
|
2022-11-12 01:39:11 +01:00
|
|
|
if (imageUrl == null) return null;
|
2022-11-27 00:57:11 +01:00
|
|
|
return getProxiedImageUrl(imageUrl, type);
|
2022-11-12 01:39:11 +01:00
|
|
|
}
|
2022-12-30 04:00:50 +01:00
|
|
|
|
|
|
|
export function getStaticImageUrl(baseUrl: string): string {
|
|
|
|
const u = baseUrl.startsWith('http') ? new URL(baseUrl) : new URL(baseUrl, url);
|
|
|
|
|
2023-02-04 05:38:51 +01:00
|
|
|
if (u.href.startsWith(`${url}/emoji/`)) {
|
|
|
|
// もう既にemojiっぽそうだったらsearchParams付けるだけ
|
2022-12-30 04:00:50 +01:00
|
|
|
u.searchParams.set('static', '1');
|
|
|
|
return u.href;
|
|
|
|
}
|
|
|
|
|
2023-02-04 05:38:51 +01:00
|
|
|
if (u.href.startsWith(instance.mediaProxy + '/')) {
|
|
|
|
// もう既にproxyっぽそうだったらsearchParams付けるだけ
|
2022-12-30 04:00:50 +01:00
|
|
|
u.searchParams.set('static', '1');
|
|
|
|
return u.href;
|
|
|
|
}
|
|
|
|
|
2023-03-12 09:31:52 +01:00
|
|
|
return `${instance.mediaProxy}/static.webp?${query({
|
2022-12-30 04:00:50 +01:00
|
|
|
url: u.href,
|
|
|
|
static: '1',
|
|
|
|
})}`;
|
|
|
|
}
|