diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 3f8542dfd0..5a7272b480 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -700,6 +700,7 @@ capacity: "容量" inUse: "使用中" editCode: "コードを編集" apply: "適用" +receiveAnnouncementFromInstance: "インスタンスからのお知らせを受け取る" _plugin: install: "プラグインのインストール" diff --git a/migration/1612619156584-announcement-email.ts b/migration/1612619156584-announcement-email.ts new file mode 100644 index 0000000000..0371daf8fa --- /dev/null +++ b/migration/1612619156584-announcement-email.ts @@ -0,0 +1,14 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class announcementEmail1612619156584 implements MigrationInterface { + name = 'announcementEmail1612619156584' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" ADD "receiveAnnouncementEmail" boolean NOT NULL DEFAULT true`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "receiveAnnouncementEmail"`); + } + +} diff --git a/src/client/pages/settings/email.vue b/src/client/pages/settings/email.vue index 830c041bad..5ccb79a41d 100644 --- a/src/client/pages/settings/email.vue +++ b/src/client/pages/settings/email.vue @@ -8,6 +8,10 @@ {{ $i.email || $ts.notSet }} + + + {{ $ts.receiveAnnouncementFromInstance }} + @@ -19,6 +23,7 @@ import FormButton from '@/components/form/button.vue'; import FormLink from '@/components/form/link.vue'; import FormBase from '@/components/form/base.vue'; import FormGroup from '@/components/form/group.vue'; +import FormSwitch from '@/components/form/switch.vue'; import * as os from '@/os'; export default defineComponent({ @@ -26,6 +31,7 @@ export default defineComponent({ FormBase, FormLink, FormButton, + FormSwitch, FormGroup, }, @@ -46,7 +52,11 @@ export default defineComponent({ }, methods: { - + onChangeReceiveAnnouncementEmail(v) { + os.api('i/update', { + receiveAnnouncementEmail: v + }); + }, } }); diff --git a/src/models/entities/user-profile.ts b/src/models/entities/user-profile.ts index 0e2c660325..4fab52868f 100644 --- a/src/models/entities/user-profile.ts +++ b/src/models/entities/user-profile.ts @@ -133,6 +133,11 @@ export class UserProfile { }) public injectFeaturedNote: boolean; + @Column('boolean', { + default: true, + }) + public receiveAnnouncementEmail: boolean; + @Column({ ...id(), nullable: true diff --git a/src/models/repositories/user.ts b/src/models/repositories/user.ts index 7bf11b3167..88861224a4 100644 --- a/src/models/repositories/user.ts +++ b/src/models/repositories/user.ts @@ -236,6 +236,7 @@ export class UserRepository extends Repository { avatarId: user.avatarId, bannerId: user.bannerId, injectFeaturedNote: profile!.injectFeaturedNote, + receiveAnnouncementEmail: profile!.receiveAnnouncementEmail, alwaysMarkNsfw: profile!.alwaysMarkNsfw, carefulBot: profile!.carefulBot, autoAcceptFollowed: profile!.autoAcceptFollowed, diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts index 8ac427cd5b..6552f9b760 100644 --- a/src/server/api/endpoints/i/update.ts +++ b/src/server/api/endpoints/i/update.ts @@ -135,6 +135,10 @@ export const meta = { validator: $.optional.bool, }, + receiveAnnouncementEmail: { + validator: $.optional.bool, + }, + alwaysMarkNsfw: { validator: $.optional.bool, desc: { @@ -219,6 +223,7 @@ export default define(meta, async (ps, user, token) => { if (typeof ps.noCrawle === 'boolean') profileUpdates.noCrawle = ps.noCrawle; if (typeof ps.isCat === 'boolean') updates.isCat = ps.isCat; if (typeof ps.injectFeaturedNote === 'boolean') profileUpdates.injectFeaturedNote = ps.injectFeaturedNote; + if (typeof ps.receiveAnnouncementEmail === 'boolean') profileUpdates.receiveAnnouncementEmail = ps.receiveAnnouncementEmail; if (typeof ps.alwaysMarkNsfw === 'boolean') profileUpdates.alwaysMarkNsfw = ps.alwaysMarkNsfw; if (ps.avatarId) {