diff --git a/server/controllers/api/v1/videos.js b/server/controllers/api/v1/videos.js index e903cbcf4..f7aeea453 100644 --- a/server/controllers/api/v1/videos.js +++ b/server/controllers/api/v1/videos.js @@ -62,7 +62,7 @@ router.post('/', ) router.get('/:id', reqValidatorVideos.videosGet, - getVideos + getVideo ) router.delete('/:id', oAuth2.authenticate, @@ -165,7 +165,7 @@ function addVideo (req, res, next) { }) } -function getVideos (req, res, next) { +function getVideo (req, res, next) { Videos.get(req.params.id, function (err, videoObj) { if (err) return next(err) @@ -179,10 +179,10 @@ function getVideos (req, res, next) { } function listVideos (req, res, next) { - Videos.list(req.query.start, req.query.count, req.query.sort, function (err, videosList) { + Videos.list(req.query.start, req.query.count, req.query.sort, function (err, videosList, totalVideos) { if (err) return next(err) - res.json(getFormatedVideos(videosList)) + res.json(getFormatedVideos(videosList, totalVideos)) }) } @@ -237,10 +237,10 @@ function removeVideo (req, res, next) { } function searchVideos (req, res, next) { - Videos.search(req.params.name, req.query.start, req.query.count, req.query.sort, function (err, videosList) { + Videos.search(req.params.name, req.query.start, req.query.count, req.query.sort, function (err, videosList, totalVideos) { if (err) return next(err) - res.json(getFormatedVideos(videosList)) + res.json(getFormatedVideos(videosList, totalVideos)) }) } @@ -263,14 +263,17 @@ function getFormatedVideo (videoObj) { return formatedVideo } -function getFormatedVideos (videosObj) { +function getFormatedVideos (videosObj, totalVideos) { const formatedVideos = [] videosObj.forEach(function (videoObj) { formatedVideos.push(getFormatedVideo(videoObj)) }) - return formatedVideos + return { + total: totalVideos, + data: formatedVideos + } } // Maybe the torrent is not seeded, but we catch the error to don't stop the removing process diff --git a/server/models/videos.js b/server/models/videos.js index 9cac8edda..9521e63e3 100644 --- a/server/models/videos.js +++ b/server/models/videos.js @@ -1,5 +1,6 @@ 'use strict' +const async = require('async') const config = require('config') const mongoose = require('mongoose') @@ -81,15 +82,8 @@ function get (id, callback) { } function list (start, count, sort, callback) { - VideosDB.find({}).skip(start).limit(start + count).sort(sort) - .exec(function (err, videosList) { - if (err) { - logger.error('Cannot get the list of the videos.') - return callback(err) - } - - return callback(null, videosList) - }) + const query = {} + return findWithCount(query, start, count, sort, callback) } function listFromUrl (fromUrl, callback) { @@ -131,17 +125,29 @@ function removeByIds (ids, callback) { } function search (name, start, count, sort, callback) { - VideosDB.find({ name: new RegExp(name) }).skip(start).limit(start + count).sort(sort) - .exec(function (err, videos) { - if (err) { - logger.error('Cannot search the videos.') - return callback(err) - } - - return callback(null, videos) - }) + const query = { name: new RegExp(name) } + findWithCount(query, start, count, sort, callback) } // --------------------------------------------------------------------------- module.exports = Videos + +// --------------------------------------------------------------------------- + +function findWithCount (query, start, count, sort, callback) { + async.parallel([ + function (asyncCallback) { + VideosDB.find(query).skip(start).limit(start + count).sort(sort).exec(asyncCallback) + }, + function (asyncCallback) { + VideosDB.count(query, asyncCallback) + } + ], function (err, results) { + if (err) return callback(err) + + const videos = results[0] + const totalVideos = results[1] + return callback(null, videos, totalVideos) + }) +} diff --git a/server/tests/api/checkParams.js b/server/tests/api/checkParams.js index a109aba47..e02fd0da5 100644 --- a/server/tests/api/checkParams.js +++ b/server/tests/api/checkParams.js @@ -299,8 +299,8 @@ describe('Test parameters validator', function () { .end(function (err, res) { if (err) throw err - expect(res.body).to.be.an('array') - expect(res.body.length).to.equal(3) + expect(res.body.data).to.be.an('array') + expect(res.body.data.length).to.equal(3) done() }) diff --git a/server/tests/api/friendsAdvanced.js b/server/tests/api/friendsAdvanced.js index f3d5cd4a0..7b895b6b5 100644 --- a/server/tests/api/friendsAdvanced.js +++ b/server/tests/api/friendsAdvanced.js @@ -210,8 +210,10 @@ describe('Test advanced friends', function () { function (next) { getVideos(1, function (err, res) { if (err) throw err - expect(res.body).to.be.an('array') - expect(res.body.length).to.equal(2) + + const videos = res.body.data + expect(videos).to.be.an('array') + expect(videos.length).to.equal(2) next() }) @@ -221,8 +223,10 @@ describe('Test advanced friends', function () { getVideos(2, function (err, res) { if (err) throw err - expect(res.body).to.be.an('array') - expect(res.body.length).to.equal(3) + + const videos = res.body.data + expect(videos).to.be.an('array') + expect(videos.length).to.equal(3) done() }) } @@ -236,8 +240,9 @@ describe('Test advanced friends', function () { getVideos(1, function (err, res) { if (err) throw err - expect(res.body).to.be.an('array') - expect(res.body.length).to.equal(5) + const videos = res.body.data + expect(videos).to.be.an('array') + expect(videos.length).to.equal(5) done() }) diff --git a/server/tests/api/multiplePods.js b/server/tests/api/multiplePods.js index c31c18b02..dac6dd410 100644 --- a/server/tests/api/multiplePods.js +++ b/server/tests/api/multiplePods.js @@ -60,8 +60,9 @@ describe('Test multiple pods', function () { utils.getVideosList(server.url, function (err, res) { if (err) throw err - expect(res.body).to.be.an('array') - expect(res.body.length).to.equal(0) + const videos = res.body.data + expect(videos).to.be.an('array') + expect(videos.length).to.equal(0) callback() }) @@ -89,13 +90,13 @@ describe('Test multiple pods', function () { utils.getVideosList(server.url, function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data expect(videos).to.be.an('array') expect(videos.length).to.equal(1) const video = videos[0] expect(video.name).to.equal('my super name for pod 1') expect(video.description).to.equal('my super description for pod 1') - expect(video.podUrl).to.equal('http://localhost:9001') + expect(video.podUrl).to.equal('localhost:9001') expect(video.magnetUri).to.exist expect(video.duration).to.equal(10) expect(utils.dateIsValid(video.createdDate)).to.be.true @@ -145,13 +146,13 @@ describe('Test multiple pods', function () { utils.getVideosList(server.url, function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data expect(videos).to.be.an('array') expect(videos.length).to.equal(2) const video = videos[1] expect(video.name).to.equal('my super name for pod 2') expect(video.description).to.equal('my super description for pod 2') - expect(video.podUrl).to.equal('http://localhost:9002') + expect(video.podUrl).to.equal('localhost:9002') expect(video.magnetUri).to.exist expect(video.duration).to.equal(5) expect(utils.dateIsValid(video.createdDate)).to.be.true @@ -203,7 +204,7 @@ describe('Test multiple pods', function () { utils.getVideosList(server.url, function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data expect(videos).to.be.an('array') expect(videos.length).to.equal(4) @@ -220,14 +221,14 @@ describe('Test multiple pods', function () { expect(video1.name).to.equal('my super name for pod 3') expect(video1.description).to.equal('my super description for pod 3') - expect(video1.podUrl).to.equal('http://localhost:9003') + expect(video1.podUrl).to.equal('localhost:9003') expect(video1.magnetUri).to.exist expect(video1.duration).to.equal(5) expect(utils.dateIsValid(video1.createdDate)).to.be.true expect(video2.name).to.equal('my super name for pod 3-2') expect(video2.description).to.equal('my super description for pod 3-2') - expect(video2.podUrl).to.equal('http://localhost:9003') + expect(video2.podUrl).to.equal('localhost:9003') expect(video2.magnetUri).to.exist expect(video2.duration).to.equal(5) expect(utils.dateIsValid(video2.createdDate)).to.be.true @@ -273,9 +274,9 @@ describe('Test multiple pods', function () { utils.getVideosList(servers[2].url, function (err, res) { if (err) throw err - const video = res.body[0] - toRemove.push(res.body[2].id) - toRemove.push(res.body[3].id) + const video = res.body.data[0] + toRemove.push(res.body.data[2].id) + toRemove.push(res.body.data[3].id) webtorrent.add(video.magnetUri, function (torrent) { expect(torrent.files).to.exist @@ -294,7 +295,7 @@ describe('Test multiple pods', function () { utils.getVideosList(servers[0].url, function (err, res) { if (err) throw err - const video = res.body[1] + const video = res.body.data[1] webtorrent.add(video.magnetUri, function (torrent) { expect(torrent.files).to.exist @@ -313,7 +314,7 @@ describe('Test multiple pods', function () { utils.getVideosList(servers[1].url, function (err, res) { if (err) throw err - const video = res.body[2] + const video = res.body.data[2] webtorrent.add(video.magnetUri, function (torrent) { expect(torrent.files).to.exist @@ -332,7 +333,7 @@ describe('Test multiple pods', function () { utils.getVideosList(servers[0].url, function (err, res) { if (err) throw err - const video = res.body[3] + const video = res.body.data[3] webtorrent.add(video.magnetUri, function (torrent) { expect(torrent.files).to.exist @@ -366,7 +367,7 @@ describe('Test multiple pods', function () { utils.getVideosList(server.url, function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data expect(videos).to.be.an('array') expect(videos.length).to.equal(2) expect(videos[0].id).not.to.equal(videos[1].id) diff --git a/server/tests/api/singlePod.js b/server/tests/api/singlePod.js index 1a53ada3a..884a83032 100644 --- a/server/tests/api/singlePod.js +++ b/server/tests/api/singlePod.js @@ -47,8 +47,9 @@ describe('Test a single pod', function () { utils.getVideosList(server.url, function (err, res) { if (err) throw err - expect(res.body).to.be.an('array') - expect(res.body.length).to.equal(0) + expect(res.body.total).to.equal(0) + expect(res.body.data).to.be.an('array') + expect(res.body.data.length).to.equal(0) done() }) @@ -66,13 +67,14 @@ describe('Test a single pod', function () { utils.getVideosList(server.url, function (err, res) { if (err) throw err - expect(res.body).to.be.an('array') - expect(res.body.length).to.equal(1) + 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[0] + const video = res.body.data[0] 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.podUrl).to.equal('localhost:9001') expect(video.magnetUri).to.exist expect(video.author).to.equal('root') expect(video.isLocal).to.be.true @@ -106,7 +108,7 @@ describe('Test a single pod', function () { 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.podUrl).to.equal('localhost:9001') expect(video.magnetUri).to.exist expect(video.author).to.equal('root') expect(video.isLocal).to.be.true @@ -131,13 +133,14 @@ describe('Test a single pod', function () { utils.searchVideo(server.url, 'my', function (err, res) { if (err) throw err - expect(res.body).to.be.an('array') - expect(res.body.length).to.equal(1) + 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[0] + const video = res.body.data[0] 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.podUrl).to.equal('localhost:9001') expect(video.author).to.equal('root') expect(video.isLocal).to.be.true expect(utils.dateIsValid(video.createdDate)).to.be.true @@ -155,8 +158,9 @@ describe('Test a single pod', function () { utils.searchVideo(server.url, 'hello', function (err, res) { if (err) throw err - expect(res.body).to.be.an('array') - expect(res.body.length).to.equal(0) + expect(res.body.total).to.equal(0) + expect(res.body.data).to.be.an('array') + expect(res.body.data.length).to.equal(0) done() }) @@ -179,8 +183,9 @@ describe('Test a single pod', function () { utils.getVideosList(server.url, function (err, res) { if (err) throw err - expect(res.body).to.be.an('array') - expect(res.body.length).to.equal(0) + expect(res.body.total).to.equal(0) + expect(res.body.data).to.be.an('array') + expect(res.body.data.length).to.equal(0) done() }) @@ -201,7 +206,8 @@ describe('Test a single pod', function () { utils.getVideosList(server.url, function (err, res) { if (err) throw err - const videos = res.body + expect(res.body.total).to.equal(6) + const videos = res.body.data expect(videos).to.be.an('array') expect(videos.length).to.equal(6) @@ -221,7 +227,7 @@ describe('Test a single pod', function () { utils.getVideosList(server.url, function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data // For the next test videosListBase = videos @@ -243,7 +249,8 @@ describe('Test a single pod', function () { utils.getVideosListPagination(server.url, 0, 2, function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data + expect(res.body.total).to.equal(6) expect(videos.length).to.equal(2) expect(videos[0].name === videosListBase[0].name) expect(videos[1].name === videosListBase[1].name) @@ -256,7 +263,8 @@ describe('Test a single pod', function () { utils.getVideosListPagination(server.url, 2, 3, function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data + expect(res.body.total).to.equal(6) expect(videos.length).to.equal(4) expect(videos[0].name === videosListBase[2].name) expect(videos[1].name === videosListBase[3].name) @@ -270,7 +278,8 @@ describe('Test a single pod', function () { utils.getVideosListPagination(server.url, 5, 6, function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data + expect(res.body.total).to.equal(6) expect(videos.length).to.equal(1) expect(videos[0].name === videosListBase[5].name) @@ -282,7 +291,8 @@ describe('Test a single pod', function () { utils.searchVideoWithPagination(server.url, 'webm', 0, 1, function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data + expect(res.body.total).to.equal(4) expect(videos.length).to.equal(1) expect(videos[0].name === 'video_short.webm name') @@ -294,7 +304,8 @@ describe('Test a single pod', function () { utils.searchVideoWithPagination(server.url, 'webm', 2, 2, function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data + expect(res.body.total).to.equal(4) expect(videos.length).to.equal(2) expect(videos[0].name === 'video_short2.webm name') expect(videos[1].name === 'video_short3.webm name') @@ -307,7 +318,8 @@ describe('Test a single pod', function () { utils.searchVideoWithPagination(server.url, 'webm', 0, 15, function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data + expect(res.body.total).to.equal(4) expect(videos.length).to.equal(4) done() @@ -318,7 +330,8 @@ describe('Test a single pod', function () { utils.getVideosListSort(server.url, '-name', function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data + expect(res.body.total).to.equal(6) expect(videos.length).to.equal(6) expect(videos[5].name === 'video_short.mp4 name') expect(videos[4].name === 'video_short.ogv name') @@ -335,7 +348,8 @@ describe('Test a single pod', function () { utils.searchVideoWithSort(server.url, 'webm', 'name', function (err, res) { if (err) throw err - const videos = res.body + const videos = res.body.data + expect(res.body.total).to.equal(4) expect(videos.length).to.equal(4) expect(videos[0].name === 'video_short.webm name') diff --git a/server/tests/api/users.js b/server/tests/api/users.js index cb44d2611..9ab5083a0 100644 --- a/server/tests/api/users.js +++ b/server/tests/api/users.js @@ -108,7 +108,7 @@ describe('Test users', function () { utils.getVideosList(server.url, function (err, res) { if (err) throw err - const video = res.body[0] + const video = res.body.data[0] expect(video.author).to.equal('root') videoId = video.id