summaryrefslogtreecommitdiff
path: root/src/client/scripts/compose-notification.ts
diff options
context:
space:
mode:
authortamaina <tamaina@hotmail.co.jp>2020-05-23 13:19:31 +0900
committerGitHub <noreply@github.com>2020-05-23 13:19:31 +0900
commit3963ed8ff7488a0e2f7f3876461f909e6be08e25 (patch)
treed019d1d294e8ca757479dc638f977ae10b5f44da /src/client/scripts/compose-notification.ts
parentfix(i18n): Fix missing translation (diff)
downloadsharkey-3963ed8ff7488a0e2f7f3876461f909e6be08e25.tar.gz
sharkey-3963ed8ff7488a0e2f7f3876461f909e6be08e25.tar.bz2
sharkey-3963ed8ff7488a0e2f7f3876461f909e6be08e25.zip
feat(client): 翻訳をIndexedDBに保存・プッシュ通知を翻訳 (#6396)
* wip * tabun ok * better msg * oops * fix lint * Update gulpfile.ts Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com> * Update src/client/scripts/set-i18n-contexts.ts Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com> * refactor Co-authored-by: acid-chicken <root@acid-chicken.com> * ✨ * wip * fix lint * たぶんおk * fix flush * Translate Notification * remove console.log * fix * add notifications * remove san * wip * ok * :v: * Update src/prelude/array.ts Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com> * wip * i18n refactor * Update init.ts * :v: Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com> Co-authored-by: syuilo <syuilotan@yahoo.co.jp>
Diffstat (limited to 'src/client/scripts/compose-notification.ts')
-rw-r--r--src/client/scripts/compose-notification.ts97
1 files changed, 67 insertions, 30 deletions
diff --git a/src/client/scripts/compose-notification.ts b/src/client/scripts/compose-notification.ts
index bf32552506..29eb515bfe 100644
--- a/src/client/scripts/compose-notification.ts
+++ b/src/client/scripts/compose-notification.ts
@@ -1,58 +1,95 @@
import getNoteSummary from '../../misc/get-note-summary';
import getUserName from '../../misc/get-user-name';
+import { clientDb, get, bulkGet } from '../db';
+import { fromEntries } from '../../prelude/array';
-type Notification = {
- title: string;
- body: string;
- icon: string;
- onclick?: any;
-};
+const getTranslation = (text: string): Promise<string> => get(text, clientDb.i18n);
-// TODO: i18n
+export default async function(type, data): Promise<[string, NotificationOptions]> {
+ const contexts = ['deletedNote', 'invisibleNote', 'withNFiles', '_cw.poll'];
+ const locale = fromEntries(await bulkGet(contexts, clientDb.i18n) as [string, string][]);
-export default function(type, data): Notification {
switch (type) {
- case 'driveFileCreated':
- return {
- title: 'File uploaded',
+ case 'driveFileCreated': // TODO (Server Side)
+ return [await getTranslation('_notification.fileUploaded'), {
body: data.name,
icon: data.url
- };
-
+ }];
case 'notification':
switch (data.type) {
case 'mention':
- return {
- title: `${getUserName(data.user)}:`,
- body: getNoteSummary(data),
+ return [(await getTranslation('_notification.youGotMention')).replace('{name}', getUserName(data.user)), {
+ body: getNoteSummary(data.note, locale),
icon: data.user.avatarUrl
- };
+ }];
case 'reply':
- return {
- title: `You got reply from ${getUserName(data.user)}:`,
- body: getNoteSummary(data),
+ return [(await getTranslation('_notification.youGotReply')).replace('{name}', getUserName(data.user)), {
+ body: getNoteSummary(data.note, locale),
+ icon: data.user.avatarUrl
+ }];
+
+ case 'renote':
+ return [(await getTranslation('_notification.youRenoted')).replace('{name}', getUserName(data.user)), {
+ body: getNoteSummary(data.note, locale),
icon: data.user.avatarUrl
- };
+ }];
case 'quote':
- return {
- title: `${getUserName(data.user)}:`,
- body: getNoteSummary(data),
+ return [(await getTranslation('_notification.youGotQuote')).replace('{name}', getUserName(data.user)), {
+ body: getNoteSummary(data.note, locale),
icon: data.user.avatarUrl
- };
+ }];
case 'reaction':
- return {
- title: `${getUserName(data.user)}: ${data.reaction}:`,
- body: getNoteSummary(data.note),
+ return [`${data.reaction} ${getUserName(data.user)}`, {
+ body: getNoteSummary(data.note, locale),
+ icon: data.user.avatarUrl
+ }];
+
+ case 'pollVote':
+ return [(await getTranslation('_notification.youGotPoll')).replace('{name}', getUserName(data.user)), {
+ body: getNoteSummary(data.note, locale),
+ icon: data.user.avatarUrl
+ }];
+
+ case 'follow':
+ return [await getTranslation('_notification.youWereFollowed'), {
+ body: getUserName(data.user),
icon: data.user.avatarUrl
- };
+ }];
+
+ case 'receiveFollowRequest':
+ return [await getTranslation('_notification.youReceivedFollowRequest'), {
+ body: getUserName(data.user),
+ icon: data.user.avatarUrl
+ }];
+
+ case 'followRequestAccepted':
+ return [await getTranslation('_notification.yourFollowRequestAccepted'), {
+ body: getUserName(data.user),
+ icon: data.user.avatarUrl
+ }];
+
+ case 'groupInvited':
+ return [await getTranslation('_notification.youWereInvitedToGroup'), {
+ body: data.group.name
+ }];
default:
return null;
}
-
+ case 'unreadMessagingMessage':
+ if (data.groupId === null) {
+ return [(await getTranslation('_notification.youGotMessagingMessageFromUser')).replace('{name}', getUserName(data.user)), {
+ icon: data.user.avatarUrl,
+ tag: `messaging:user:${data.user.id}`
+ }];
+ }
+ return [(await getTranslation('_notification.youGotMessagingMessageFromGroup')).replace('{name}', data.group.name), {
+ icon: data.user.avatarUrl,
+ tag: `messaging:group:${data.group.id}`
+ }];
default:
return null;
}