Change api output for videos

This commit is contained in:
Chocobozzz 2016-03-18 16:28:09 +01:00
parent f0f5567b69
commit 2df82d42cb
8 changed files with 87 additions and 29 deletions

View File

@ -1,8 +1,8 @@
<div *ngFor="#video of videos" class="video"> <div *ngFor="#video of videos" class="video">
<div> <div>
<a [routerLink]="['VideosWatch', { id: video._id }]" class="video_name">{{ video.name }}</a> <a [routerLink]="['VideosWatch', { id: video.id }]" class="video_name">{{ video.name }}</a>
<span class="video_pod_url">{{ video.podUrl }}</span> <span class="video_pod_url">{{ video.podUrl }}</span>
<span *ngIf="video.namePath !== null" (click)="removeVideo(video._id)" class="video_remove glyphicon glyphicon-remove"></span> <span *ngIf="video.isLocal === true" (click)="removeVideo(video.id)" class="video_remove glyphicon glyphicon-remove"></span>
</div> </div>
<div class="video_description"> <div class="video_description">

View File

@ -1,6 +1,8 @@
export interface Video { export interface Video {
_id: string; id: string;
name: string; name: string;
description: string; description: string;
magnetUri: string; magnetUri: string;
podUrl: string;
isLocal: boolean;
} }

View File

@ -83,14 +83,15 @@ function addVideo (req, res, next) {
} }
function getVideos (req, res, next) { function getVideos (req, res, next) {
Videos.get(req.params.id, function (err, video) { Videos.get(req.params.id, function (err, video_obj) {
if (err) return next(err) if (err) return next(err)
if (video === null) { const state = videos.getVideoState(video_obj)
res.type('json').status(204).end() if (state.exist === false) {
return res.type('json').status(204).end()
} }
res.json(video) res.json(getFormatedVideo(video_obj))
}) })
} }
@ -98,7 +99,7 @@ function listVideos (req, res, next) {
Videos.list(function (err, videos_list) { Videos.list(function (err, videos_list) {
if (err) return next(err) if (err) return next(err)
res.json(videos_list) res.json(getFormatedVideos(videos_list))
}) })
} }
@ -127,12 +128,35 @@ function searchVideos (req, res, next) {
Videos.search(req.params.name, function (err, videos_list) { Videos.search(req.params.name, function (err, videos_list) {
if (err) return next(err) if (err) return next(err)
res.json(videos_list) res.json(getFormatedVideos(videos_list))
}) })
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
function getFormatedVideo (video_obj) {
const formated_video = {
id: video_obj._id,
name: video_obj.name,
description: video_obj.description,
podUrl: video_obj.podUrl,
isLocal: videos.getVideoState(video_obj).owned,
magnetUri: video_obj.magnetUri
}
return formated_video
}
function getFormatedVideos (videos_obj) {
const formated_videos = []
videos_obj.forEach(function (video_obj) {
formated_videos.push(getFormatedVideo(video_obj))
})
return formated_videos
}
// Maybe the torrent is not seeded, but we catch the error to don't stop the removing process // Maybe the torrent is not seeded, but we catch the error to don't stop the removing process
function removeTorrent (magnetUri, callback) { function removeTorrent (magnetUri, callback) {
try { try {

View File

@ -16,14 +16,14 @@ const videos = {
seedAllExisting: seedAllExisting seedAllExisting: seedAllExisting
} }
function getVideoState (video, callback) { function getVideoState (video) {
const exist = (video !== null) const exist = (video !== null)
let owned = false let owned = false
if (exist === true) { if (exist === true) {
owned = (video.namePath !== null) owned = (video.namePath !== null)
} }
return callback({ exist: exist, owned: owned }) return { exist: exist, owned: owned }
} }
function seed (path, callback) { function seed (path, callback) {

View File

@ -35,13 +35,12 @@ function videosGet (req, res, next) {
res.sendStatus(500) res.sendStatus(500)
} }
videos.getVideoState(video, function (state) { const state = videos.getVideoState(video)
if (state.exist === false) return res.status(404).send('Video not found') if (state.exist === false) return res.status(404).send('Video not found')
next() next()
}) })
}) })
})
} }
function videosRemove (req, res, next) { function videosRemove (req, res, next) {
@ -56,14 +55,13 @@ function videosRemove (req, res, next) {
res.sendStatus(500) res.sendStatus(500)
} }
videos.getVideoState(video, function (state) { const state = videos.getVideoState(video)
if (state.exist === false) return res.status(404).send('Video not found') if (state.exist === false) return res.status(404).send('Video not found')
else if (state.owned === false) return res.status(403).send('Cannot remove video of another pod') else if (state.owned === false) return res.status(403).send('Cannot remove video of another pod')
next() next()
}) })
}) })
})
} }
function videosSearch (req, res, next) { function videosSearch (req, res, next) {

View File

@ -205,8 +205,8 @@ describe('Test multiple pods', function () {
if (err) throw err if (err) throw err
const video = res.body[0] const video = res.body[0]
to_remove.push(res.body[2]._id) to_remove.push(res.body[2].id)
to_remove.push(res.body[3]._id) to_remove.push(res.body[3].id)
webtorrent.add(video.magnetUri, function (torrent) { webtorrent.add(video.magnetUri, function (torrent) {
expect(torrent.files).to.exist expect(torrent.files).to.exist
@ -300,11 +300,11 @@ describe('Test multiple pods', function () {
const videos = res.body const videos = res.body
expect(videos).to.be.an('array') expect(videos).to.be.an('array')
expect(videos.length).to.equal(2) expect(videos.length).to.equal(2)
expect(videos[0]._id).not.to.equal(videos[1]._id) expect(videos[0].id).not.to.equal(videos[1].id)
expect(videos[0]._id).not.to.equal(to_remove[0]) expect(videos[0].id).not.to.equal(to_remove[0])
expect(videos[1]._id).not.to.equal(to_remove[0]) expect(videos[1].id).not.to.equal(to_remove[0])
expect(videos[0]._id).not.to.equal(to_remove[1]) expect(videos[0].id).not.to.equal(to_remove[1])
expect(videos[1]._id).not.to.equal(to_remove[1]) expect(videos[1].id).not.to.equal(to_remove[1])
callback() callback()
}) })

View File

@ -68,7 +68,30 @@ describe('Test a single pod', function () {
expect(video.podUrl).to.equal('http://localhost:9001') expect(video.podUrl).to.equal('http://localhost:9001')
expect(video.magnetUri).to.exist expect(video.magnetUri).to.exist
video_id = video._id video_id = video.id
webtorrent.add(video.magnetUri, function (torrent) {
expect(torrent.files).to.exist
expect(torrent.files.length).to.equal(1)
expect(torrent.files[0].path).to.exist.and.to.not.equal('')
done()
})
})
})
it('Should get the video', function (done) {
// Yes, this could be long
this.timeout(60000)
utils.getVideo(url, video_id, function (err, res) {
if (err) throw err
const video = res.body
expect(video.name).to.equal('my super name')
expect(video.description).to.equal('my super description')
expect(video.podUrl).to.equal('http://localhost:9001')
expect(video.magnetUri).to.exist
webtorrent.add(video.magnetUri, function (torrent) { webtorrent.add(video.magnetUri, function (torrent) {
expect(torrent.files).to.exist expect(torrent.files).to.exist
@ -91,7 +114,6 @@ describe('Test a single pod', function () {
expect(video.name).to.equal('my super name') expect(video.name).to.equal('my super name')
expect(video.description).to.equal('my super description') expect(video.description).to.equal('my super description')
expect(video.podUrl).to.equal('http://localhost:9001') expect(video.podUrl).to.equal('http://localhost:9001')
expect(video.magnetUri).to.exist
done() done()
}) })

View File

@ -9,6 +9,7 @@ const request = require('supertest')
const testUtils = { const testUtils = {
flushTests: flushTests, flushTests: flushTests,
getFriendsList: getFriendsList, getFriendsList: getFriendsList,
getVideo: getVideo,
getVideosList: getVideosList, getVideosList: getVideosList,
makeFriends: makeFriends, makeFriends: makeFriends,
quitFriends: quitFriends, quitFriends: quitFriends,
@ -36,6 +37,17 @@ function getFriendsList (url, end) {
.end(end) .end(end)
} }
function getVideo (url, id, end) {
const path = '/api/v1/videos/' + id
request(url)
.get(path)
.set('Accept', 'application/json')
.expect(200)
.expect('Content-Type', /json/)
.end(end)
}
function getVideosList (url, end) { function getVideosList (url, end) {
const path = '/api/v1/videos' const path = '/api/v1/videos'