]>
Commit | Line | Data |
---|---|---|
d26836cd C |
1 | import { logger } from '@server/helpers/logger' |
2 | import { UserModel } from '@server/models/user/user' | |
3 | import { UserNotificationModel } from '@server/models/user/user-notification' | |
4 | import { MApplication, MUserDefault, MUserWithNotificationSetting, UserNotificationModelForApi } from '@server/types/models' | |
5 | import { UserNotificationType, UserRight } from '@shared/models' | |
6 | import { AbstractNotification } from '../common/abstract-notification' | |
7 | ||
8 | export type NewPeerTubeVersionForAdminsPayload = { | |
9 | application: MApplication | |
10 | latestVersion: string | |
11 | } | |
12 | ||
13 | export class NewPeerTubeVersionForAdmins extends AbstractNotification <NewPeerTubeVersionForAdminsPayload> { | |
14 | private admins: MUserDefault[] | |
15 | ||
16 | async prepare () { | |
17 | // Use the debug right to know who is an administrator | |
18 | this.admins = await UserModel.listWithRight(UserRight.MANAGE_DEBUG) | |
19 | } | |
20 | ||
21 | log () { | |
22 | logger.info('Notifying %s admins of new PeerTube version %s.', this.admins.length, this.payload.latestVersion) | |
23 | } | |
24 | ||
25 | getSetting (user: MUserWithNotificationSetting) { | |
26 | return user.NotificationSetting.newPeerTubeVersion | |
27 | } | |
28 | ||
29 | getTargetUsers () { | |
30 | return this.admins | |
31 | } | |
32 | ||
785f1897 C |
33 | createNotification (user: MUserWithNotificationSetting) { |
34 | const notification = UserNotificationModel.build<UserNotificationModelForApi>({ | |
d26836cd C |
35 | type: UserNotificationType.NEW_PEERTUBE_VERSION, |
36 | userId: user.id, | |
37 | applicationId: this.payload.application.id | |
38 | }) | |
39 | notification.Application = this.payload.application | |
40 | ||
41 | return notification | |
42 | } | |
43 | ||
98ab5dc8 | 44 | createEmail (to: string) { |
d26836cd C |
45 | return { |
46 | to, | |
47 | template: 'peertube-version-new', | |
48 | subject: `A new PeerTube version is available: ${this.payload.latestVersion}`, | |
49 | locals: { | |
50 | latestVersion: this.payload.latestVersion | |
51 | } | |
52 | } | |
53 | } | |
54 | } |