mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-11-27 08:03:08 +02:00
fix(sw): プッシュ通知でカスタム絵文字リアクションを表示できるように (#10122)
* fix(sw): プッシュ通知でカスタム絵文字リアクションを表示できるように Fix #10117 /emoji/*.webpにbadgeモードを * ? * ✌️ * fix
This commit is contained in:
parent
c63447e194
commit
ffe3386e5b
2 changed files with 20 additions and 26 deletions
|
@ -75,7 +75,7 @@ export class ServerService {
|
||||||
fastify.register(this.nodeinfoServerService.createServer);
|
fastify.register(this.nodeinfoServerService.createServer);
|
||||||
fastify.register(this.wellKnownServerService.createServer);
|
fastify.register(this.wellKnownServerService.createServer);
|
||||||
|
|
||||||
fastify.get<{ Params: { path: string }; Querystring: { static?: any; }; }>('/emoji/:path(.*)', async (request, reply) => {
|
fastify.get<{ Params: { path: string }; Querystring: { static?: any; badge?: any; }; }>('/emoji/:path(.*)', async (request, reply) => {
|
||||||
const path = request.params.path;
|
const path = request.params.path;
|
||||||
|
|
||||||
reply.header('Cache-Control', 'public, max-age=86400');
|
reply.header('Cache-Control', 'public, max-age=86400');
|
||||||
|
@ -105,11 +105,19 @@ export class ServerService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const url = new URL(`${this.config.mediaProxy}/emoji.webp`);
|
let url: URL;
|
||||||
// || emoji.originalUrl してるのは後方互換性のため(publicUrlはstringなので??はだめ)
|
if ('badge' in request.query) {
|
||||||
url.searchParams.set('url', emoji.publicUrl || emoji.originalUrl);
|
url = new URL(`${this.config.mediaProxy}/emoji.png`);
|
||||||
url.searchParams.set('emoji', '1');
|
// || emoji.originalUrl してるのは後方互換性のため(publicUrlはstringなので??はだめ)
|
||||||
if ('static' in request.query) url.searchParams.set('static', '1');
|
url.searchParams.set('url', emoji.publicUrl || emoji.originalUrl);
|
||||||
|
url.searchParams.set('badge', '1');
|
||||||
|
} else {
|
||||||
|
url = new URL(`${this.config.mediaProxy}/emoji.webp`);
|
||||||
|
// || emoji.originalUrl してるのは後方互換性のため(publicUrlはstringなので??はだめ)
|
||||||
|
url.searchParams.set('url', emoji.publicUrl || emoji.originalUrl);
|
||||||
|
url.searchParams.set('emoji', '1');
|
||||||
|
if ('static' in request.query) url.searchParams.set('static', '1');
|
||||||
|
}
|
||||||
|
|
||||||
return await reply.redirect(
|
return await reply.redirect(
|
||||||
301,
|
301,
|
||||||
|
|
|
@ -138,26 +138,11 @@ async function composeNotification(data: pushNotificationDataMap[keyof pushNotif
|
||||||
|
|
||||||
if (reaction.startsWith(':')) {
|
if (reaction.startsWith(':')) {
|
||||||
// カスタム絵文字の場合
|
// カスタム絵文字の場合
|
||||||
const customEmoji = data.body.note.emojis.find(x => x.name === reaction.substr(1, reaction.length - 2));
|
const name = reaction.substring(1, reaction.length - 1);
|
||||||
if (customEmoji) {
|
badge = `${origin}/emoji/${name}.webp?${url.query({
|
||||||
if (reaction.includes('@')) {
|
badge: '1',
|
||||||
reaction = `:${reaction.substr(1, reaction.indexOf('@') - 1)}:`;
|
})}`;
|
||||||
}
|
reaction = name.split('@')[0];
|
||||||
|
|
||||||
const u = new URL(customEmoji.url);
|
|
||||||
if (u.href.startsWith(`${origin}/proxy/`)) {
|
|
||||||
// もう既にproxyっぽそうだったらsearchParams付けるだけ
|
|
||||||
u.searchParams.set('badge', '1');
|
|
||||||
badge = u.href;
|
|
||||||
} else {
|
|
||||||
// 拡張子がないとキャッシュしてくれないCDNがあるので
|
|
||||||
const dummy = `${encodeURIComponent(`${u.host}${u.pathname}`)}.png`;
|
|
||||||
badge = `${origin}/proxy/${dummy}?${url.query({
|
|
||||||
url: u.href,
|
|
||||||
badge: '1',
|
|
||||||
})}`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Unicode絵文字の場合
|
// Unicode絵文字の場合
|
||||||
badge = `/twemoji-badge/${char2fileName(reaction)}.png`;
|
badge = `/twemoji-badge/${char2fileName(reaction)}.png`;
|
||||||
|
@ -171,6 +156,7 @@ async function composeNotification(data: pushNotificationDataMap[keyof pushNotif
|
||||||
return [`${reaction} ${getUserName(data.body.user)}`, {
|
return [`${reaction} ${getUserName(data.body.user)}`, {
|
||||||
body: data.body.note.text ?? '',
|
body: data.body.note.text ?? '',
|
||||||
icon: data.body.user.avatarUrl,
|
icon: data.body.user.avatarUrl,
|
||||||
|
tag,
|
||||||
badge,
|
badge,
|
||||||
data,
|
data,
|
||||||
actions: [
|
actions: [
|
||||||
|
|
Loading…
Reference in a new issue