+ addNewVideoFromSubscriberNotification (to: string[], video: VideoModel) {
+ const channelName = video.VideoChannel.getDisplayName()
+ const videoUrl = CONFIG.WEBSERVER.URL + video.getWatchStaticPath()
+
+ const text = `Hi dear user,\n\n` +
+ `Your subscription ${channelName} just published a new video: ${video.name}` +
+ `\n\n` +
+ `You can view it on ${videoUrl} ` +
+ `\n\n` +
+ `Cheers,\n` +
+ `PeerTube.`
+
+ const emailPayload: EmailPayload = {
+ to,
+ subject: channelName + ' just published a new video',
+ text
+ }
+
+ return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ }
+
+ addForceResetPasswordEmailJob (to: string, resetPasswordUrl: string) {
+ const text = `Hi dear user,\n\n` +
+ `Your password has been reset on ${CONFIG.WEBSERVER.HOST}! ` +
+ `Please follow this link to reset it: ${resetPasswordUrl}\n\n` +
+ `Cheers,\n` +
+ `PeerTube.`
+
+ const emailPayload: EmailPayload = {
+ to: [ to ],
+ subject: 'Reset of your PeerTube password',
+ text
+ }
+
+ return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ }
+
+ addNewFollowNotification (to: string[], actorFollow: ActorFollowModel, followType: 'account' | 'channel') {
+ const followerName = actorFollow.ActorFollower.Account.getDisplayName()
+ const followingName = (actorFollow.ActorFollowing.VideoChannel || actorFollow.ActorFollowing.Account).getDisplayName()
+
+ const text = `Hi dear user,\n\n` +
+ `Your ${followType} ${followingName} has a new subscriber: ${followerName}` +
+ `\n\n` +
+ `Cheers,\n` +
+ `PeerTube.`
+
+ const emailPayload: EmailPayload = {
+ to,
+ subject: 'New follower on your channel ' + followingName,
+ text
+ }
+
+ return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ }
+
+ myVideoPublishedNotification (to: string[], video: VideoModel) {
+ const videoUrl = CONFIG.WEBSERVER.URL + video.getWatchStaticPath()
+
+ const text = `Hi dear user,\n\n` +
+ `Your video ${video.name} has been published.` +
+ `\n\n` +
+ `You can view it on ${videoUrl} ` +
+ `\n\n` +
+ `Cheers,\n` +
+ `PeerTube.`
+
+ const emailPayload: EmailPayload = {
+ to,
+ subject: `Your video ${video.name} is published`,
+ text
+ }
+
+ return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ }
+
+ myVideoImportSuccessNotification (to: string[], videoImport: VideoImportModel) {
+ const videoUrl = CONFIG.WEBSERVER.URL + videoImport.Video.getWatchStaticPath()
+
+ const text = `Hi dear user,\n\n` +
+ `Your video import ${videoImport.getTargetIdentifier()} is finished.` +
+ `\n\n` +
+ `You can view the imported video on ${videoUrl} ` +
+ `\n\n` +
+ `Cheers,\n` +
+ `PeerTube.`
+
+ const emailPayload: EmailPayload = {
+ to,
+ subject: `Your video import ${videoImport.getTargetIdentifier()} is finished`,
+ text
+ }
+
+ return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ }
+
+ myVideoImportErrorNotification (to: string[], videoImport: VideoImportModel) {
+ const importUrl = CONFIG.WEBSERVER.URL + '/my-account/video-imports'
+
+ const text = `Hi dear user,\n\n` +
+ `Your video import ${videoImport.getTargetIdentifier()} encountered an error.` +
+ `\n\n` +
+ `See your videos import dashboard for more information: ${importUrl}` +
+ `\n\n` +
+ `Cheers,\n` +
+ `PeerTube.`
+
+ const emailPayload: EmailPayload = {
+ to,
+ subject: `Your video import ${videoImport.getTargetIdentifier()} encountered an error`,
+ text
+ }
+
+ return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ }
+
+ addNewCommentOnMyVideoNotification (to: string[], comment: VideoCommentModel) {
+ const accountName = comment.Account.getDisplayName()
+ const video = comment.Video
+ const commentUrl = CONFIG.WEBSERVER.URL + comment.getCommentStaticPath()
+
+ const text = `Hi dear user,\n\n` +
+ `A new comment has been posted by ${accountName} on your video ${video.name}` +
+ `\n\n` +
+ `You can view it on ${commentUrl} ` +
+ `\n\n` +
+ `Cheers,\n` +
+ `PeerTube.`
+
+ const emailPayload: EmailPayload = {
+ to,
+ subject: 'New comment on your video ' + video.name,
+ text
+ }
+
+ return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ }
+
+ addNewCommentMentionNotification (to: string[], comment: VideoCommentModel) {
+ const accountName = comment.Account.getDisplayName()
+ const video = comment.Video
+ const commentUrl = CONFIG.WEBSERVER.URL + comment.getCommentStaticPath()
+
+ const text = `Hi dear user,\n\n` +
+ `${accountName} mentioned you on video ${video.name}` +
+ `\n\n` +
+ `You can view the comment on ${commentUrl} ` +
+ `\n\n` +
+ `Cheers,\n` +
+ `PeerTube.`
+
+ const emailPayload: EmailPayload = {
+ to,
+ subject: 'Mention on video ' + video.name,
+ text
+ }
+
+ return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ }
+
+ addVideoAbuseModeratorsNotification (to: string[], videoAbuse: VideoAbuseModel) {
+ const videoUrl = CONFIG.WEBSERVER.URL + videoAbuse.Video.getWatchStaticPath()
+
+ const text = `Hi,\n\n` +
+ `${CONFIG.WEBSERVER.HOST} received an abuse for the following video ${videoUrl}\n\n` +
+ `Cheers,\n` +
+ `PeerTube.`
+
+ const emailPayload: EmailPayload = {
+ to,
+ subject: '[PeerTube] Received a video abuse',
+ text
+ }
+
+ return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ }
+
+ addNewUserRegistrationNotification (to: string[], user: UserModel) {
+ const text = `Hi,\n\n` +
+ `User ${user.username} just registered on ${CONFIG.WEBSERVER.HOST} PeerTube instance.\n\n` +
+ `Cheers,\n` +
+ `PeerTube.`
+
+ const emailPayload: EmailPayload = {
+ to,
+ subject: '[PeerTube] New user registration on ' + CONFIG.WEBSERVER.HOST,
+ text
+ }
+
+ return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ }
+
+ addVideoBlacklistNotification (to: string[], videoBlacklist: VideoBlacklistModel) {
+ const videoName = videoBlacklist.Video.name
+ const videoUrl = CONFIG.WEBSERVER.URL + videoBlacklist.Video.getWatchStaticPath()
+
+ const reasonString = videoBlacklist.reason ? ` for the following reason: ${videoBlacklist.reason}` : ''
+ const blockedString = `Your video ${videoName} (${videoUrl} on ${CONFIG.WEBSERVER.HOST} has been blacklisted${reasonString}.`
+
+ const text = 'Hi,\n\n' +
+ blockedString +
+ '\n\n' +
+ 'Cheers,\n' +
+ `PeerTube.`
+
+ const emailPayload: EmailPayload = {
+ to,
+ subject: `[PeerTube] Video ${videoName} blacklisted`,
+ text
+ }
+
+ return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ }
+
+ addVideoUnblacklistNotification (to: string[], video: VideoModel) {
+ const videoUrl = CONFIG.WEBSERVER.URL + video.getWatchStaticPath()
+
+ const text = 'Hi,\n\n' +
+ `Your video ${video.name} (${videoUrl}) on ${CONFIG.WEBSERVER.HOST} has been unblacklisted.` +
+ '\n\n' +
+ 'Cheers,\n' +
+ `PeerTube.`
+
+ const emailPayload: EmailPayload = {
+ to,
+ subject: `[PeerTube] Video ${video.name} unblacklisted`,
+ text
+ }
+
+ return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ }
+