From 3050d56bf8d32c8737e77befaecc095ef68c5566 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasper=20Rynning-T=C3=B8nnesen?= Date: Thu, 9 Nov 2017 17:14:19 +0100 Subject: [PATCH] Everything except img error handling working --- server/handlers/io.js | 14 ++++ server/handlers/search.js | 111 ++++++++++++++++++++++++++++++++ server/public/assets/js/list.js | 10 +++ 3 files changed, 135 insertions(+) diff --git a/server/handlers/io.js b/server/handlers/io.js index 2df6cc53..64268256 100644 --- a/server/handlers/io.js +++ b/server/handlers/io.js @@ -57,6 +57,20 @@ module.exports = function() { } }); + socket.on("error_video", function(msg) { + try { + var _list = msg.channel; + if(_list.length == 0) return; + coll = emojiStrip(_list).toLowerCase(); + coll = coll.replace("_", ""); + coll = encodeURIComponent(coll).replace(/\W/g, ''); + coll = filter.clean(coll); + } catch(e) { + return; + } + Search.check_error_video(msg, coll); + }); + socket.on("get_spread", function(){ db.collection("connected_users").find({"_id": "total_users"}, function(err, tot) { db.collection("connected_users").find({"_id": "offline_users"}, function(err, off) { diff --git a/server/handlers/search.js b/server/handlers/search.js index fc7ad98a..dad0223b 100644 --- a/server/handlers/search.js +++ b/server/handlers/search.js @@ -30,6 +30,7 @@ function get_correct_info(song_generated, channel, broadcast) { } }, function(err, docs) { if(broadcast) { + song_generated.new_id = song_generated.id; io.to(channel).emit("channel", {type: "changed_values", value: song_generated}); } }); @@ -39,6 +40,115 @@ function get_correct_info(song_generated, channel, broadcast) { }); } +function check_error_video(msg, channel) { + if(!msg.hasOwnProperty("id") || !msg.hasOwnProperty("title")) { + socket.emit("update_required"); + return; + } + + request({ + type: "GET", + url: "https://www.googleapis.com/youtube/v3/videos?part=id&key="+key+"&id=" + msg.id, + + }, function(error, response, body) { + var resp = JSON.parse(body); + //console.log(resp.pageInfo.totalResults); + if(resp.pageInfo.totalResults == 0) { + var yt_url = "https://www.googleapis.com/youtube/v3/search?key="+key+"&videoEmbeddable=true&part=id&type=video&order=viewCount&safeSearch=none&maxResults=5&q=" + encodeURIComponent(msg.title); + //console.log(yt_url); + request({ + method: "GET", + url: yt_url, + }, function(error, response, body){ + var resp = JSON.parse(body); + + if(resp.items.length > 0) { + //console.log(resp.items); + + var vid_url = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+key+"&id="; + for(var i = 0; i < resp.items.length; i++) { + vid_url += resp.items[i].id.videoId + ","; + } + + request({ + type: "GET", + url: vid_url + }, function(error, response, body) { + var resp = JSON.parse(body); + var found = false; + var element = {}; + for(var i = 0; i < resp.items.length; i++) { + if(similarity(resp.items[i].snippet.localized.title, msg.title) > 0.75) { + found = true; + element = { + title: resp.items[i].snippet.localized.title, + duration: parseInt(durationToSeconds(resp.items[i].contentDetails.duration)), + id: resp.items[i].id, + start: 0, + end: parseInt(durationToSeconds(resp.items[i].contentDetails.duration)), + } + break; + } + } + if(found) { + console.log("time to change", msg.id, element); + db.collection(channel).update({"id": msg.id}, { + $set: element + }, function(err, docs) { + console.log(err, docs); + element.new_id = element.id; + element.id = msg.id; + io.to(channel).emit("channel", {type: "changed_values", value: element}); + }); + } + }); + } + }); + } + }); +} + +function similarity(s1, s2) { + var longer = s1; + var shorter = s2; + if (s1.length < s2.length) { + longer = s2; + shorter = s1; + } + var longerLength = longer.length; + if (longerLength == 0) { + return 1.0; + } + return (longerLength - editDistance(longer, shorter)) / parseFloat(longerLength); +} + +function editDistance(s1, s2) { + s1 = s1.toLowerCase(); + s2 = s2.toLowerCase(); + + var costs = new Array(); + for (var i = 0; i <= s1.length; i++) { + var lastValue = i; + for (var j = 0; j <= s2.length; j++) { + if (i == 0) + costs[j] = j; + else { + if (j > 0) { + var newValue = costs[j - 1]; + if (s1.charAt(i - 1) != s2.charAt(j - 1)) + newValue = Math.min(Math.min(newValue, lastValue), + costs[j]) + 1; + costs[j - 1] = lastValue; + lastValue = newValue; + } + } + } + if (i > 0) + costs[s2.length] = lastValue; + } + return costs[s2.length]; +} + function durationToSeconds(duration) { var matches = duration.match(time_regex); hours= parseInt(matches[12])||0; @@ -47,4 +157,5 @@ function durationToSeconds(duration) { return hours*60*60+minutes*60+seconds; } +module.exports.check_error_video = check_error_video; module.exports.get_correct_info = get_correct_info; diff --git a/server/public/assets/js/list.js b/server/public/assets/js/list.js index 92dd077e..8f9c43b9 100755 --- a/server/public/assets/js/list.js +++ b/server/public/assets/js/list.js @@ -157,12 +157,14 @@ var List = { full_playlist[i].duration = song.duration; full_playlist[i].start = song.start; full_playlist[i].end = song.end; + full_playlist[i].id = song.new_id; $("#" + song.id).find(".vote-container").attr("title", song.title); $("#" + song.id).find(".list-title").attr("title", song.title); $("#" + song.id).find(".list-title").text(song.title); var _temp_duration = Helper.secondsToOther(song.duration); $("#" + song.id).find(".card-duration").text(Helper.pad(_temp_duration[0]) + ":" + Helper.pad(_temp_duration[1])); + $("#" + song.id).attr("id", song.new_id); }, insertAtBeginning: function(song_info, transition) { @@ -966,6 +968,14 @@ var List = { attr = ".vote-container"; del_attr = "delete_button"; + var img = new Image(); + img.onerror = function() { + setTimeout(function() { + socket.emit("error_video", {channel: chan.toLowerCase(), id: video_id, title: video_title}); + }, 500); + }; + img.src = "//img.youtube.com/vi/"+video_id+"/mqdefault.jpg"; + var _temp_duration = Helper.secondsToOther(_song_info.duration); song.find(".card-duration").text(Helper.pad(_temp_duration[0]) + ":" + Helper.pad(_temp_duration[1])); }else if(!list){