aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/models/video.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/models/video.js')
-rw-r--r--server/models/video.js48
1 files changed, 38 insertions, 10 deletions
diff --git a/server/models/video.js b/server/models/video.js
index 39eb28ed9..1addfa682 100644
--- a/server/models/video.js
+++ b/server/models/video.js
@@ -16,6 +16,7 @@ const logger = require('../helpers/logger')
16const friends = require('../lib/friends') 16const friends = require('../lib/friends')
17const modelUtils = require('./utils') 17const modelUtils = require('./utils')
18const customVideosValidators = require('../helpers/custom-validators').videos 18const customVideosValidators = require('../helpers/custom-validators').videos
19const db = require('../initializers/database')
19 20
20// --------------------------------------------------------------------------- 21// ---------------------------------------------------------------------------
21 22
@@ -201,7 +202,8 @@ module.exports = function (sequelize, DataTypes) {
201 isOwned, 202 isOwned,
202 toFormatedJSON, 203 toFormatedJSON,
203 toAddRemoteJSON, 204 toAddRemoteJSON,
204 toUpdateRemoteJSON 205 toUpdateRemoteJSON,
206 removeFromBlacklist
205 }, 207 },
206 hooks: { 208 hooks: {
207 beforeValidate, 209 beforeValidate,
@@ -528,6 +530,7 @@ function list (callback) {
528} 530}
529 531
530function listForApi (start, count, sort, callback) { 532function listForApi (start, count, sort, callback) {
533 // Exclude Blakclisted videos from the list
531 const query = { 534 const query = {
532 offset: start, 535 offset: start,
533 limit: count, 536 limit: count,
@@ -540,7 +543,12 @@ function listForApi (start, count, sort, callback) {
540 }, 543 },
541 544
542 this.sequelize.models.Tag 545 this.sequelize.models.Tag
543 ] 546 ],
547 where: {
548 id: { $notIn: this.sequelize.literal(
549 '(SELECT "BlacklistedVideos"."videoId" FROM "BlacklistedVideos")'
550 )}
551 }
544 } 552 }
545 553
546 return this.findAndCountAll(query).asCallback(function (err, result) { 554 return this.findAndCountAll(query).asCallback(function (err, result) {
@@ -648,7 +656,11 @@ function searchAndPopulateAuthorAndPodAndTags (value, field, start, count, sort,
648 } 656 }
649 657
650 const query = { 658 const query = {
651 where: {}, 659 where: {
660 id: { $notIn: this.sequelize.literal(
661 '(SELECT "BlacklistedVideos"."videoId" FROM "BlacklistedVideos")'
662 )}
663 },
652 offset: start, 664 offset: start,
653 limit: count, 665 limit: count,
654 distinct: true, // For the count, a video can have many tags 666 distinct: true, // For the count, a video can have many tags
@@ -661,13 +673,9 @@ function searchAndPopulateAuthorAndPodAndTags (value, field, start, count, sort,
661 query.where.infoHash = infoHash 673 query.where.infoHash = infoHash
662 } else if (field === 'tags') { 674 } else if (field === 'tags') {
663 const escapedValue = this.sequelize.escape('%' + value + '%') 675 const escapedValue = this.sequelize.escape('%' + value + '%')
664 query.where = { 676 query.where.id.$in = this.sequelize.literal(
665 id: { 677 '(SELECT "VideoTags"."videoId" FROM "Tags" INNER JOIN "VideoTags" ON "Tags"."id" = "VideoTags"."tagId" WHERE name LIKE ' + escapedValue + ')'
666 $in: this.sequelize.literal( 678 )
667 '(SELECT "VideoTags"."videoId" FROM "Tags" INNER JOIN "VideoTags" ON "Tags"."id" = "VideoTags"."tagId" WHERE name LIKE ' + escapedValue + ')'
668 )
669 }
670 }
671 } else if (field === 'host') { 679 } else if (field === 'host') {
672 // FIXME: Include our pod? (not stored in the database) 680 // FIXME: Include our pod? (not stored in the database)
673 podInclude.where = { 681 podInclude.where = {
@@ -755,3 +763,23 @@ function generateImage (video, videoPath, folder, imageName, size, callback) {
755 }) 763 })
756 .thumbnail(options) 764 .thumbnail(options)
757} 765}
766
767function removeFromBlacklist (video, callback) {
768 // Find the blacklisted video
769 db.BlacklistedVideo.loadByVideoId(video.id, function (err, video) {
770 // If an error occured, stop here
771 if (err) {
772 logger.error('Error when fetching video from blacklist.', { error: err })
773
774 return callback(err)
775 }
776
777 // If we found the video, remove it from the blacklist
778 if (video) {
779 video.destroy().asCallback(callback)
780 } else {
781 // If haven't found it, simply ignore it and do nothing
782 return callback()
783 }
784 })
785}