diff options
Diffstat (limited to 'client/src')
6 files changed, 74 insertions, 4 deletions
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html index fe9d856d0..ec6f879d7 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html +++ b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html | |||
@@ -221,6 +221,41 @@ | |||
221 | </ng-container> | 221 | </ng-container> |
222 | </ng-container> | 222 | </ng-container> |
223 | 223 | ||
224 | <div i18n class="inner-form-title">Instance followings</div> | ||
225 | |||
226 | <ng-container formGroupName="followings"> | ||
227 | <ng-container formGroupName="instance"> | ||
228 | |||
229 | <ng-container formGroupName="autoFollowBack"> | ||
230 | <div class="form-group"> | ||
231 | <my-peertube-checkbox | ||
232 | inputName="followingsInstanceAutoFollowBackEnabled" formControlName="enabled" | ||
233 | i18n-labelText labelText="Automatically follow other instances that follow you" | ||
234 | ></my-peertube-checkbox> | ||
235 | </div> | ||
236 | </ng-container> | ||
237 | |||
238 | <ng-container formGroupName="autoFollowIndex"> | ||
239 | <div class="form-group"> | ||
240 | <my-peertube-checkbox | ||
241 | inputName="followingsInstanceAutoFollowIndexEnabled" formControlName="enabled" | ||
242 | i18n-labelText labelText="Automatically follow instance of the public index (below)" | ||
243 | ></my-peertube-checkbox> | ||
244 | </div> | ||
245 | |||
246 | <div class="form-group"> | ||
247 | <label i18n for="followingsInstanceAutoFollowIndexUrl">Index URL</label> | ||
248 | <input | ||
249 | type="text" id="followingsInstanceAutoFollowIndexUrl" | ||
250 | formControlName="indexUrl" [ngClass]="{ 'input-error': formErrors['followings.instance.autoFollowIndex.indexUrl'] }" | ||
251 | > | ||
252 | <div *ngIf="formErrors.followings.instance.autoFollowIndex.indexUrl" class="form-error">{{ formErrors.followings.instance.autoFollowIndex.indexUrl }}</div> | ||
253 | </div> | ||
254 | |||
255 | </ng-container> | ||
256 | </ng-container> | ||
257 | </ng-container> | ||
258 | |||
224 | 259 | ||
225 | <div i18n class="inner-form-title">Administrator</div> | 260 | <div i18n class="inner-form-title">Administrator</div> |
226 | 261 | ||
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts index 8bd7f7cf6..d51104569 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts | |||
@@ -158,6 +158,17 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { | |||
158 | enabled: null, | 158 | enabled: null, |
159 | manualApproval: null | 159 | manualApproval: null |
160 | } | 160 | } |
161 | }, | ||
162 | followings: { | ||
163 | instance: { | ||
164 | autoFollowBack: { | ||
165 | enabled: null | ||
166 | }, | ||
167 | autoFollowIndex: { | ||
168 | enabled: null, | ||
169 | indexUrl: this.customConfigValidatorsService.INDEX_URL | ||
170 | } | ||
171 | } | ||
161 | } | 172 | } |
162 | } | 173 | } |
163 | 174 | ||
diff --git a/client/src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts b/client/src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts index 34febc457..76fabb19d 100644 --- a/client/src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts +++ b/client/src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts | |||
@@ -43,7 +43,8 @@ export class MyAccountNotificationPreferencesComponent implements OnInit { | |||
43 | newUserRegistration: this.i18n('A new user registered on your instance'), | 43 | newUserRegistration: this.i18n('A new user registered on your instance'), |
44 | newFollow: this.i18n('You or your channel(s) has a new follower'), | 44 | newFollow: this.i18n('You or your channel(s) has a new follower'), |
45 | commentMention: this.i18n('Someone mentioned you in video comments'), | 45 | commentMention: this.i18n('Someone mentioned you in video comments'), |
46 | newInstanceFollower: this.i18n('Your instance has a new follower') | 46 | newInstanceFollower: this.i18n('Your instance has a new follower'), |
47 | autoInstanceFollowing: this.i18n('Your instance auto followed another instance') | ||
47 | } | 48 | } |
48 | this.notificationSettingKeys = Object.keys(this.labelNotifications) as (keyof UserNotificationSetting)[] | 49 | this.notificationSettingKeys = Object.keys(this.labelNotifications) as (keyof UserNotificationSetting)[] |
49 | 50 | ||
@@ -51,7 +52,8 @@ export class MyAccountNotificationPreferencesComponent implements OnInit { | |||
51 | videoAbuseAsModerator: UserRight.MANAGE_VIDEO_ABUSES, | 52 | videoAbuseAsModerator: UserRight.MANAGE_VIDEO_ABUSES, |
52 | videoAutoBlacklistAsModerator: UserRight.MANAGE_VIDEO_BLACKLIST, | 53 | videoAutoBlacklistAsModerator: UserRight.MANAGE_VIDEO_BLACKLIST, |
53 | newUserRegistration: UserRight.MANAGE_USERS, | 54 | newUserRegistration: UserRight.MANAGE_USERS, |
54 | newInstanceFollower: UserRight.MANAGE_SERVER_FOLLOW | 55 | newInstanceFollower: UserRight.MANAGE_SERVER_FOLLOW, |
56 | autoInstanceFollowing: UserRight.MANAGE_CONFIGURATION | ||
55 | } | 57 | } |
56 | 58 | ||
57 | this.emailEnabled = this.serverService.getConfig().email.enabled | 59 | this.emailEnabled = this.serverService.getConfig().email.enabled |
diff --git a/client/src/app/shared/forms/form-validators/custom-config-validators.service.ts b/client/src/app/shared/forms/form-validators/custom-config-validators.service.ts index 882e39453..767e3f026 100644 --- a/client/src/app/shared/forms/form-validators/custom-config-validators.service.ts +++ b/client/src/app/shared/forms/form-validators/custom-config-validators.service.ts | |||
@@ -13,6 +13,7 @@ export class CustomConfigValidatorsService { | |||
13 | readonly SIGNUP_LIMIT: BuildFormValidator | 13 | readonly SIGNUP_LIMIT: BuildFormValidator |
14 | readonly ADMIN_EMAIL: BuildFormValidator | 14 | readonly ADMIN_EMAIL: BuildFormValidator |
15 | readonly TRANSCODING_THREADS: BuildFormValidator | 15 | readonly TRANSCODING_THREADS: BuildFormValidator |
16 | readonly INDEX_URL: BuildFormValidator | ||
16 | 17 | ||
17 | constructor (private i18n: I18n) { | 18 | constructor (private i18n: I18n) { |
18 | this.INSTANCE_NAME = { | 19 | this.INSTANCE_NAME = { |
@@ -78,5 +79,13 @@ export class CustomConfigValidatorsService { | |||
78 | 'min': this.i18n('Transcoding threads must be greater or equal to 0.') | 79 | 'min': this.i18n('Transcoding threads must be greater or equal to 0.') |
79 | } | 80 | } |
80 | } | 81 | } |
82 | |||
83 | this.INDEX_URL = { | ||
84 | VALIDATORS: [ Validators.required, Validators.pattern(/^https:\/\//) ], | ||
85 | MESSAGES: { | ||
86 | 'required': this.i18n('Index URL is required.'), | ||
87 | 'pattern': this.i18n('Index URL should be a URL') | ||
88 | } | ||
89 | } | ||
81 | } | 90 | } |
82 | } | 91 | } |
diff --git a/client/src/app/shared/users/user-notification.model.ts b/client/src/app/shared/users/user-notification.model.ts index 37fa29ee8..b4ac075c5 100644 --- a/client/src/app/shared/users/user-notification.model.ts +++ b/client/src/app/shared/users/user-notification.model.ts | |||
@@ -42,9 +42,10 @@ export class UserNotification implements UserNotificationServer { | |||
42 | state: FollowState | 42 | state: FollowState |
43 | follower: ActorInfo & { avatarUrl?: string } | 43 | follower: ActorInfo & { avatarUrl?: string } |
44 | following: { | 44 | following: { |
45 | type: 'account' | 'channel' | 45 | type: 'account' | 'channel' | 'instance' |
46 | name: string | 46 | name: string |
47 | displayName: string | 47 | displayName: string |
48 | host: string | ||
48 | } | 49 | } |
49 | } | 50 | } |
50 | 51 | ||
@@ -146,6 +147,10 @@ export class UserNotification implements UserNotificationServer { | |||
146 | case UserNotificationType.NEW_INSTANCE_FOLLOWER: | 147 | case UserNotificationType.NEW_INSTANCE_FOLLOWER: |
147 | this.instanceFollowUrl = '/admin/follows/followers-list' | 148 | this.instanceFollowUrl = '/admin/follows/followers-list' |
148 | break | 149 | break |
150 | |||
151 | case UserNotificationType.AUTO_INSTANCE_FOLLOWING: | ||
152 | this.instanceFollowUrl = '/admin/follows/following-list' | ||
153 | break | ||
149 | } | 154 | } |
150 | } catch (err) { | 155 | } catch (err) { |
151 | this.type = null | 156 | this.type = null |
diff --git a/client/src/app/shared/users/user-notifications.component.html b/client/src/app/shared/users/user-notifications.component.html index 292813426..0702d3b5e 100644 --- a/client/src/app/shared/users/user-notifications.component.html +++ b/client/src/app/shared/users/user-notifications.component.html | |||
@@ -40,7 +40,7 @@ | |||
40 | <my-global-icon iconName="no"></my-global-icon> | 40 | <my-global-icon iconName="no"></my-global-icon> |
41 | 41 | ||
42 | <div class="message"> | 42 | <div class="message"> |
43 | The recently added video <a (click)="markAsRead(notification)" [routerLink]="notification.videoUrl">{{ notification.video.name }}</a> has been <a (click)="markAsRead(notification)" [routerLink]="notification.videoAutoBlacklistUrl">auto-blacklisted</a> | 43 | The recently added video <a (click)="markAsRead(notification)" [routerLink]="notification.videoUrl">{{ notification.videoBlacklist.video.name }}</a> has been <a (click)="markAsRead(notification)" [routerLink]="notification.videoAutoBlacklistUrl">auto-blacklisted</a> |
44 | </div> | 44 | </div> |
45 | </ng-container> | 45 | </ng-container> |
46 | 46 | ||
@@ -111,6 +111,14 @@ | |||
111 | <ng-container *ngIf="notification.actorFollow.state === 'pending'"> awaiting your approval</ng-container> | 111 | <ng-container *ngIf="notification.actorFollow.state === 'pending'"> awaiting your approval</ng-container> |
112 | </div> | 112 | </div> |
113 | </ng-container> | 113 | </ng-container> |
114 | |||
115 | <ng-container i18n *ngSwitchCase="UserNotificationType.AUTO_INSTANCE_FOLLOWING"> | ||
116 | <my-global-icon iconName="users"></my-global-icon> | ||
117 | |||
118 | <div class="message"> | ||
119 | Your instance automatically followed <a (click)="markAsRead(notification)" [routerLink]="notification.instanceFollowUrl">{{ notification.actorFollow.following.host }}</a> | ||
120 | </div> | ||
121 | </ng-container> | ||
114 | </ng-container> | 122 | </ng-container> |
115 | 123 | ||
116 | <div class="from-date">{{ notification.createdAt | myFromNow }}</div> | 124 | <div class="from-date">{{ notification.createdAt | myFromNow }}</div> |