mirror of
https://github.com/KevinMidboe/zoff.git
synced 2025-12-08 20:48:48 +00:00
Merge pull request #216 from zoff-music/feature/song-validation
Feature/song validation
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,6 @@
|
|||||||
server/public/assets/images/thumbnails/
|
server/public/assets/images/thumbnails/
|
||||||
server/config/mailconfig.js
|
server/config/mailconfig.js
|
||||||
|
server/config/api_key.js
|
||||||
server/config/mongo_config.js
|
server/config/mongo_config.js
|
||||||
server/config/cert_config.js
|
server/config/cert_config.js
|
||||||
server/public/assets/dist/callback.min.js
|
server/public/assets/dist/callback.min.js
|
||||||
|
|||||||
3
server/config/api_key.example.js
Normal file
3
server/config/api_key.example.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
var key = "xxxx";
|
||||||
|
|
||||||
|
module.exports = key;
|
||||||
@@ -88,8 +88,11 @@ function add_function(arr, coll, guid, offline, socket) {
|
|||||||
db.collection(coll).update({views:{$exists:true}}, {$set:{startTime: Functions.get_time()}});
|
db.collection(coll).update({views:{$exists:true}}, {$set:{startTime: Functions.get_time()}});
|
||||||
List.send_play(coll, undefined);
|
List.send_play(coll, undefined);
|
||||||
Frontpage.update_frontpage(coll, id, title);
|
Frontpage.update_frontpage(coll, id, title);
|
||||||
|
Search.get_correct_info(new_song, coll, false);
|
||||||
} else {
|
} else {
|
||||||
io.to(coll).emit("channel", {type: "added", value: {"_id": "asd", "added":added,"guids":guids,"id":id,"now_playing":np,"title":title,"votes":votes, "duration":duration}});
|
var new_song = {"_id": "asd", "added":added,"guids":guids,"id":id,"now_playing":np,"title":title,"votes":votes, "duration":duration};
|
||||||
|
io.to(coll).emit("channel", {type: "added", value: new_song});
|
||||||
|
Search.get_correct_info(new_song, coll, true);
|
||||||
}
|
}
|
||||||
db.collection("frontpage_lists").update({_id:coll}, {$inc:{count:1}, $set:{accessed: Functions.get_time()}}, {upsert:true}, function(err, docs){});
|
db.collection("frontpage_lists").update({_id:coll}, {$inc:{count:1}, $set:{accessed: Functions.get_time()}}, {upsert:true}, function(err, docs){});
|
||||||
List.getNextSong(coll);
|
List.getNextSong(coll);
|
||||||
|
|||||||
50
server/handlers/search.js
Normal file
50
server/handlers/search.js
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
var path = require('path');
|
||||||
|
var time_regex = /P((([0-9]*\.?[0-9]*)Y)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)W)?(([0-9]*\.?[0-9]*)D)?)?(T(([0-9]*\.?[0-9]*)H)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)S)?)?/;
|
||||||
|
var key = require(path.join(__dirname, '../config/api_key.js'));
|
||||||
|
|
||||||
|
function get_correct_info(song_generated, channel, broadcast) {
|
||||||
|
request({
|
||||||
|
type: "GET",
|
||||||
|
url: "https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+key+"&id=" + song_generated.id,
|
||||||
|
|
||||||
|
}, function(error, response, body) {
|
||||||
|
var resp = JSON.parse(body);
|
||||||
|
if(resp.items.length == 1) {
|
||||||
|
var duration = parseInt(durationToSeconds(resp.items[0].contentDetails.duration));
|
||||||
|
var title = resp.items[0].snippet.localized.title;
|
||||||
|
if(title != song_generated.title || duration < parseInt(song_generated.duration)) {
|
||||||
|
if(title != song_generated.title) {
|
||||||
|
song_generated.title = title;
|
||||||
|
}
|
||||||
|
if(duration < parseInt(song_generated.duration)) {
|
||||||
|
song_generated.duration = duration;
|
||||||
|
song_generated.start = 0;
|
||||||
|
song_generated.end = duration;
|
||||||
|
}
|
||||||
|
db.collection(channel).update({"id": song_generated.id}, {
|
||||||
|
$set: {
|
||||||
|
"duration": song_generated.duration,
|
||||||
|
"start": song_generated.start,
|
||||||
|
"end": song_generated.end,
|
||||||
|
"title": song_generated.title,
|
||||||
|
}
|
||||||
|
}, function(err, docs) {
|
||||||
|
if(broadcast) {
|
||||||
|
io.to(channel).emit("channel", {type: "changed_values", value: song_generated});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function durationToSeconds(duration) {
|
||||||
|
var matches = duration.match(time_regex);
|
||||||
|
hours= parseInt(matches[12])||0;
|
||||||
|
minutes= parseInt(matches[14])||0;
|
||||||
|
seconds= parseInt(matches[16])||0;
|
||||||
|
return hours*60*60+minutes*60+seconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.get_correct_info = get_correct_info;
|
||||||
@@ -87,6 +87,7 @@ List = require('./handlers/list.js');
|
|||||||
Suggestions = require('./handlers/suggestions.js');
|
Suggestions = require('./handlers/suggestions.js');
|
||||||
ListSettings = require('./handlers/list_settings.js');
|
ListSettings = require('./handlers/list_settings.js');
|
||||||
Frontpage = require('./handlers/frontpage.js');
|
Frontpage = require('./handlers/frontpage.js');
|
||||||
|
Search = require('./handlers/search.js');
|
||||||
crypto = require('crypto');
|
crypto = require('crypto');
|
||||||
node_cryptojs = require('node-cryptojs-aes');
|
node_cryptojs = require('node-cryptojs-aes');
|
||||||
CryptoJS = node_cryptojs.CryptoJS;
|
CryptoJS = node_cryptojs.CryptoJS;
|
||||||
|
|||||||
@@ -136,6 +136,9 @@ var List = {
|
|||||||
found_array_index = 0;
|
found_array_index = 0;
|
||||||
//if(!w_p) List.dragging(true);
|
//if(!w_p) List.dragging(true);
|
||||||
break;
|
break;
|
||||||
|
case "changed_values":
|
||||||
|
List.changedValues(msg.value);
|
||||||
|
break;
|
||||||
case "song_change_prev":
|
case "song_change_prev":
|
||||||
if(window.location.pathname != "/") List.song_change_prev(msg.time);
|
if(window.location.pathname != "/") List.song_change_prev(msg.time);
|
||||||
if(full_playlist.length > 0) {
|
if(full_playlist.length > 0) {
|
||||||
@@ -148,6 +151,20 @@ var List = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
changedValues: function(song) {
|
||||||
|
var i = List.getIndexOfSong(song.id);
|
||||||
|
full_playlist[i].title = song.title;
|
||||||
|
full_playlist[i].duration = song.duration;
|
||||||
|
full_playlist[i].start = song.start;
|
||||||
|
full_playlist[i].end = song.end;
|
||||||
|
|
||||||
|
$("#" + 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]));
|
||||||
|
},
|
||||||
|
|
||||||
insertAtBeginning: function(song_info, transition) {
|
insertAtBeginning: function(song_info, transition) {
|
||||||
var display = List.page == 0 ? "" : "none";
|
var display = List.page == 0 ? "" : "none";
|
||||||
var add = List.generateSong(song_info, transition, false, true, false, display, false);
|
var add = List.generateSong(song_info, transition, false, true, false, display, false);
|
||||||
|
|||||||
Reference in New Issue
Block a user