From 7fda70965fbece38f344fb331847dc176b2fc8a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasper=20Rynning-T=C3=B8nnesen?= Date: Fri, 2 Mar 2018 09:23:07 +0100 Subject: [PATCH] Fixed issue with suggested being duplicated and RESTApi posting --- server/handlers/list_change.js | 6 ++--- server/handlers/search.js | 1 + server/public/assets/js/list.js | 10 ++++++++ server/public/assets/js/suggestions.js | 9 +++++++- server/routing/client/api.js | 32 +++++++++++++++----------- 5 files changed, 40 insertions(+), 18 deletions(-) diff --git a/server/handlers/list_change.js b/server/handlers/list_change.js index 4331293b..6c0e2142 100644 --- a/server/handlers/list_change.js +++ b/server/handlers/list_change.js @@ -308,15 +308,15 @@ function del(params, socket, socketid) { if(docs !== null && docs.length !== 0 && docs[0].adminpass == Functions.hash_pass(Functions.decrypt_string(socketid, params.adminpass))) { db.collection(coll).find({id:params.id}, function(err, docs){ - dont_increment = true; + var dont_increment = false; if(docs[0]){ if(docs[0].type == "suggested"){ - dont_increment = false; + dont_increment = true; } db.collection(coll).remove({id:params.id}, function(err, docs){ socket.emit("toast", "deletesong"); io.to(coll).emit("channel", {type:"deleted", value: params.id}); - if(dont_increment) db.collection("frontpage_lists").update({_id: coll, count: {$gt: 0}}, {$inc: {count: -1}, $set:{accessed: Functions.get_time()}}, {upsert: true}, function(err, docs){}); + if(!dont_increment) db.collection("frontpage_lists").update({_id: coll, count: {$gt: 0}}, {$inc: {count: -1}, $set:{accessed: Functions.get_time()}}, {upsert: true}, function(err, docs){}); }); } }); diff --git a/server/handlers/search.js b/server/handlers/search.js index 8d90d42a..bee87004 100644 --- a/server/handlers/search.js +++ b/server/handlers/search.js @@ -38,6 +38,7 @@ function get_correct_info(song_generated, channel, broadcast, callback) { }, function(err, docs) { if(broadcast && docs.nModified == 1) { song_generated.new_id = song_generated.id; + //if(song_generated.type == "video") io.to(channel).emit("channel", {type: "changed_values", value: song_generated}); if(typeof(callback) == "function") { callback(); diff --git a/server/public/assets/js/list.js b/server/public/assets/js/list.js index 7421b6f3..cd9c1271 100755 --- a/server/public/assets/js/list.js +++ b/server/public/assets/js/list.js @@ -76,6 +76,16 @@ var List = { }, changedValues: function(song) { + if(song.type == "suggested") { + $("#suggested-" + song.id).find(".vote-container").attr("title", song.title); + $("#suggested-" + song.id).find(".list-title").attr("title", song.title); + $("#suggested-" + song.id).find(".list-title").text(song.title); + var _temp_duration = Helper.secondsToOther(song.duration); + $("#suggested-" + song.id).find(".card-duration").text(Helper.pad(_temp_duration[0]) + ":" + Helper.pad(_temp_duration[1])); + $("#suggested-" + song.id).find(".list-image").attr("style", "background-image:url('//img.youtube.com/vi/"+song.new_id+"/mqdefault.jpg');"); + $("#suggested-" + song.id).attr("id", song.new_id); + return; + } var i = List.getIndexOfSong(song.id); if(i >= 0 && window.location.pathname != "/") { full_playlist[i].title = song.title; diff --git a/server/public/assets/js/suggestions.js b/server/public/assets/js/suggestions.js index 628d3838..6aac75fc 100755 --- a/server/public/assets/js/suggestions.js +++ b/server/public/assets/js/suggestions.js @@ -6,6 +6,11 @@ var Suggestions = { } else { number_suggested = number_suggested + params.length; } + for(var i = 0; i < params.length; i++) { + if($("#suggested-" + params[i].id).length > 0) { + number_suggested -= 1; + } + } var to_display = number_suggested > 9 ? "9+" : number_suggested; if($(".suggested-link span.badge.new.white").hasClass("hide") && number_suggested > 0){ $(".suggested-link span.badge.new.white").removeClass("hide"); @@ -26,7 +31,9 @@ var Suggestions = { var video_id = params.id; var video_title = params.title; var song = List.generateSong({id: video_id, title: video_title, length: params.duration, duration: duration}, false, false, false, true); - $("#user-suggest-html").append(song); + if($("#" + $(song).attr("id")).length == 0) { + $("#user-suggest-html").append(song); + } }, fetchYoutubeSuggests: function(id){ diff --git a/server/routing/client/api.js b/server/routing/client/api.js index ef89203f..e3249540 100644 --- a/server/routing/client/api.js +++ b/server/routing/client/api.js @@ -89,14 +89,14 @@ router.route('/api/list/:channel_name/:video_id').delete(function(req, res) { res.sendStatus(404); return; } - dont_increment = true; + var dont_increment = false; if(docs[0]){ if(docs[0].type == "suggested"){ - dont_increment = false; + dont_increment = true; } db.collection(channel_name).remove({id:video_id}, function(err, docs){ io.to(channel_name).emit("channel", {type:"deleted", value: video_id}); - if(dont_increment) { + if(!dont_increment) { db.collection("frontpage_lists").update({_id: channel_name, count: {$gt: 0}}, {$inc: {count: -1}, $set:{accessed: Functions.get_time()}}, {upsert: true}, function(err, docs){ updateTimeout(guid, res, "DELETE", function(err, docs) { res.sendStatus(200); @@ -378,25 +378,29 @@ router.route('/api/list/:channel_name/:video_id').post(function(req,res) { io.to(channel_name).emit("conf", configs); }); } - db.collection(channel_name).update(new_song, {upsert: true}, function(err, success) { + db.collection(channel_name).update({"id": new_song.id}, new_song, {upsert: true}, function(err, success) { if(create_frontpage_lists) { - db.collection("frontpage_lists").update({"_id": channel_name, "count" : 1, "frontpage": true, "accessed": Functions.get_time(), "viewers": 1}, {upsert: true}, function(err, docs) { + db.collection("frontpage_lists").update({"_id": channel_name, "count" : (authenticated ? 1 : 0), "frontpage": true, "accessed": Functions.get_time(), "viewers": 1}, {upsert: true}, function(err, docs) { if(authenticated) { io.to(channel_name).emit("channel", {type: "added", value: new_song}); } else { - io.to(coll).emit("suggested", new_song); + io.to(channel_name).emit("suggested", new_song); } - postEnd(channel_name, configs, new_song, guid, res); + postEnd(channel_name, configs, new_song, guid, res, authenticated); }); } else if(set_np) { Frontpage.update_frontpage(channel_name, video_id, title, function() { io.to(channel_name).emit("np", new_song); - postEnd(channel_name, configs, new_song, guid, res); + postEnd(channel_name, configs, new_song, guid, res, authenticated); }); } else { - db.collection("frontpage_lists").update({"_id": channel_name}, {$inc: {count: 1}}, function(err, docs) { - io.to(channel_name).emit("channel", {type: "added", value: new_song}); - postEnd(channel_name, configs, new_song, guid, res); + db.collection("frontpage_lists").update({"_id": channel_name}, {$inc: {count: (authenticated ? 1 : 0)}}, function(err, docs) { + if(authenticated) { + io.to(channel_name).emit("channel", {type: "added", value: new_song}); + } else { + io.to(channel_name).emit("suggested", new_song); + } + postEnd(channel_name, configs, new_song, guid, res, authenticated); }); } }); @@ -718,7 +722,7 @@ function validateLogin(adminpass, userpass, channel_name, type, res, callback) { (type == "vote" && ((conf[0].vote && (conf[0].adminpass == "" || conf[0].adminpass == undefined || conf[0].adminpass == adminpass)) || !conf[0].vote)) || (type == "config" && (conf[0].adminpass == "" || conf[0].adminpass == undefined || conf[0].adminpass == adminpass)) ) { - callback(exists, conf); + callback(exists, conf, true); } else if(type == "add") { callback(exists, conf, false); } else { @@ -728,7 +732,7 @@ function validateLogin(adminpass, userpass, channel_name, type, res, callback) { }); } -function postEnd(channel_name, configs, new_song, guid, res) { +function postEnd(channel_name, configs, new_song, guid, res, authenticated) { if(configs != undefined) { io.to(channel_name).emit("conf", configs); } @@ -736,7 +740,7 @@ function postEnd(channel_name, configs, new_song, guid, res) { updateTimeout(guid, res, "POST", function(err, docs) { Search.get_correct_info(new_song, channel_name, !new_song.now_playing, function() { res.header({'Content-Type': 'application/json'}); - res.status(200).send(JSON.stringify(new_song)); + res.status(authenticated ? 200 : 403).send(JSON.stringify(new_song)); return; }); });