aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/app
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/app')
-rw-r--r--client/src/app/+admin/admin-routing.module.ts2
-rw-r--r--client/src/app/+admin/admin.module.ts5
-rw-r--r--client/src/app/+admin/friends/friend-add/friend-add.component.ts2
-rw-r--r--client/src/app/+admin/friends/friend-list/friend-list.component.ts2
-rw-r--r--client/src/app/+admin/friends/friends.routes.ts2
-rw-r--r--client/src/app/+admin/friends/shared/friend.service.ts8
-rw-r--r--client/src/app/+admin/request-schedulers/index.ts4
-rw-r--r--client/src/app/+admin/request-schedulers/request-schedulers-stats/index.ts1
-rw-r--r--client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.html46
-rw-r--r--client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.scss8
-rw-r--r--client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.ts77
-rw-r--r--client/src/app/+admin/request-schedulers/request-schedulers.component.ts7
-rw-r--r--client/src/app/+admin/request-schedulers/request-schedulers.routes.ts33
-rw-r--r--client/src/app/+admin/request-schedulers/shared/index.ts2
-rw-r--r--client/src/app/+admin/request-schedulers/shared/request-schedulers-stats-attributes.model.ts37
-rw-r--r--client/src/app/+admin/request-schedulers/shared/request-schedulers.service.ts35
-rw-r--r--client/src/app/core/auth/auth.service.ts8
-rw-r--r--client/src/app/core/menu/menu-admin.component.html5
-rw-r--r--client/src/app/core/menu/menu-admin.component.ts6
-rw-r--r--client/src/app/core/menu/menu.component.ts6
-rw-r--r--client/src/app/shared/search/search-field.type.ts2
-rw-r--r--client/src/app/shared/search/search.component.ts4
-rw-r--r--client/src/app/shared/users/user.model.ts6
-rw-r--r--client/src/app/videos/+video-watch/video-watch.component.html4
-rw-r--r--client/src/app/videos/+video-watch/video-watch.component.scss6
-rw-r--r--client/src/app/videos/shared/video-details.model.ts6
-rw-r--r--client/src/app/videos/shared/video.model.ts10
-rw-r--r--client/src/app/videos/video-list/shared/video-miniature.component.html2
-rw-r--r--client/src/app/videos/video-list/shared/video-miniature.component.scss4
29 files changed, 36 insertions, 304 deletions
diff --git a/client/src/app/+admin/admin-routing.module.ts b/client/src/app/+admin/admin-routing.module.ts
index 7262768fe..88f44a811 100644
--- a/client/src/app/+admin/admin-routing.module.ts
+++ b/client/src/app/+admin/admin-routing.module.ts
@@ -5,7 +5,6 @@ import { MetaGuard } from '@ngx-meta/core'
5 5
6import { AdminComponent } from './admin.component' 6import { AdminComponent } from './admin.component'
7import { FriendsRoutes } from './friends' 7import { FriendsRoutes } from './friends'
8import { RequestSchedulersRoutes } from './request-schedulers'
9import { UsersRoutes } from './users' 8import { UsersRoutes } from './users'
10import { VideoAbusesRoutes } from './video-abuses' 9import { VideoAbusesRoutes } from './video-abuses'
11import { VideoBlacklistRoutes } from './video-blacklist' 10import { VideoBlacklistRoutes } from './video-blacklist'
@@ -23,7 +22,6 @@ const adminRoutes: Routes = [
23 pathMatch: 'full' 22 pathMatch: 'full'
24 }, 23 },
25 ...FriendsRoutes, 24 ...FriendsRoutes,
26 ...RequestSchedulersRoutes,
27 ...UsersRoutes, 25 ...UsersRoutes,
28 ...VideoAbusesRoutes, 26 ...VideoAbusesRoutes,
29 ...VideoBlacklistRoutes 27 ...VideoBlacklistRoutes
diff --git a/client/src/app/+admin/admin.module.ts b/client/src/app/+admin/admin.module.ts
index 6c216e5d8..32f6c42a6 100644
--- a/client/src/app/+admin/admin.module.ts
+++ b/client/src/app/+admin/admin.module.ts
@@ -3,7 +3,6 @@ import { NgModule } from '@angular/core'
3import { AdminComponent } from './admin.component' 3import { AdminComponent } from './admin.component'
4import { AdminRoutingModule } from './admin-routing.module' 4import { AdminRoutingModule } from './admin-routing.module'
5import { FriendsComponent, FriendAddComponent, FriendListComponent, FriendService } from './friends' 5import { FriendsComponent, FriendAddComponent, FriendListComponent, FriendService } from './friends'
6import { RequestSchedulersComponent, RequestSchedulersStatsComponent, RequestSchedulersService } from './request-schedulers'
7import { UsersComponent, UserAddComponent, UserUpdateComponent, UserListComponent, UserService } from './users' 6import { UsersComponent, UserAddComponent, UserUpdateComponent, UserListComponent, UserService } from './users'
8import { VideoAbusesComponent, VideoAbuseListComponent } from './video-abuses' 7import { VideoAbusesComponent, VideoAbuseListComponent } from './video-abuses'
9import { VideoBlacklistComponent, VideoBlacklistListComponent } from './video-blacklist' 8import { VideoBlacklistComponent, VideoBlacklistListComponent } from './video-blacklist'
@@ -22,9 +21,6 @@ import { SharedModule } from '../shared'
22 FriendAddComponent, 21 FriendAddComponent,
23 FriendListComponent, 22 FriendListComponent,
24 23
25 RequestSchedulersComponent,
26 RequestSchedulersStatsComponent,
27
28 UsersComponent, 24 UsersComponent,
29 UserAddComponent, 25 UserAddComponent,
30 UserUpdateComponent, 26 UserUpdateComponent,
@@ -43,7 +39,6 @@ import { SharedModule } from '../shared'
43 39
44 providers: [ 40 providers: [
45 FriendService, 41 FriendService,
46 RequestSchedulersService,
47 UserService 42 UserService
48 ] 43 ]
49}) 44})
diff --git a/client/src/app/+admin/friends/friend-add/friend-add.component.ts b/client/src/app/+admin/friends/friend-add/friend-add.component.ts
index 6580e1b88..29ed23e0c 100644
--- a/client/src/app/+admin/friends/friend-add/friend-add.component.ts
+++ b/client/src/app/+admin/friends/friend-add/friend-add.component.ts
@@ -91,7 +91,7 @@ export class FriendAddComponent implements OnInit {
91 res => { 91 res => {
92 if (res === false) return 92 if (res === false) return
93 93
94 this.friendService.makeFriends(notEmptyHosts).subscribe( 94 this.friendService.follow(notEmptyHosts).subscribe(
95 status => { 95 status => {
96 this.notificationsService.success('Success', 'Make friends request sent!') 96 this.notificationsService.success('Success', 'Make friends request sent!')
97 // Wait requests between pods 97 // Wait requests between pods
diff --git a/client/src/app/+admin/friends/friend-list/friend-list.component.ts b/client/src/app/+admin/friends/friend-list/friend-list.component.ts
index 5a1ecd280..0323ae96d 100644
--- a/client/src/app/+admin/friends/friend-list/friend-list.component.ts
+++ b/client/src/app/+admin/friends/friend-list/friend-list.component.ts
@@ -74,7 +74,7 @@ export class FriendListComponent extends RestTable implements OnInit {
74 } 74 }
75 75
76 protected loadData () { 76 protected loadData () {
77 this.friendService.getFriends(this.pagination, this.sort) 77 this.friendService.getFollowing(this.pagination, this.sort)
78 .subscribe( 78 .subscribe(
79 resultList => { 79 resultList => {
80 this.friends = resultList.data 80 this.friends = resultList.data
diff --git a/client/src/app/+admin/friends/friends.routes.ts b/client/src/app/+admin/friends/friends.routes.ts
index 61cfcae19..e2cb953b3 100644
--- a/client/src/app/+admin/friends/friends.routes.ts
+++ b/client/src/app/+admin/friends/friends.routes.ts
@@ -12,7 +12,7 @@ export const FriendsRoutes: Routes = [
12 component: FriendsComponent, 12 component: FriendsComponent,
13 canActivate: [ UserRightGuard ], 13 canActivate: [ UserRightGuard ],
14 data: { 14 data: {
15 userRight: UserRight.MANAGE_PODS 15 userRight: UserRight.MANAGE_PEERTUBE_FOLLOW
16 }, 16 },
17 children: [ 17 children: [
18 { 18 {
diff --git a/client/src/app/+admin/friends/shared/friend.service.ts b/client/src/app/+admin/friends/shared/friend.service.ts
index a32cdcc88..083a2fce0 100644
--- a/client/src/app/+admin/friends/shared/friend.service.ts
+++ b/client/src/app/+admin/friends/shared/friend.service.ts
@@ -19,21 +19,21 @@ export class FriendService {
19 private restExtractor: RestExtractor 19 private restExtractor: RestExtractor
20 ) {} 20 ) {}
21 21
22 getFriends (pagination: RestPagination, sort: SortMeta): Observable<ResultList<Pod>> { 22 getFollowing (pagination: RestPagination, sort: SortMeta): Observable<ResultList<Pod>> {
23 let params = new HttpParams() 23 let params = new HttpParams()
24 params = this.restService.addRestGetParams(params, pagination, sort) 24 params = this.restService.addRestGetParams(params, pagination, sort)
25 25
26 return this.authHttp.get<ResultList<Pod>>(FriendService.BASE_FRIEND_URL, { params }) 26 return this.authHttp.get<ResultList<Account>>(API_URL + '/followers', { params })
27 .map(res => this.restExtractor.convertResultListDateToHuman(res)) 27 .map(res => this.restExtractor.convertResultListDateToHuman(res))
28 .catch(res => this.restExtractor.handleError(res)) 28 .catch(res => this.restExtractor.handleError(res))
29 } 29 }
30 30
31 makeFriends (notEmptyHosts: String[]) { 31 follow (notEmptyHosts: String[]) {
32 const body = { 32 const body = {
33 hosts: notEmptyHosts 33 hosts: notEmptyHosts
34 } 34 }
35 35
36 return this.authHttp.post(FriendService.BASE_FRIEND_URL + 'make-friends', body) 36 return this.authHttp.post(API_URL + '/follow', body)
37 .map(this.restExtractor.extractDataBool) 37 .map(this.restExtractor.extractDataBool)
38 .catch(res => this.restExtractor.handleError(res)) 38 .catch(res => this.restExtractor.handleError(res))
39 } 39 }
diff --git a/client/src/app/+admin/request-schedulers/index.ts b/client/src/app/+admin/request-schedulers/index.ts
deleted file mode 100644
index 87b72e8c7..000000000
--- a/client/src/app/+admin/request-schedulers/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
1export * from './request-schedulers-stats'
2export * from './shared'
3export * from './request-schedulers.component'
4export * from './request-schedulers.routes'
diff --git a/client/src/app/+admin/request-schedulers/request-schedulers-stats/index.ts b/client/src/app/+admin/request-schedulers/request-schedulers-stats/index.ts
deleted file mode 100644
index a3323e6be..000000000
--- a/client/src/app/+admin/request-schedulers/request-schedulers-stats/index.ts
+++ /dev/null
@@ -1 +0,0 @@
1export * from './request-schedulers-stats.component'
diff --git a/client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.html b/client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.html
deleted file mode 100644
index 4508ab4c2..000000000
--- a/client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.html
+++ /dev/null
@@ -1,46 +0,0 @@
1<div class="row">
2 <div class="content-padding">
3
4 <h3>Requests stats</h3>
5
6 <ng-template [ngIf]="stats">
7 <div *ngFor="let requestSchedulerName of statsTitles | keys" class="col-lg-4 col-md-12">
8 <div class="panel panel-default" *ngIf="stats[requestSchedulerName] !== null">
9 <div class="panel-heading">{{ statsTitles[requestSchedulerName] }}</div>
10
11 <div class="panel-body">
12 <div class="requests-general">
13 <div>
14 <span class="label-description">Remaining requests:</span>
15 {{ stats[requestSchedulerName].totalRequests }}
16 </div>
17
18 <div>
19 <span class="label-description">Interval seconds between requests:</span>
20 {{ stats[requestSchedulerName].secondsInterval }}
21 </div>
22
23 <div>
24 <span class="label-description">Remaining time before the scheduled request:</span>
25 {{ stats[requestSchedulerName].remainingSeconds }}
26 </div>
27 </div>
28
29 <div class="requests-limit">
30 <div>
31 <span class="label-description">Maximum number of different pods for a scheduled request:</span>
32 {{ stats[requestSchedulerName].requestsLimitPods }}
33 </div>
34
35 <div>
36 <span class="label-description">Maximum number of requests per pod for a scheduled request:</span>
37 {{ stats[requestSchedulerName].requestsLimitPerPod }}
38 </div>
39 </div>
40 </div>
41 </div>
42 </div>
43 </ng-template>
44
45 </div>
46</div>
diff --git a/client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.scss b/client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.scss
deleted file mode 100644
index b2c413259..000000000
--- a/client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.scss
+++ /dev/null
@@ -1,8 +0,0 @@
1.label-description {
2 font-weight: bold;
3 color: black;
4}
5
6.requests-limit {
7 margin-top: 20px;
8}
diff --git a/client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.ts b/client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.ts
deleted file mode 100644
index 1654827ab..000000000
--- a/client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.ts
+++ /dev/null
@@ -1,77 +0,0 @@
1import { Component, OnInit, OnDestroy } from '@angular/core'
2
3import { NotificationsService } from 'angular2-notifications'
4
5import { RequestSchedulersService, RequestSchedulerStatsAttributes } from '../shared'
6import { RequestSchedulerStats } from '../../../../../../shared'
7
8@Component({
9 selector: 'my-request-schedulers-stats',
10 templateUrl: './request-schedulers-stats.component.html',
11 styleUrls: [ './request-schedulers-stats.component.scss' ]
12})
13export class RequestSchedulersStatsComponent implements OnInit, OnDestroy {
14 statsTitles = {
15 requestScheduler: 'Basic request scheduler',
16 requestVideoEventScheduler: 'Video events request scheduler',
17 requestVideoQaduScheduler: 'Quick and dirty video updates request scheduler'
18 }
19
20 stats: RequestSchedulerStats
21
22 private intervals: { [ id: string ]: number } = {
23 requestScheduler: null,
24 requestVideoEventScheduler: null,
25 requestVideoQaduScheduler: null
26 }
27
28 private timeouts: { [ id: string ]: number } = {
29 requestScheduler: null,
30 requestVideoEventScheduler: null,
31 requestVideoQaduScheduler: null
32 }
33
34 constructor (
35 private notificationsService: NotificationsService,
36 private requestService: RequestSchedulersService
37 ) { }
38
39 ngOnInit () {
40 this.getStats()
41 this.runIntervals()
42 }
43
44 ngOnDestroy () {
45 Object.keys(this.stats).forEach(requestSchedulerName => {
46 if (this.intervals[requestSchedulerName] !== null) {
47 window.clearInterval(this.intervals[requestSchedulerName])
48 }
49
50 if (this.timeouts[requestSchedulerName] !== null) {
51 window.clearTimeout(this.timeouts[requestSchedulerName])
52 }
53 })
54 }
55
56 getStats () {
57 this.requestService.getStats().subscribe(
58 stats => this.stats = stats,
59
60 err => this.notificationsService.error('Error', err.message)
61 )
62 }
63
64 private runIntervals () {
65 Object.keys(this.intervals).forEach(requestSchedulerName => {
66 this.intervals[requestSchedulerName] = window.setInterval(() => {
67 const stats: RequestSchedulerStatsAttributes = this.stats[requestSchedulerName]
68
69 stats.remainingMilliSeconds -= 1000
70
71 if (stats.remainingMilliSeconds <= 0) {
72 this.timeouts[requestSchedulerName] = window.setTimeout(() => this.getStats(), stats.remainingMilliSeconds + 100)
73 }
74 }, 1000)
75 })
76 }
77}
diff --git a/client/src/app/+admin/request-schedulers/request-schedulers.component.ts b/client/src/app/+admin/request-schedulers/request-schedulers.component.ts
deleted file mode 100644
index 5444d6ea5..000000000
--- a/client/src/app/+admin/request-schedulers/request-schedulers.component.ts
+++ /dev/null
@@ -1,7 +0,0 @@
1import { Component } from '@angular/core'
2
3@Component({
4 template: '<router-outlet></router-outlet>'
5})
6export class RequestSchedulersComponent {
7}
diff --git a/client/src/app/+admin/request-schedulers/request-schedulers.routes.ts b/client/src/app/+admin/request-schedulers/request-schedulers.routes.ts
deleted file mode 100644
index c2564de15..000000000
--- a/client/src/app/+admin/request-schedulers/request-schedulers.routes.ts
+++ /dev/null
@@ -1,33 +0,0 @@
1import { Routes } from '@angular/router'
2
3import { UserRightGuard } from '../../core'
4import { UserRight } from '../../../../../shared'
5import { RequestSchedulersComponent } from './request-schedulers.component'
6import { RequestSchedulersStatsComponent } from './request-schedulers-stats'
7
8export const RequestSchedulersRoutes: Routes = [
9 {
10 path: 'requests',
11 component: RequestSchedulersComponent,
12 canActivate: [ UserRightGuard ],
13 data: {
14 userRight: UserRight.MANAGE_REQUEST_SCHEDULERS
15 },
16 children: [
17 {
18 path: '',
19 redirectTo: 'stats',
20 pathMatch: 'full'
21 },
22 {
23 path: 'stats',
24 component: RequestSchedulersStatsComponent,
25 data: {
26 meta: {
27 title: 'Request stats'
28 }
29 }
30 }
31 ]
32 }
33]
diff --git a/client/src/app/+admin/request-schedulers/shared/index.ts b/client/src/app/+admin/request-schedulers/shared/index.ts
deleted file mode 100644
index 1a0174409..000000000
--- a/client/src/app/+admin/request-schedulers/shared/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
1export * from './request-schedulers-stats-attributes.model'
2export * from './request-schedulers.service'
diff --git a/client/src/app/+admin/request-schedulers/shared/request-schedulers-stats-attributes.model.ts b/client/src/app/+admin/request-schedulers/shared/request-schedulers-stats-attributes.model.ts
deleted file mode 100644
index c4abf3d4d..000000000
--- a/client/src/app/+admin/request-schedulers/shared/request-schedulers-stats-attributes.model.ts
+++ /dev/null
@@ -1,37 +0,0 @@
1import { RequestSchedulerStatsAttributes as FormattedRequestSchedulerStatsAttributes } from '../../../../../../shared'
2
3export interface Request {
4 request: any
5 to: any
6}
7
8export class RequestSchedulerStatsAttributes implements FormattedRequestSchedulerStatsAttributes {
9 requestsLimitPods: number
10 requestsLimitPerPod: number
11 milliSecondsInterval: number
12 remainingMilliSeconds: number
13 totalRequests: number
14
15 constructor (hash: {
16 requestsLimitPods: number,
17 requestsLimitPerPod: number,
18 milliSecondsInterval: number,
19 remainingMilliSeconds: number,
20 totalRequests: number
21 }) {
22 this.requestsLimitPods = hash.requestsLimitPods
23 this.requestsLimitPerPod = hash.requestsLimitPerPod
24 this.milliSecondsInterval = hash.milliSecondsInterval
25 this.remainingMilliSeconds = hash.remainingMilliSeconds
26 this.totalRequests = hash.totalRequests
27 }
28
29 get remainingSeconds () {
30 return Math.floor(this.remainingMilliSeconds / 1000)
31 }
32
33 get secondsInterva () {
34 return Math.floor(this.milliSecondsInterval / 1000)
35 }
36
37}
diff --git a/client/src/app/+admin/request-schedulers/shared/request-schedulers.service.ts b/client/src/app/+admin/request-schedulers/shared/request-schedulers.service.ts
deleted file mode 100644
index 44d9cbc3e..000000000
--- a/client/src/app/+admin/request-schedulers/shared/request-schedulers.service.ts
+++ /dev/null
@@ -1,35 +0,0 @@
1import { Injectable } from '@angular/core'
2import { HttpClient } from '@angular/common/http'
3import { Observable } from 'rxjs/Observable'
4import 'rxjs/add/operator/catch'
5import 'rxjs/add/operator/map'
6
7import { RequestSchedulerStats } from '../../../../../../shared'
8import { RestExtractor } from '../../../shared'
9import { RequestSchedulerStatsAttributes } from './request-schedulers-stats-attributes.model'
10
11@Injectable()
12export class RequestSchedulersService {
13 private static BASE_REQUEST_URL = API_URL + '/api/v1/request-schedulers/'
14
15 constructor (
16 private authHttp: HttpClient,
17 private restExtractor: RestExtractor
18 ) {}
19
20 getStats () {
21 return this.authHttp.get<RequestSchedulerStats>(RequestSchedulersService.BASE_REQUEST_URL + 'stats')
22 .map(res => this.buildRequestObjects(res))
23 .catch(res => this.restExtractor.handleError(res))
24 }
25
26 private buildRequestObjects (data: RequestSchedulerStats) {
27 const requestSchedulers: { [ id: string ]: RequestSchedulerStatsAttributes } = {}
28
29 Object.keys(data).forEach(requestSchedulerName => {
30 requestSchedulers[requestSchedulerName] = new RequestSchedulerStatsAttributes(data[requestSchedulerName])
31 })
32
33 return requestSchedulers
34 }
35}
diff --git a/client/src/app/core/auth/auth.service.ts b/client/src/app/core/auth/auth.service.ts
index 913c857e3..0aa276c69 100644
--- a/client/src/app/core/auth/auth.service.ts
+++ b/client/src/app/core/auth/auth.service.ts
@@ -42,7 +42,7 @@ interface UserLoginWithUserInformation extends UserLogin {
42 displayNSFW: boolean 42 displayNSFW: boolean
43 email: string 43 email: string
44 videoQuota: number 44 videoQuota: number
45 author: { 45 account: {
46 id: number 46 id: number
47 uuid: string 47 uuid: string
48 } 48 }
@@ -208,7 +208,7 @@ export class AuthService {
208 this.user.displayNSFW = res.displayNSFW 208 this.user.displayNSFW = res.displayNSFW
209 this.user.role = res.role 209 this.user.role = res.role
210 this.user.videoChannels = res.videoChannels 210 this.user.videoChannels = res.videoChannels
211 this.user.author = res.author 211 this.user.account = res.account
212 212
213 this.user.save() 213 this.user.save()
214 } 214 }
@@ -227,7 +227,7 @@ export class AuthService {
227 displayNSFW: res.displayNSFW, 227 displayNSFW: res.displayNSFW,
228 email: res.email, 228 email: res.email,
229 videoQuota: res.videoQuota, 229 videoQuota: res.videoQuota,
230 author: res.author, 230 account: res.account,
231 videoChannels: res.videoChannels 231 videoChannels: res.videoChannels
232 } 232 }
233 233
@@ -245,7 +245,7 @@ export class AuthService {
245 displayNSFW: obj.displayNSFW, 245 displayNSFW: obj.displayNSFW,
246 videoQuota: obj.videoQuota, 246 videoQuota: obj.videoQuota,
247 videoChannels: obj.videoChannels, 247 videoChannels: obj.videoChannels,
248 author: obj.author 248 account: obj.account
249 } 249 }
250 const hashTokens = { 250 const hashTokens = {
251 accessToken: obj.access_token, 251 accessToken: obj.access_token,
diff --git a/client/src/app/core/menu/menu-admin.component.html b/client/src/app/core/menu/menu-admin.component.html
index c2b2958b4..1966a944c 100644
--- a/client/src/app/core/menu/menu-admin.component.html
+++ b/client/src/app/core/menu/menu-admin.component.html
@@ -10,11 +10,6 @@
10 List friends 10 List friends
11 </a> 11 </a>
12 12
13 <a *ngIf="hasRequestsStatRight()" routerLink="/admin/requests/stats" routerLinkActive="active">
14 <span class="hidden-xs glyphicon glyphicon-stats"></span>
15 Request stats
16 </a>
17
18 <a *ngIf="hasVideoAbusesRight()" routerLink="/admin/video-abuses" routerLinkActive="active"> 13 <a *ngIf="hasVideoAbusesRight()" routerLink="/admin/video-abuses" routerLinkActive="active">
19 <span class="hidden-xs glyphicon glyphicon-alert"></span> 14 <span class="hidden-xs glyphicon glyphicon-alert"></span>
20 Video abuses 15 Video abuses
diff --git a/client/src/app/core/menu/menu-admin.component.ts b/client/src/app/core/menu/menu-admin.component.ts
index 074f1dbaf..92aab9a05 100644
--- a/client/src/app/core/menu/menu-admin.component.ts
+++ b/client/src/app/core/menu/menu-admin.component.ts
@@ -16,11 +16,7 @@ export class MenuAdminComponent {
16 } 16 }
17 17
18 hasFriendsRight () { 18 hasFriendsRight () {
19 return this.auth.getUser().hasRight(UserRight.MANAGE_PODS) 19 return this.auth.getUser().hasRight(UserRight.MANAGE_PEERTUBE_FOLLOW)
20 }
21
22 hasRequestsStatRight () {
23 return this.auth.getUser().hasRight(UserRight.MANAGE_REQUEST_SCHEDULERS)
24 } 20 }
25 21
26 hasVideoAbusesRight () { 22 hasVideoAbusesRight () {
diff --git a/client/src/app/core/menu/menu.component.ts b/client/src/app/core/menu/menu.component.ts
index c66a5eccc..71295be86 100644
--- a/client/src/app/core/menu/menu.component.ts
+++ b/client/src/app/core/menu/menu.component.ts
@@ -16,8 +16,7 @@ export class MenuComponent implements OnInit {
16 16
17 private routesPerRight = { 17 private routesPerRight = {
18 [UserRight.MANAGE_USERS]: '/admin/users', 18 [UserRight.MANAGE_USERS]: '/admin/users',
19 [UserRight.MANAGE_PODS]: '/admin/friends', 19 [UserRight.MANAGE_PEERTUBE_FOLLOW]: '/admin/friends',
20 [UserRight.MANAGE_REQUEST_SCHEDULERS]: '/admin/requests/stats',
21 [UserRight.MANAGE_VIDEO_ABUSES]: '/admin/video-abuses', 20 [UserRight.MANAGE_VIDEO_ABUSES]: '/admin/video-abuses',
22 [UserRight.MANAGE_VIDEO_BLACKLIST]: '/admin/video-blacklist' 21 [UserRight.MANAGE_VIDEO_BLACKLIST]: '/admin/video-blacklist'
23 } 22 }
@@ -59,8 +58,7 @@ export class MenuComponent implements OnInit {
59 58
60 const adminRights = [ 59 const adminRights = [
61 UserRight.MANAGE_USERS, 60 UserRight.MANAGE_USERS,
62 UserRight.MANAGE_PODS, 61 UserRight.MANAGE_PEERTUBE_FOLLOW,
63 UserRight.MANAGE_REQUEST_SCHEDULERS,
64 UserRight.MANAGE_VIDEO_ABUSES, 62 UserRight.MANAGE_VIDEO_ABUSES,
65 UserRight.MANAGE_VIDEO_BLACKLIST 63 UserRight.MANAGE_VIDEO_BLACKLIST
66 ] 64 ]
diff --git a/client/src/app/shared/search/search-field.type.ts b/client/src/app/shared/search/search-field.type.ts
index ff0bb8de1..7323d6cc3 100644
--- a/client/src/app/shared/search/search-field.type.ts
+++ b/client/src/app/shared/search/search-field.type.ts
@@ -1 +1 @@
export type SearchField = 'name' | 'author' | 'host' | 'tags' export type SearchField = 'name' | 'account' | 'host' | 'tags'
diff --git a/client/src/app/shared/search/search.component.ts b/client/src/app/shared/search/search.component.ts
index 6e2827fe3..6ef19c97a 100644
--- a/client/src/app/shared/search/search.component.ts
+++ b/client/src/app/shared/search/search.component.ts
@@ -14,8 +14,8 @@ import { SearchService } from './search.service'
14export class SearchComponent implements OnInit { 14export class SearchComponent implements OnInit {
15 fieldChoices = { 15 fieldChoices = {
16 name: 'Name', 16 name: 'Name',
17 author: 'Author', 17 account: 'Account',
18 host: 'Pod Host', 18 host: 'Host',
19 tags: 'Tags' 19 tags: 'Tags'
20 } 20 }
21 searchCriteria: Search = { 21 searchCriteria: Search = {
diff --git a/client/src/app/shared/users/user.model.ts b/client/src/app/shared/users/user.model.ts
index d738899ab..b075ab717 100644
--- a/client/src/app/shared/users/user.model.ts
+++ b/client/src/app/shared/users/user.model.ts
@@ -14,7 +14,7 @@ export type UserConstructorHash = {
14 videoQuota?: number, 14 videoQuota?: number,
15 displayNSFW?: boolean, 15 displayNSFW?: boolean,
16 createdAt?: Date, 16 createdAt?: Date,
17 author?: { 17 account?: {
18 id: number 18 id: number
19 uuid: string 19 uuid: string
20 }, 20 },
@@ -27,7 +27,7 @@ export class User implements UserServerModel {
27 role: UserRole 27 role: UserRole
28 displayNSFW: boolean 28 displayNSFW: boolean
29 videoQuota: number 29 videoQuota: number
30 author: { 30 account: {
31 id: number 31 id: number
32 uuid: string 32 uuid: string
33 } 33 }
@@ -39,7 +39,7 @@ export class User implements UserServerModel {
39 this.username = hash.username 39 this.username = hash.username
40 this.email = hash.email 40 this.email = hash.email
41 this.role = hash.role 41 this.role = hash.role
42 this.author = hash.author 42 this.account = hash.account
43 43
44 if (hash.videoChannels !== undefined) { 44 if (hash.videoChannels !== undefined) {
45 this.videoChannels = hash.videoChannels 45 this.videoChannels = hash.videoChannels
diff --git a/client/src/app/videos/+video-watch/video-watch.component.html b/client/src/app/videos/+video-watch/video-watch.component.html
index 0bab18d37..ee7bbec74 100644
--- a/client/src/app/videos/+video-watch/video-watch.component.html
+++ b/client/src/app/videos/+video-watch/video-watch.component.html
@@ -42,8 +42,8 @@
42 </div> 42 </div>
43 43
44 <div class="row video-small-blocks"> 44 <div class="row video-small-blocks">
45 <div class="col-xs-5 col-xs-3 col-md-3 video-small-block video-small-block-author"> 45 <div class="col-xs-5 col-xs-3 col-md-3 video-small-block video-small-block-account">
46 <a class="option" title="Access to all videos of this user" [routerLink]="['/videos/list', { field: 'author', search: video.author }]"> 46 <a class="option" title="Access to all videos of this user" [routerLink]="['/videos/list', { field: 'account', search: video.account }]">
47 <span class="glyphicon glyphicon-user"></span> 47 <span class="glyphicon glyphicon-user"></span>
48 <span class="video-small-block-text">{{ video.by }}</span> 48 <span class="video-small-block-text">{{ video.by }}</span>
49 </a> 49 </a>
diff --git a/client/src/app/videos/+video-watch/video-watch.component.scss b/client/src/app/videos/+video-watch/video-watch.component.scss
index 1a59a1bd3..fcad7f7b0 100644
--- a/client/src/app/videos/+video-watch/video-watch.component.scss
+++ b/client/src/app/videos/+video-watch/video-watch.component.scss
@@ -104,7 +104,7 @@
104 border-style: solid; 104 border-style: solid;
105 } 105 }
106 106
107 .video-small-block-author, .video-small-block-more { 107 .video-small-block-account, .video-small-block-more {
108 a.option { 108 a.option {
109 display: block; 109 display: block;
110 110
@@ -234,7 +234,7 @@
234 font-size: 18px !important; 234 font-size: 18px !important;
235 } 235 }
236 236
237 .video-small-block-author { 237 .video-small-block-account {
238 padding-left: 10px; 238 padding-left: 10px;
239 padding-right: 10px; 239 padding-right: 10px;
240 } 240 }
@@ -267,7 +267,7 @@
267 font-size: 10px !important; 267 font-size: 10px !important;
268 } 268 }
269 269
270 .video-small-block-author { 270 .video-small-block-account {
271 padding-left: 5px; 271 padding-left: 5px;
272 padding-right: 5px; 272 padding-right: 5px;
273 } 273 }
diff --git a/client/src/app/videos/shared/video-details.model.ts b/client/src/app/videos/shared/video-details.model.ts
index 84f96a25f..f4ae64dc1 100644
--- a/client/src/app/videos/shared/video-details.model.ts
+++ b/client/src/app/videos/shared/video-details.model.ts
@@ -10,7 +10,7 @@ import {
10} from '../../../../../shared' 10} from '../../../../../shared'
11 11
12export class VideoDetails extends Video implements VideoDetailsServerModel { 12export class VideoDetails extends Video implements VideoDetailsServerModel {
13 author: string 13 account: string
14 by: string 14 by: string
15 createdAt: Date 15 createdAt: Date
16 updatedAt: Date 16 updatedAt: Date
@@ -71,7 +71,7 @@ export class VideoDetails extends Video implements VideoDetailsServerModel {
71 } 71 }
72 72
73 isRemovableBy (user: AuthUser) { 73 isRemovableBy (user: AuthUser) {
74 return user && this.isLocal === true && (this.author === user.username || user.hasRight(UserRight.REMOVE_ANY_VIDEO)) 74 return user && this.isLocal === true && (this.account === user.username || user.hasRight(UserRight.REMOVE_ANY_VIDEO))
75 } 75 }
76 76
77 isBlackistableBy (user: AuthUser) { 77 isBlackistableBy (user: AuthUser) {
@@ -79,6 +79,6 @@ export class VideoDetails extends Video implements VideoDetailsServerModel {
79 } 79 }
80 80
81 isUpdatableBy (user: AuthUser) { 81 isUpdatableBy (user: AuthUser) {
82 return user && this.isLocal === true && user.username === this.author 82 return user && this.isLocal === true && user.username === this.account
83 } 83 }
84} 84}
diff --git a/client/src/app/videos/shared/video.model.ts b/client/src/app/videos/shared/video.model.ts
index 7f2871032..2cad4a04e 100644
--- a/client/src/app/videos/shared/video.model.ts
+++ b/client/src/app/videos/shared/video.model.ts
@@ -2,7 +2,7 @@ import { Video as VideoServerModel } from '../../../../../shared'
2import { User } from '../../shared' 2import { User } from '../../shared'
3 3
4export class Video implements VideoServerModel { 4export class Video implements VideoServerModel {
5 author: string 5 account: string
6 by: string 6 by: string
7 createdAt: Date 7 createdAt: Date
8 updatedAt: Date 8 updatedAt: Date
@@ -32,8 +32,8 @@ export class Video implements VideoServerModel {
32 dislikes: number 32 dislikes: number
33 nsfw: boolean 33 nsfw: boolean
34 34
35 private static createByString (author: string, podHost: string) { 35 private static createByString (account: string, podHost: string) {
36 return author + '@' + podHost 36 return account + '@' + podHost
37 } 37 }
38 38
39 private static createDurationString (duration: number) { 39 private static createDurationString (duration: number) {
@@ -52,7 +52,7 @@ export class Video implements VideoServerModel {
52 absoluteAPIUrl = window.location.origin 52 absoluteAPIUrl = window.location.origin
53 } 53 }
54 54
55 this.author = hash.author 55 this.account = hash.account
56 this.createdAt = new Date(hash.createdAt.toString()) 56 this.createdAt = new Date(hash.createdAt.toString())
57 this.categoryLabel = hash.categoryLabel 57 this.categoryLabel = hash.categoryLabel
58 this.category = hash.category 58 this.category = hash.category
@@ -80,7 +80,7 @@ export class Video implements VideoServerModel {
80 this.dislikes = hash.dislikes 80 this.dislikes = hash.dislikes
81 this.nsfw = hash.nsfw 81 this.nsfw = hash.nsfw
82 82
83 this.by = Video.createByString(hash.author, hash.podHost) 83 this.by = Video.createByString(hash.account, hash.podHost)
84 } 84 }
85 85
86 isVideoNSFWForUser (user: User) { 86 isVideoNSFWForUser (user: User) {
diff --git a/client/src/app/videos/video-list/shared/video-miniature.component.html b/client/src/app/videos/video-list/shared/video-miniature.component.html
index abe87025f..6bbd29666 100644
--- a/client/src/app/videos/video-list/shared/video-miniature.component.html
+++ b/client/src/app/videos/video-list/shared/video-miniature.component.html
@@ -27,7 +27,7 @@
27 </span> 27 </span>
28 </div> 28 </div>
29 29
30 <a [routerLink]="['/videos/list', { field: 'author', search: video.author, sort: currentSort }]" class="video-miniature-author">{{ video.by }}</a> 30 <a [routerLink]="['/videos/list', { field: 'account', search: video.account, sort: currentSort }]" class="video-miniature-account">{{ video.by }}</a>
31 <span class="video-miniature-created-at">{{ video.createdAt | date:'short' }}</span> 31 <span class="video-miniature-created-at">{{ video.createdAt | date:'short' }}</span>
32 </div> 32 </div>
33</div> 33</div>
diff --git a/client/src/app/videos/video-list/shared/video-miniature.component.scss b/client/src/app/videos/video-list/shared/video-miniature.component.scss
index e2602d3b6..507ace098 100644
--- a/client/src/app/videos/video-list/shared/video-miniature.component.scss
+++ b/client/src/app/videos/video-list/shared/video-miniature.component.scss
@@ -81,7 +81,7 @@
81 } 81 }
82 } 82 }
83 83
84 .video-miniature-author, .video-miniature-created-at { 84 .video-miniature-account, .video-miniature-created-at {
85 display: block; 85 display: block;
86 margin-left: 1px; 86 margin-left: 1px;
87 font-size: 11px; 87 font-size: 11px;
@@ -89,7 +89,7 @@
89 opacity: 0.9; 89 opacity: 0.9;
90 } 90 }
91 91
92 .video-miniature-author { 92 .video-miniature-account {
93 transition: color 0.2s; 93 transition: color 0.2s;
94 94
95 &:hover { 95 &:hover {