diff options
Diffstat (limited to 'packages/frontend/src/ui/_common_/sw-inject.ts')
| -rw-r--r-- | packages/frontend/src/ui/_common_/sw-inject.ts | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/packages/frontend/src/ui/_common_/sw-inject.ts b/packages/frontend/src/ui/_common_/sw-inject.ts index a92a06bd3e..c97e2b567b 100644 --- a/packages/frontend/src/ui/_common_/sw-inject.ts +++ b/packages/frontend/src/ui/_common_/sw-inject.ts @@ -1,17 +1,18 @@ -import { post } from '@/os'; +import { api, post } from '@/os'; import { $i, login } from '@/account'; import { getAccountFromId } from '@/scripts/get-account-from-id'; import { mainRouter } from '@/router'; +import { deepClone } from '@/scripts/clone'; export function swInject() { - navigator.serviceWorker.addEventListener('message', ev => { + navigator.serviceWorker.addEventListener('message', async ev => { if (_DEV_) { console.log('sw msg', ev.data); } if (ev.data.type !== 'order') return; - if (ev.data.loginId !== $i?.id) { + if (ev.data.loginId && ev.data.loginId !== $i?.id) { return getAccountFromId(ev.data.loginId).then(account => { if (!account) return; return login(account.token, ev.data.url); @@ -19,8 +20,18 @@ export function swInject() { } switch (ev.data.order) { - case 'post': - return post(ev.data.options); + case 'post': { + const props = deepClone(ev.data.options); + // プッシュ通知から来たreply,renoteはtruncateBodyが通されているため、 + // 完全なノートを取得しなおす + if (props.reply) { + props.reply = await api('notes/show', { noteId: props.reply.id }); + } + if (props.renote) { + props.renote = await api('notes/show', { noteId: props.renote.id }); + } + return post(props); + } case 'push': if (mainRouter.currentRoute.value.path === ev.data.url) { return window.scroll({ top: 0, behavior: 'smooth' }); |