From b64c950a1cb37da880fc14e8535f438c78b5b7f7 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 12 Mar 2018 11:06:15 +0100 Subject: [PATCH] Update videos api list for account --- client/src/app/shared/video/video.model.ts | 16 +++-- server/models/video/video.ts | 32 +++++---- server/tests/api/server/follows.ts | 6 +- server/tests/api/server/handle-down.ts | 6 +- server/tests/api/users/users.ts | 4 +- server/tests/api/videos/multiple-servers.ts | 73 ++++++++++++++++----- server/tests/api/videos/services.ts | 4 +- server/tests/api/videos/single-server.ts | 42 +++--------- server/tests/utils/server/servers.ts | 4 +- server/tests/utils/videos/videos.ts | 16 +++-- shared/models/videos/video.model.ts | 11 +++- support/doc/api/openapi.yaml | 11 ++-- support/systemd/peertube.service | 2 +- 13 files changed, 135 insertions(+), 92 deletions(-) diff --git a/client/src/app/shared/video/video.model.ts b/client/src/app/shared/video/video.model.ts index 79351ba2a..8e46ce44b 100644 --- a/client/src/app/shared/video/video.model.ts +++ b/client/src/app/shared/video/video.model.ts @@ -1,10 +1,10 @@ import { Account } from '@app/shared/account/account.model' import { User } from '../' import { Video as VideoServerModel } from '../../../../../shared' +import { Avatar } from '../../../../../shared/models/avatars/avatar.model' import { getAbsoluteAPIUrl } from '../misc/utils' export class Video implements VideoServerModel { - accountName: string by: string createdAt: Date updatedAt: Date @@ -32,7 +32,14 @@ export class Video implements VideoServerModel { likes: number dislikes: number nsfw: boolean - account: Account + + account: { + name: string + displayName: string + url: string + host: string + avatar: Avatar + } private static createDurationString (duration: number) { const minutes = Math.floor(duration / 60) @@ -46,7 +53,6 @@ export class Video implements VideoServerModel { constructor (hash: VideoServerModel) { const absoluteAPIUrl = getAbsoluteAPIUrl() - this.accountName = hash.accountName this.createdAt = new Date(hash.createdAt.toString()) this.categoryLabel = hash.categoryLabel this.category = hash.category @@ -61,7 +67,6 @@ export class Video implements VideoServerModel { this.uuid = hash.uuid this.isLocal = hash.isLocal this.name = hash.name - this.serverHost = hash.serverHost this.thumbnailPath = hash.thumbnailPath this.thumbnailUrl = absoluteAPIUrl + hash.thumbnailPath this.previewPath = hash.previewPath @@ -72,8 +77,9 @@ export class Video implements VideoServerModel { this.likes = hash.likes this.dislikes = hash.dislikes this.nsfw = hash.nsfw + this.account = hash.account - this.by = Account.CREATE_BY_STRING(hash.accountName, hash.serverHost) + this.by = Account.CREATE_BY_STRING(hash.account.name, hash.account.host) } isVideoNSFWForUser (user: User) { diff --git a/server/models/video/video.ts b/server/models/video/video.ts index 1b9d68073..0e5dd0d2f 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts @@ -40,7 +40,8 @@ import { isVideoLanguageValid, isVideoLicenceValid, isVideoNameValid, - isVideoPrivacyValid, isVideoSupportValid + isVideoPrivacyValid, + isVideoSupportValid } from '../../helpers/custom-validators/videos' import { generateImageFromVideoFile, getVideoFileResolution, transcode } from '../../helpers/ffmpeg-utils' import { logger } from '../../helpers/logger' @@ -125,13 +126,18 @@ enum ScopeNames { required: true, include: [ { - attributes: [ 'serverId' ], + attributes: [ 'preferredUsername', 'url', 'serverId' ], model: ActorModel.unscoped(), required: true, include: [ { attributes: [ 'host' ], - model: ServerModel.unscoped() + model: ServerModel.unscoped(), + required: false + }, + { + model: AvatarModel.unscoped(), + required: false } ] } @@ -872,14 +878,7 @@ export class VideoModel extends Model { } toFormattedJSON (): Video { - let serverHost - - if (this.VideoChannel.Account.Actor.Server) { - serverHost = this.VideoChannel.Account.Actor.Server.host - } else { - // It means it's our video - serverHost = CONFIG.WEBSERVER.HOST - } + const formattedAccount = this.VideoChannel.Account.toFormattedJSON() return { id: this.id, @@ -893,9 +892,7 @@ export class VideoModel extends Model { languageLabel: this.getLanguageLabel(), nsfw: this.nsfw, description: this.getTruncatedDescription(), - serverHost, isLocal: this.isOwned(), - accountName: this.VideoChannel.Account.name, duration: this.duration, views: this.views, likes: this.likes, @@ -904,7 +901,14 @@ export class VideoModel extends Model { previewPath: this.getPreviewPath(), embedPath: this.getEmbedPath(), createdAt: this.createdAt, - updatedAt: this.updatedAt + updatedAt: this.updatedAt, + account: { + name: formattedAccount.name, + displayName: formattedAccount.displayName, + url: formattedAccount.url, + host: formattedAccount.host, + avatar: formattedAccount.avatar + } } } diff --git a/server/tests/api/server/follows.ts b/server/tests/api/server/follows.ts index 19b843861..010b488d8 100644 --- a/server/tests/api/server/follows.ts +++ b/server/tests/api/server/follows.ts @@ -281,8 +281,10 @@ describe('Test follows', function () { nsfw: true, description: 'my super description', support: 'my super support text', - host: 'localhost:9003', - account: 'root', + account: { + name: 'root', + host: 'localhost:9003' + }, isLocal, commentsEnabled: true, duration: 5, diff --git a/server/tests/api/server/handle-down.ts b/server/tests/api/server/handle-down.ts index 84153b097..f5ff3e9e5 100644 --- a/server/tests/api/server/handle-down.ts +++ b/server/tests/api/server/handle-down.ts @@ -53,8 +53,10 @@ describe('Test handle downs', function () { nsfw: true, description: 'my super description for server 1', support: 'my super support text for server 1', - host: 'localhost:9001', - account: 'root', + account: { + name: 'root', + host: 'localhost:9001' + }, isLocal: false, duration: 10, tags: [ 'tag1p1', 'tag2p1' ], diff --git a/server/tests/api/users/users.ts b/server/tests/api/users/users.ts index c650a74f5..b6ab4f660 100644 --- a/server/tests/api/users/users.ts +++ b/server/tests/api/users/users.ts @@ -94,7 +94,7 @@ describe('Test users', function () { const res = await getVideosList(server.url) const video = res.body.data[ 0 ] - expect(video.accountName).to.equal('root') + expect(video.account.name).to.equal('root') videoId = video.id }) @@ -432,7 +432,7 @@ describe('Test users', function () { expect(res.body.total).to.equal(1) const video = res.body.data[ 0 ] - expect(video.accountName).to.equal('root') + expect(video.account.name).to.equal('root') }) it('Should register a new user', async function () { diff --git a/server/tests/api/videos/multiple-servers.ts b/server/tests/api/videos/multiple-servers.ts index 27c4c30b8..3f6b82c50 100644 --- a/server/tests/api/videos/multiple-servers.ts +++ b/server/tests/api/videos/multiple-servers.ts @@ -8,13 +8,35 @@ import { VideoPrivacy } from '../../../../shared/models/videos' import { VideoComment, VideoCommentThreadTree } from '../../../../shared/models/videos/video-comment.model' import { - addVideoChannel, checkVideoFilesWereRemoved, completeVideoCheck, createUser, dateIsValid, doubleFollow, flushAndRunMultipleServers, - flushTests, getVideo, - getVideoChannelsList, getVideosList, killallServers, rateVideo, removeVideo, ServerInfo, setAccessTokensToServers, testImage, - updateVideo, uploadVideo, userLogin, viewVideo, wait, webtorrentAdd + addVideoChannel, + checkVideoFilesWereRemoved, + completeVideoCheck, + createUser, + dateIsValid, + doubleFollow, + flushAndRunMultipleServers, + flushTests, + getVideo, + getVideoChannelsList, + getVideosList, + killallServers, + rateVideo, + removeVideo, + ServerInfo, + setAccessTokensToServers, + testImage, + updateVideo, + uploadVideo, + userLogin, + viewVideo, + wait, + webtorrentAdd } from '../../utils' import { - addVideoCommentReply, addVideoCommentThread, deleteVideoComment, getVideoCommentThreads, + addVideoCommentReply, + addVideoCommentThread, + deleteVideoComment, + getVideoCommentThreads, getVideoThreadComments } from '../../utils/videos/video-comments' @@ -90,8 +112,10 @@ describe('Test multiple servers', function () { nsfw: true, description: 'my super description for server 1', support: 'my super support text for server 1', - host: 'localhost:9001', - account: 'root', + account: { + name: 'root', + host: 'localhost:9001' + }, isLocal, duration: 10, tags: [ 'tag1p1', 'tag2p1' ], @@ -160,8 +184,10 @@ describe('Test multiple servers', function () { nsfw: true, description: 'my super description for server 2', support: 'my super support text for server 2', - host: 'localhost:9002', - account: 'user1', + account: { + name: 'user1', + host: 'localhost:9002' + }, isLocal, commentsEnabled: true, duration: 5, @@ -264,8 +290,10 @@ describe('Test multiple servers', function () { nsfw: true, description: 'my super description for server 3', support: 'my super support text for server 3', - host: 'localhost:9003', - account: 'root', + account: { + name: 'root', + host: 'localhost:9003' + }, isLocal, duration: 5, commentsEnabled: true, @@ -294,8 +322,10 @@ describe('Test multiple servers', function () { nsfw: false, description: 'my super description for server 3-2', support: 'my super support text for server 3-2', - host: 'localhost:9003', - account: 'root', + account: { + name: 'root', + host: 'localhost:9003' + }, commentsEnabled: true, isLocal, duration: 5, @@ -570,8 +600,10 @@ describe('Test multiple servers', function () { nsfw: true, description: 'my super description updated', support: 'my super support text updated', - host: 'localhost:9003', - account: 'root', + account: { + name: 'root', + host: 'localhost:9003' + }, isLocal, duration: 5, commentsEnabled: true, @@ -648,7 +680,10 @@ describe('Test multiple servers', function () { expect(baseVideo.licence).to.equal(video.licence) expect(baseVideo.category).to.equal(video.category) expect(baseVideo.nsfw).to.equal(video.nsfw) - expect(baseVideo.accountName).to.equal(video.accountName) + expect(baseVideo.account.name).to.equal(video.account.name) + expect(baseVideo.account.displayName).to.equal(video.account.displayName) + expect(baseVideo.account.url).to.equal(video.account.url) + expect(baseVideo.account.host).to.equal(video.account.host) expect(baseVideo.tags).to.deep.equal(video.tags) } }) @@ -859,8 +894,10 @@ describe('Test multiple servers', function () { nsfw: false, description: null, support: null, - host: 'localhost:9002', - account: 'root', + account: { + name: 'root', + host: 'localhost:9002' + }, isLocal, duration: 5, commentsEnabled: true, diff --git a/server/tests/api/videos/services.ts b/server/tests/api/videos/services.ts index e456184cf..45b4a1a81 100644 --- a/server/tests/api/videos/services.ts +++ b/server/tests/api/videos/services.ts @@ -38,7 +38,7 @@ describe('Test services', function () { expect(res.body.html).to.equal(expectedHtml) expect(res.body.title).to.equal(server.video.name) - expect(res.body.author_name).to.equal(server.video.accountName) + expect(res.body.author_name).to.equal(server.video.account.name) expect(res.body.width).to.equal(560) expect(res.body.height).to.equal(315) expect(res.body.thumbnail_url).to.equal(expectedThumbnailUrl) @@ -58,7 +58,7 @@ describe('Test services', function () { expect(res.body.html).to.equal(expectedHtml) expect(res.body.title).to.equal(server.video.name) - expect(res.body.author_name).to.equal(server.video.accountName) + expect(res.body.author_name).to.equal(server.video.account.name) expect(res.body.height).to.equal(50) expect(res.body.width).to.equal(50) expect(res.body).to.not.have.property('thumbnail_url') diff --git a/server/tests/api/videos/single-server.ts b/server/tests/api/videos/single-server.ts index cf2721838..7c4bdf8bc 100644 --- a/server/tests/api/videos/single-server.ts +++ b/server/tests/api/videos/single-server.ts @@ -27,8 +27,10 @@ describe('Test a single server', function () { nsfw: true, description: 'my super description', support: 'my super support text', - host: 'localhost:9001', - account: 'root', + account: { + name: 'root', + host: 'localhost:9001' + }, isLocal: true, duration: 5, tags: [ 'tag1', 'tag2', 'tag3' ], @@ -56,8 +58,10 @@ describe('Test a single server', function () { nsfw: false, description: 'my super description updated', support: 'my super support text updated', - host: 'localhost:9001', - account: 'root', + account: { + name: 'root', + host: 'localhost:9001' + }, isLocal: true, tags: [ 'tagup1', 'tagup2' ], privacy: VideoPrivacy.PUBLIC, @@ -204,32 +208,6 @@ describe('Test a single server', function () { await completeVideoCheck(server.url, video, getCheckAttributes) }) - // Not implemented yet - // it('Should search the video by serverHost', async function () { - // const res = await videosUtils.searchVideo(server.url, '9001', 'host') - - // expect(res.body.total).to.equal(1) - // expect(res.body.data).to.be.an('array') - // expect(res.body.data.length).to.equal(1) - - // const video = res.body.data[0] - // expect(video.name).to.equal('my super name') - // expect(video.description).to.equal('my super description') - // expect(video.serverHost).to.equal('localhost:9001') - // expect(video.author).to.equal('root') - // expect(video.isLocal).to.be.true - // expect(video.tags).to.deep.equal([ 'tag1', 'tag2', 'tag3' ]) - // expect(dateIsValid(video.createdAt)).to.be.true - // expect(dateIsValid(video.updatedAt)).to.be.true - - // const test = await testVideoImage(server.url, 'video_short.webm', video.thumbnailPath) - // expect(test).to.equal(true) - - // done() - // }) - // }) - // }) - // Not implemented yet // it('Should search the video by tag', async function () { // const res = await searchVideo(server.url, 'tag1') @@ -248,8 +226,8 @@ describe('Test a single server', function () { // expect(video.languageLabel).to.equal('Mandarin') // expect(video.nsfw).to.be.ok // expect(video.description).to.equal('my super description') - // expect(video.serverHost).to.equal('localhost:9001') - // expect(video.accountName).to.equal('root') + // expect(video.account.name).to.equal('root') + // expect(video.account.host).to.equal('localhost:9001') // expect(video.isLocal).to.be.true // expect(video.tags).to.deep.equal([ 'tag1', 'tag2', 'tag3' ]) // expect(dateIsValid(video.createdAt)).to.be.true diff --git a/server/tests/utils/server/servers.ts b/server/tests/utils/server/servers.ts index 878efe91a..8373c73ab 100644 --- a/server/tests/utils/server/servers.ts +++ b/server/tests/utils/server/servers.ts @@ -24,7 +24,9 @@ interface ServerInfo { id: number uuid: string name: string - accountName: string + account: { + name: string + } } remoteVideo?: { diff --git a/server/tests/utils/videos/videos.ts b/server/tests/utils/videos/videos.ts index a06078d40..4b57f24b5 100644 --- a/server/tests/utils/videos/videos.ts +++ b/server/tests/utils/videos/videos.ts @@ -368,8 +368,10 @@ async function completeVideoCheck ( commentsEnabled: boolean description: string support: string - host: string - account: string + account: { + name: string + host: string + } isLocal: boolean, tags: string[], privacy: number, @@ -402,8 +404,8 @@ async function completeVideoCheck ( expect(video.languageLabel).to.equal(VIDEO_LANGUAGES[attributes.language] || 'Unknown') expect(video.nsfw).to.equal(attributes.nsfw) expect(video.description).to.equal(attributes.description) - expect(video.serverHost).to.equal(attributes.host) - expect(video.accountName).to.equal(attributes.account) + expect(video.account.host).to.equal(attributes.account.host) + expect(video.account.name).to.equal(attributes.account.name) expect(video.likes).to.equal(attributes.likes) expect(video.dislikes).to.equal(attributes.dislikes) expect(video.isLocal).to.equal(attributes.isLocal) @@ -433,12 +435,12 @@ async function completeVideoCheck ( let extension = extname(attributes.fixture) // Transcoding enabled on server 2, extension will always be .mp4 - if (attributes.host === 'localhost:9002') extension = '.mp4' + if (attributes.account.host === 'localhost:9002') extension = '.mp4' const magnetUri = file.magnetUri expect(file.magnetUri).to.have.lengthOf.above(2) - expect(file.torrentUrl).to.equal(`http://${attributes.host}/static/torrents/${videoDetails.uuid}-${file.resolution}.torrent`) - expect(file.fileUrl).to.equal(`http://${attributes.host}/static/webseed/${videoDetails.uuid}-${file.resolution}${extension}`) + expect(file.torrentUrl).to.equal(`http://${attributes.account.host}/static/torrents/${videoDetails.uuid}-${file.resolution}.torrent`) + expect(file.fileUrl).to.equal(`http://${attributes.account.host}/static/webseed/${videoDetails.uuid}-${file.resolution}${extension}`) expect(file.resolution).to.equal(attributeFile.resolution) expect(file.resolutionLabel).to.equal(attributeFile.resolution + 'p') diff --git a/shared/models/videos/video.model.ts b/shared/models/videos/video.model.ts index deb81da44..707cd42a7 100644 --- a/shared/models/videos/video.model.ts +++ b/shared/models/videos/video.model.ts @@ -1,4 +1,5 @@ import { Account } from '../actors' +import { Avatar } from '../avatars/avatar.model' import { VideoChannel } from './video-channel.model' import { VideoPrivacy } from './video-privacy.enum' @@ -14,7 +15,6 @@ export interface VideoFile { export interface Video { id: number uuid: string - accountName: string createdAt: Date | string updatedAt: Date | string categoryLabel: string @@ -27,7 +27,6 @@ export interface Video { duration: number isLocal: boolean name: string - serverHost: string thumbnailPath: string previewPath: string embedPath: string @@ -35,6 +34,14 @@ export interface Video { likes: number dislikes: number nsfw: boolean + + account: { + name: string + displayName: string + url: string + host: string + avatar: Avatar + } } export interface VideoDetails extends Video { diff --git a/support/doc/api/openapi.yaml b/support/doc/api/openapi.yaml index e8e593420..c67d8e477 100644 --- a/support/doc/api/openapi.yaml +++ b/support/doc/api/openapi.yaml @@ -1043,8 +1043,6 @@ definitions: type: number uuid: type: string - accountName: - type: string createdAt: type: string updatedAt: @@ -1069,8 +1067,6 @@ definitions: type: boolean name: type: string - serverHost: - type: string thumbnailPath: type: string previewPath: @@ -1085,6 +1081,13 @@ definitions: type: number nsfw: type: boolean + account: + name: string + displayName: string + url: string + host: string + avatar: + $ref: "#/definitions/Avatar" VideoAbuse: properties: id: diff --git a/support/systemd/peertube.service b/support/systemd/peertube.service index 047ce7e56..346738159 100644 --- a/support/systemd/peertube.service +++ b/support/systemd/peertube.service @@ -1,6 +1,6 @@ [Unit] Description=PeerTube daemon -After=network.target +After=network.target postgresql.service [Service] Type=simple -- 2.25.1