1
0
Fork 0

Update videos api list for account

This commit is contained in:
Chocobozzz 2018-03-12 11:06:15 +01:00
parent 416c359cb5
commit b64c950a1c
No known key found for this signature in database
GPG key ID: 583A612D890159BE
13 changed files with 135 additions and 92 deletions

View file

@ -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) {

View file

@ -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<VideoModel> {
}
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<VideoModel> {
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<VideoModel> {
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
}
}
}

View file

@ -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,

View file

@ -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' ],

View file

@ -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 () {

View file

@ -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,

View file

@ -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')

View file

@ -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

View file

@ -24,7 +24,9 @@ interface ServerInfo {
id: number
uuid: string
name: string
accountName: string
account: {
name: string
}
}
remoteVideo?: {

View file

@ -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')

View file

@ -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 {

View file

@ -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:

View file

@ -1,6 +1,6 @@
[Unit]
Description=PeerTube daemon
After=network.target
After=network.target postgresql.service
[Service]
Type=simple