aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--client/src/app/+my-account/my-account-video-channels/my-account-video-channels.component.ts16
-rw-r--r--client/src/app/shared/video-channel/video-channel.model.ts2
-rw-r--r--client/src/app/shared/video-channel/video-channel.service.ts7
-rw-r--r--server/controllers/api/accounts.ts7
-rw-r--r--server/middlewares/validators/videos/video-channels.ts14
-rw-r--r--server/models/video/video-channel.ts1
6 files changed, 31 insertions, 16 deletions
diff --git a/client/src/app/+my-account/my-account-video-channels/my-account-video-channels.component.ts b/client/src/app/+my-account/my-account-video-channels/my-account-video-channels.component.ts
index eeab3a8dd..27a157621 100644
--- a/client/src/app/+my-account/my-account-video-channels/my-account-video-channels.component.ts
+++ b/client/src/app/+my-account/my-account-video-channels/my-account-video-channels.component.ts
@@ -57,7 +57,7 @@ export class MyAccountVideoChannelsComponent implements OnInit {
57 min: Math.max(0, this.videoChannelsMinimumDailyViews - (3 * this.videoChannelsMaximumDailyViews / 100)), 57 min: Math.max(0, this.videoChannelsMinimumDailyViews - (3 * this.videoChannelsMaximumDailyViews / 100)),
58 max: this.videoChannelsMaximumDailyViews 58 max: this.videoChannelsMaximumDailyViews
59 } 59 }
60 }], 60 }]
61 }, 61 },
62 layout: { 62 layout: {
63 padding: { 63 padding: {
@@ -68,7 +68,7 @@ export class MyAccountVideoChannelsComponent implements OnInit {
68 } 68 }
69 }, 69 },
70 elements: { 70 elements: {
71 point:{ 71 point: {
72 radius: 0 72 radius: 0
73 } 73 }
74 }, 74 },
@@ -76,14 +76,12 @@ export class MyAccountVideoChannelsComponent implements OnInit {
76 mode: 'index', 76 mode: 'index',
77 intersect: false, 77 intersect: false,
78 custom: function (tooltip: any) { 78 custom: function (tooltip: any) {
79 if (!tooltip) return; 79 if (!tooltip) return
80 // disable displaying the color box; 80 // disable displaying the color box
81 tooltip.displayColors = false; 81 tooltip.displayColors = false
82 }, 82 },
83 callbacks: { 83 callbacks: {
84 label: function (tooltip: any, data: any) { 84 label: (tooltip: any, data: any) => `${tooltip.value} views`
85 return `${tooltip.value} views`;
86 }
87 } 85 }
88 }, 86 },
89 hover: { 87 hover: {
@@ -124,7 +122,7 @@ export class MyAccountVideoChannelsComponent implements OnInit {
124 122
125 private loadVideoChannels () { 123 private loadVideoChannels () {
126 this.authService.userInformationLoaded 124 this.authService.userInformationLoaded
127 .pipe(flatMap(() => this.videoChannelService.listAccountVideoChannels(this.user.account))) 125 .pipe(flatMap(() => this.videoChannelService.listAccountVideoChannels(this.user.account, null, true)))
128 .subscribe(res => { 126 .subscribe(res => {
129 this.videoChannels = res.data 127 this.videoChannels = res.data
130 this.videoChannelsData = this.videoChannels.map(v => ({ 128 this.videoChannelsData = this.videoChannels.map(v => ({
diff --git a/client/src/app/shared/video-channel/video-channel.model.ts b/client/src/app/shared/video-channel/video-channel.model.ts
index ee3288d7a..c93af0ca5 100644
--- a/client/src/app/shared/video-channel/video-channel.model.ts
+++ b/client/src/app/shared/video-channel/video-channel.model.ts
@@ -25,7 +25,7 @@ export class VideoChannel extends Actor implements ServerVideoChannel {
25 this.nameWithHostForced = Actor.CREATE_BY_STRING(this.name, this.host, true) 25 this.nameWithHostForced = Actor.CREATE_BY_STRING(this.name, this.host, true)
26 26
27 if (hash.viewsPerDay) { 27 if (hash.viewsPerDay) {
28 this.viewsPerDay = hash.viewsPerDay.map(v => ({ ...v, date: new Date(v.date)})) 28 this.viewsPerDay = hash.viewsPerDay.map(v => ({ ...v, date: new Date(v.date) }))
29 } 29 }
30 30
31 if (hash.ownerAccount) { 31 if (hash.ownerAccount) {
diff --git a/client/src/app/shared/video-channel/video-channel.service.ts b/client/src/app/shared/video-channel/video-channel.service.ts
index adb4f4819..0e036bda7 100644
--- a/client/src/app/shared/video-channel/video-channel.service.ts
+++ b/client/src/app/shared/video-channel/video-channel.service.ts
@@ -44,13 +44,18 @@ export class VideoChannelService {
44 ) 44 )
45 } 45 }
46 46
47 listAccountVideoChannels (account: Account, componentPagination?: ComponentPaginationLight): Observable<ResultList<VideoChannel>> { 47 listAccountVideoChannels (
48 account: Account,
49 componentPagination?: ComponentPaginationLight,
50 withStats = false
51 ): Observable<ResultList<VideoChannel>> {
48 const pagination = componentPagination 52 const pagination = componentPagination
49 ? this.restService.componentPaginationToRestPagination(componentPagination) 53 ? this.restService.componentPaginationToRestPagination(componentPagination)
50 : { start: 0, count: 20 } 54 : { start: 0, count: 20 }
51 55
52 let params = new HttpParams() 56 let params = new HttpParams()
53 params = this.restService.addRestGetParams(params, pagination) 57 params = this.restService.addRestGetParams(params, pagination)
58 params = params.set('withStats', withStats + '')
54 59
55 const url = AccountService.BASE_ACCOUNT_URL + account.nameWithHost + '/video-channels' 60 const url = AccountService.BASE_ACCOUNT_URL + account.nameWithHost + '/video-channels'
56 return this.authHttp.get<ResultList<VideoChannelServer>>(url, { params }) 61 return this.authHttp.get<ResultList<VideoChannelServer>>(url, { params })
diff --git a/server/controllers/api/accounts.ts b/server/controllers/api/accounts.ts
index f354ccf24..f8d2bad8b 100644
--- a/server/controllers/api/accounts.ts
+++ b/server/controllers/api/accounts.ts
@@ -17,7 +17,8 @@ import {
17 accountsSortValidator, 17 accountsSortValidator,
18 ensureAuthUserOwnsAccountValidator, 18 ensureAuthUserOwnsAccountValidator,
19 videoChannelsSortValidator, 19 videoChannelsSortValidator,
20 videosSortValidator 20 videosSortValidator,
21 videoChannelStatsValidator
21} from '../../middlewares/validators' 22} from '../../middlewares/validators'
22import { AccountModel } from '../../models/account/account' 23import { AccountModel } from '../../models/account/account'
23import { AccountVideoRateModel } from '../../models/account/account-video-rate' 24import { AccountVideoRateModel } from '../../models/account/account-video-rate'
@@ -56,6 +57,7 @@ accountsRouter.get('/:accountName/videos',
56 57
57accountsRouter.get('/:accountName/video-channels', 58accountsRouter.get('/:accountName/video-channels',
58 asyncMiddleware(accountNameWithHostGetValidator), 59 asyncMiddleware(accountNameWithHostGetValidator),
60 videoChannelStatsValidator,
59 paginationValidator, 61 paginationValidator,
60 videoChannelsSortValidator, 62 videoChannelsSortValidator,
61 setDefaultSort, 63 setDefaultSort,
@@ -116,7 +118,8 @@ async function listAccountChannels (req: express.Request, res: express.Response)
116 accountId: res.locals.account.id, 118 accountId: res.locals.account.id,
117 start: req.query.start, 119 start: req.query.start,
118 count: req.query.count, 120 count: req.query.count,
119 sort: req.query.sort 121 sort: req.query.sort,
122 withStats: req.query.withStats
120 } 123 }
121 124
122 const resultList = await VideoChannelModel.listByAccount(options) 125 const resultList = await VideoChannelModel.listByAccount(options)
diff --git a/server/middlewares/validators/videos/video-channels.ts b/server/middlewares/validators/videos/video-channels.ts
index ebce14714..882fb2b84 100644
--- a/server/middlewares/validators/videos/video-channels.ts
+++ b/server/middlewares/validators/videos/video-channels.ts
@@ -1,5 +1,5 @@
1import * as express from 'express' 1import * as express from 'express'
2import { body, param } from 'express-validator' 2import { body, param, query } from 'express-validator'
3import { UserRight } from '../../../../shared' 3import { UserRight } from '../../../../shared'
4import { 4import {
5 isVideoChannelDescriptionValid, 5 isVideoChannelDescriptionValid,
@@ -128,6 +128,15 @@ const localVideoChannelValidator = [
128 } 128 }
129] 129]
130 130
131const videoChannelStatsValidator = [
132 query('withStats').optional().isBoolean().withMessage('Should have a valid stats flag'),
133
134 (req: express.Request, res: express.Response, next: express.NextFunction) => {
135 if (areValidationErrors(req, res)) return
136 return next()
137 }
138]
139
131// --------------------------------------------------------------------------- 140// ---------------------------------------------------------------------------
132 141
133export { 142export {
@@ -135,7 +144,8 @@ export {
135 videoChannelsUpdateValidator, 144 videoChannelsUpdateValidator,
136 videoChannelsRemoveValidator, 145 videoChannelsRemoveValidator,
137 videoChannelsNameWithHostValidator, 146 videoChannelsNameWithHostValidator,
138 localVideoChannelValidator 147 localVideoChannelValidator,
148 videoChannelStatsValidator
139} 149}
140 150
141// --------------------------------------------------------------------------- 151// ---------------------------------------------------------------------------
diff --git a/server/models/video/video-channel.ts b/server/models/video/video-channel.ts
index 128915af3..5e6541837 100644
--- a/server/models/video/video-channel.ts
+++ b/server/models/video/video-channel.ts
@@ -412,7 +412,6 @@ export class VideoChannelModel extends Model<VideoChannelModel> {
412 412
413 const scopes: string | ScopeOptions | (string | ScopeOptions)[] = [ ScopeNames.WITH_ACTOR ] 413 const scopes: string | ScopeOptions | (string | ScopeOptions)[] = [ ScopeNames.WITH_ACTOR ]
414 414
415 options.withStats = true // TODO: remove beyond after initial tests
416 if (options.withStats) { 415 if (options.withStats) {
417 scopes.push({ 416 scopes.push({
418 method: [ ScopeNames.WITH_STATS, { daysPrior: 30 } as AvailableWithStatsOptions ] 417 method: [ ScopeNames.WITH_STATS, { daysPrior: 30 } as AvailableWithStatsOptions ]