mirror of
https://github.com/KevinMidboe/zoff.git
synced 2025-10-29 18:00:23 +00:00
999 lines
39 KiB
JavaScript
Executable File
999 lines
39 KiB
JavaScript
Executable File
var Search = {
|
|
submitArray: [],
|
|
submitArrayExpected: null,
|
|
submitYouTubeArrayIds: [],
|
|
submitYouTubeArray: [],
|
|
submitYouTubeExpected: 0,
|
|
submitYouTubeError: false,
|
|
|
|
showSearch: function() {
|
|
Helper.toggleClass("#search-wrapper", "hide");
|
|
if (Helper.mobilecheck()) {
|
|
document.querySelector(".search_input").focus();
|
|
}
|
|
Helper.toggleClass("#song-title", "hide");
|
|
//$("#results").empty();
|
|
if (document.querySelector("#search-btn i").innerText == "close") {
|
|
document.querySelector("body").setAttribute("style", "overflow-y:auto");
|
|
|
|
document.getElementById("results").innerHTML = "";
|
|
document.getElementById("results_soundcloud").innerHTML = "";
|
|
Helper.css(".search_results", "display", "none");
|
|
//Helper.css(".results-tabs", "display", "none");
|
|
document.querySelector(".search_input").value = "";
|
|
document.querySelector("#search-btn i").innerText = "search";
|
|
//Helper.css(document.querySelector(".search_results .col.s12"), "display", "none");
|
|
} else {
|
|
document.querySelector("#search-btn i").innerText = "close";
|
|
//Helper.css(".search_results", "display", "block");
|
|
}
|
|
document.querySelector("#search").focus();
|
|
},
|
|
|
|
search: function(search_input, retried, related, pagination) {
|
|
if (result_html === undefined || empty_results_html === undefined) {
|
|
result_html = document.getElementById("temp-results-container");
|
|
empty_results_html = Helper.html("#empty-results-container");
|
|
}
|
|
if (
|
|
!pagination &&
|
|
document.querySelectorAll("#inner-results").length == 0
|
|
) {
|
|
Helper.setHtml("#results", "");
|
|
}
|
|
if (search_input !== "") {
|
|
searching = true;
|
|
var keyword = encodeURIComponent(search_input);
|
|
var yt_url =
|
|
"https://www.googleapis.com/youtube/v3/search?key=" +
|
|
api_key.youtube +
|
|
"&videoEmbeddable=true&part=id&type=video&order=relevance&safeSearch=none&maxResults=25";
|
|
yt_url += "&q=" + keyword;
|
|
if (music) yt_url += "&videoCategoryId=10";
|
|
if (pagination) yt_url += "&pageToken=" + pagination;
|
|
var vid_url =
|
|
"https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&fields=pageInfo,items(id,contentDetails,snippet(categoryId,channelTitle,publishedAt,title,description,thumbnails))&key=" +
|
|
api_key.youtube +
|
|
"&id=";
|
|
if (related) {
|
|
var yt_url =
|
|
"https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=25&relatedToVideoId=" +
|
|
keyword +
|
|
"&type=video&key=" +
|
|
api_key.youtube;
|
|
var vid_url =
|
|
"https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key=" +
|
|
api_key.youtube +
|
|
"&id=";
|
|
}
|
|
//https://www.googleapis.com/youtube/v3/videos?key={API-key}&fields=items(snippet(title,description))&part=snippet&id={video_id}
|
|
|
|
Helper.addClass(
|
|
document.querySelector("#search-btn .material-icons"),
|
|
"hide"
|
|
);
|
|
Helper.removeClass("#search_loader", "hide");
|
|
Helper.addClass(".search_loader_spinner", "active");
|
|
//Helper.removeClass(".search_results", "hide");
|
|
//Helper.css(".results-tabs", "display", "none");
|
|
|
|
Helper.ajax({
|
|
type: "GET",
|
|
url: yt_url,
|
|
dataType: "jsonp",
|
|
success: function(response) {
|
|
response = JSON.parse(response);
|
|
var nextPageToken = response.nextPageToken;
|
|
var prevPageToken = response.prevPageToken;
|
|
//Helper.css(document.querySelector(".search_results .col.s12"), "display", "block");
|
|
if (response.items.length === 0) {
|
|
document.getElementById("results").innerHTML = "";
|
|
Helper.css("#results", "display", "block");
|
|
//Helper.css(".results-tabs", "display", "block");
|
|
//$("<div style='display:none;' id='inner-results' class='empty-inner-results'>"+empty_results_html+"</div>").appendTo($("#results")).show("blind", 83.33);
|
|
document
|
|
.getElementById("results")
|
|
.insertAdjacentHTML(
|
|
"beforeend",
|
|
"<div style='display:block;' id='inner-results' style='height:calc(100vh - 64px);' class='empty-inner-results'>" +
|
|
empty_results_html +
|
|
"</div>"
|
|
);
|
|
Helper.removeClass(
|
|
document.querySelector("#search-btn .material-icons"),
|
|
"hide"
|
|
);
|
|
Helper.addClass("#search_loader", "hide");
|
|
Helper.removeClass(".search_loader_spinner", "active");
|
|
} else if (response.items) {
|
|
for (var i = 0; i < response.items.length; i++) {
|
|
vid_url += response.items[i].id.videoId + ",";
|
|
}
|
|
|
|
Helper.ajax({
|
|
type: "GET",
|
|
url: vid_url,
|
|
dataType: "jsonp",
|
|
success: function(response) {
|
|
response = JSON.parse(response);
|
|
var output = "";
|
|
var pre_result = document.createElement("div");
|
|
pre_result.innerHTML = result_html.outerHTML;
|
|
|
|
//$("#results").append(result_html);
|
|
for (var i = 0; i < response.items.length; i++) {
|
|
var song = response.items[i];
|
|
var duration = song.contentDetails.duration;
|
|
var secs = Search.durationToSeconds(duration);
|
|
var _temp_duration = Helper.secondsToOther(secs);
|
|
if ((longsongs != undefined && !longsongs) || secs < 720) {
|
|
var title = song.snippet.title;
|
|
var enc_title = title; //encodeURIComponent(title).replace(/'/g, "\\\'");
|
|
var id = song.id;
|
|
duration = duration
|
|
.replace("PT", "")
|
|
.replace("H", "h ")
|
|
.replace("M", "m ")
|
|
.replace("S", "s");
|
|
var thumb = song.snippet.thumbnails.medium.url;
|
|
//$("#results").append(result_html);
|
|
var songs = pre_result.cloneNode(true);
|
|
songs.querySelector(".search-title").innerText = title;
|
|
songs.querySelector(".result_info").innerText =
|
|
Helper.pad(_temp_duration[0]) +
|
|
":" +
|
|
Helper.pad(_temp_duration[1]);
|
|
songs.querySelector(".thumb").setAttribute("src", thumb);
|
|
//songs.querySelector(".add-many").attr("onclick", "submit('"+id+"','"+enc_title+"',"+secs+");");
|
|
songs
|
|
.querySelector("#add-many")
|
|
.setAttribute("data-video-id", id);
|
|
songs
|
|
.querySelector("#add-many")
|
|
.setAttribute("data-video-title", enc_title);
|
|
songs
|
|
.querySelector("#add-many")
|
|
.setAttribute("data-video-length", secs);
|
|
//$($(songs).querySelector("div")[0]).setAttribute("onclick", "submitAndClose('"+id+"','"+enc_title+"',"+secs+");");
|
|
songs
|
|
.querySelector("#temp-results")
|
|
.setAttribute("data-video-id", id);
|
|
songs
|
|
.querySelector("#temp-results")
|
|
.setAttribute("data-video-title", enc_title);
|
|
songs
|
|
.querySelector("#temp-results")
|
|
.setAttribute("data-video-length", secs);
|
|
songs
|
|
.querySelector(".open-externally")
|
|
.setAttribute(
|
|
"href",
|
|
"https://www.youtube.com/watch?v=" + id
|
|
);
|
|
songs
|
|
.querySelector(".result-end")
|
|
.setAttribute("value", secs);
|
|
//$($(songs).querySelector("div")[0]).setAttribute("id", id)
|
|
//output += undefined;
|
|
if (songs.innerHTML != undefined && songs.innerHTML != "") {
|
|
output += songs.innerHTML;
|
|
}
|
|
}
|
|
}
|
|
var fresh = false;
|
|
if (document.querySelectorAll("#inner-results").length == 0) {
|
|
fresh = true;
|
|
}
|
|
document.getElementById("results").innerHTML = "";
|
|
if (output.length > 0) {
|
|
//$(window).scrollTop(0);
|
|
if (!pagination && fresh) {
|
|
Helper.css(".search_results", "display", "none");
|
|
}
|
|
document
|
|
.getElementById("results")
|
|
.insertAdjacentHTML("beforeend", pagination_buttons_html);
|
|
//$("<div id='inner-results'>"+output+"</div>").prependTo($("#results"));
|
|
document
|
|
.getElementById("results")
|
|
.insertAdjacentHTML(
|
|
"afterbegin",
|
|
"<div id='inner-results'>" + output + "</div>"
|
|
);
|
|
/*if(!pagination && fresh) {
|
|
$(".search_results").slideDown();
|
|
}*/
|
|
document
|
|
.getElementsByTagName("body")[0]
|
|
.setAttribute("style", "overflow-y:hidden !important");
|
|
|
|
if (nextPageToken) {
|
|
document
|
|
.querySelector(".next-results-button")
|
|
.setAttribute("data-pagination", nextPageToken);
|
|
} else {
|
|
Helper.addClass(".next-results-button", "disabled");
|
|
}
|
|
if (prevPageToken) {
|
|
document
|
|
.querySelector(".prev-results-button")
|
|
.setAttribute("data-pagination", prevPageToken);
|
|
} else {
|
|
Helper.addClass(".prev-results-button", "disabled");
|
|
}
|
|
|
|
document
|
|
.querySelectorAll(".pagination-results a")[0]
|
|
.setAttribute("data-original-search", search_input);
|
|
document
|
|
.querySelectorAll(".pagination-results a")[1]
|
|
.setAttribute("data-original-search", search_input);
|
|
//setTimeout(function(){$(".thumb").lazyload({container: $("#results")});}, 250);
|
|
Helper.removeClass(
|
|
document.querySelector("#search-btn .material-icons"),
|
|
"hide"
|
|
);
|
|
Helper.addClass("#search_loader", "hide");
|
|
Helper.removeClass(".search_loader_spinner", "active");
|
|
if (
|
|
document.querySelector("#results_soundcloud").innerHTML
|
|
.length > 0 ||
|
|
related
|
|
) {
|
|
Helper.css(".search_results", "display", "block");
|
|
}
|
|
Helper.css(".results-tabs", "display", "block");
|
|
} else if (!retried) {
|
|
Search.search(search_input, true);
|
|
} else {
|
|
//$("<div style='display:none;' id='inner-results'>"+empty_results_html+"</div>").appendTo($("#results")).show("blind", 83.33);
|
|
document
|
|
.getElementById("results")
|
|
.insertAdjacentHTML(
|
|
"beforeend",
|
|
"<div style='display:block;' id='inner-results' style='height:calc(100vh - 64px);'>" +
|
|
empty_results_html +
|
|
"</div>"
|
|
);
|
|
Helper.css("#results", "display", "block");
|
|
if (
|
|
document.querySelector("#results_soundcloud").innerHTML
|
|
.length > 0
|
|
) {
|
|
Helper.css(".search_results", "display", "block");
|
|
}
|
|
Helper.removeClass(
|
|
document.querySelector("#search-btn .material-icons"),
|
|
"hide"
|
|
);
|
|
Helper.addClass("#search_loader", "hide");
|
|
Helper.removeClass(".search_loader_spinner", "active");
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
Helper.removeClass(".main", "blurT");
|
|
Helper.removeClass("#controls", "blurT");
|
|
Helper.removeClass(".main", "clickthrough");
|
|
//Helper.css(".results-tabs", "display", "none");
|
|
Helper.css(".search_results", "display", "none");
|
|
}
|
|
},
|
|
|
|
soundcloudSearch: function(keyword) {
|
|
if (!soundcloud_enabled) {
|
|
document.querySelector("#results_soundcloud").innerHTML =
|
|
'<div style="display:block;" id="inner-results" class="empty-inner-results"><div id="empty-results" class="valign-wrapper><span class="valign">No SoundCloud API-key, search disabled..</span></div></div>';
|
|
|
|
return;
|
|
}
|
|
if (keyword.length == 0) return;
|
|
SC_player.get("/tracks", {
|
|
q: keyword
|
|
}).then(function(tracks) {
|
|
var pre_result = document.createElement("div");
|
|
pre_result.innerHTML = result_html.outerHTML;
|
|
//$("#results").append(result_html);
|
|
//Helper.css(document.querySelector(".search_results .col.s12"), "display", "block");
|
|
var output = "";
|
|
for (var i = 0; i < tracks.length; i++) {
|
|
var song = tracks[i];
|
|
if (!song.streamable) continue;
|
|
var duration = Math.floor(song.duration / 1000);
|
|
//var secs=Search.durationToSeconds(duration);
|
|
var secs = duration;
|
|
var _temp_duration = Helper.secondsToOther(secs);
|
|
if (longsongs == undefined) longsongs = true;
|
|
if ((longsongs != undefined && !longsongs) || secs < 720) {
|
|
var title = song.title;
|
|
if (title.indexOf(song.user.username) == -1) {
|
|
title = song.user.username + " - " + title;
|
|
}
|
|
var enc_title = title; //encodeURIComponent(title).replace(/'/g, "\\\'");
|
|
var id = song.id;
|
|
//duration = duration.replace("PT","").replace("H","h ").replace("M","m ").replace("S","s");
|
|
var thumb = song.artwork_url;
|
|
//var thumb = null;
|
|
if (thumb == null) thumb = song.waveform_url;
|
|
else thumb = thumb.replace("-large.jpg", "-t500x500.jpg");
|
|
//$("#results").append(result_html);
|
|
var songs = pre_result.cloneNode(true);
|
|
songs.querySelector(".search-title").innerText = title;
|
|
songs.querySelector(".result_info").innerText =
|
|
Helper.pad(_temp_duration[0]) + ":" + Helper.pad(_temp_duration[1]);
|
|
songs.querySelector(".thumb").setAttribute("src", thumb);
|
|
//songs.querySelector(".add-many").attr("onclick", "submit('"+id+"','"+enc_title+"',"+secs+");");
|
|
songs
|
|
.querySelector("#add-many")
|
|
.setAttribute("data-type-source", "soundcloud");
|
|
songs
|
|
.querySelector("#add-many")
|
|
.setAttribute("data-type-thumbnail", thumb);
|
|
songs.querySelector("#add-many").setAttribute("data-video-id", id);
|
|
songs
|
|
.querySelector("#add-many")
|
|
.setAttribute("data-video-title", enc_title);
|
|
songs
|
|
.querySelector("#add-many")
|
|
.setAttribute("data-video-length", secs);
|
|
//$($(songs).querySelector("div")[0]).setAttribute("onclick", "submitAndClose('"+id+"','"+enc_title+"',"+secs+");");
|
|
songs
|
|
.querySelector("#temp-results")
|
|
.setAttribute("data-video-id", id);
|
|
songs
|
|
.querySelector("#temp-results")
|
|
.setAttribute("data-video-title", enc_title);
|
|
songs
|
|
.querySelector("#temp-results")
|
|
.setAttribute("data-video-length", secs);
|
|
songs
|
|
.querySelector(".open-externally")
|
|
.setAttribute("href", song.permalink_url);
|
|
songs.querySelector(".result-end").setAttribute("value", secs);
|
|
songs
|
|
.querySelector("#temp-results")
|
|
.setAttribute("data-type-source", "soundcloud");
|
|
songs
|
|
.querySelector("#temp-results")
|
|
.setAttribute("data-type-thumbnail", thumb);
|
|
//$($(songs).querySelector("div")[0]).setAttribute("id", id)
|
|
//output += undefined;
|
|
if (songs.innerHTML != undefined && songs.innerHTML != "") {
|
|
output += songs.innerHTML;
|
|
}
|
|
}
|
|
}
|
|
var fresh = false;
|
|
if (document.querySelectorAll("#inner-results").length == 0) {
|
|
fresh = true;
|
|
}
|
|
document.getElementById("results_soundcloud").innerHTML = "";
|
|
if (output.length > 0) {
|
|
//$(window).scrollTop(0);
|
|
/*if(!pagination && fresh) {
|
|
//Helper.css(".search_results", "display", "none");
|
|
}*/
|
|
//document.getElementById("results_soundcloud").insertAdjacentHTML("beforeend", pagination_buttons_html);
|
|
//$("<div id='inner-results'>"+output+"</div>").prependTo($("#results"));
|
|
document
|
|
.getElementById("results_soundcloud")
|
|
.insertAdjacentHTML(
|
|
"afterbegin",
|
|
"<div id='inner-results'>" + output + "</div>"
|
|
);
|
|
if (!pagination && fresh) {
|
|
//$(".search_results").slideDown();
|
|
}
|
|
|
|
/*if(nextPageToken) {
|
|
document.querySelector(".next-results-button").setAttribute("data-pagination", nextPageToken);
|
|
} else {
|
|
Helper.addClass(".next-results-button", "disabled");
|
|
}
|
|
if(prevPageToken) {
|
|
document.querySelector(".prev-results-button").setAttribute("data-pagination", prevPageToken);
|
|
} else {
|
|
Helper.addClass(".prev-results-button", "disabled");
|
|
}
|
|
|
|
document.querySelector(".pagination-results a").setAttribute("data-original-search", search_input);
|
|
*/
|
|
//setTimeout(function(){$(".thumb").lazyload({container: $("#results")});}, 250);
|
|
|
|
/*Helper.removeClass(".search_loader_spinner", "active");
|
|
Helper.css(".search_results", "display", "block");*/
|
|
} else {
|
|
document
|
|
.getElementById("results_soundcloud")
|
|
.insertAdjacentHTML(
|
|
"afterbegin",
|
|
"<div id='inner-results' style='height:calc(100vh - 64px);'>" +
|
|
empty_results_html +
|
|
"</div>"
|
|
);
|
|
document
|
|
.getElementsByTagName("body")[0]
|
|
.setAttribute("style", "overflow-y:hidden !important");
|
|
}
|
|
if (document.querySelector("#results").innerHTML.length > 0) {
|
|
Helper.css(".search_results", "display", "block");
|
|
}
|
|
/*else if(!retried){
|
|
Search.search(search_input, true);
|
|
} else {
|
|
//$("<div style='display:none;' id='inner-results'>"+empty_results_html+"</div>").appendTo($("#results_soundcloud")).show("blind", 83.33);
|
|
document.getElementById("results_soundcloud").insertAdjacentHTML("beforeend", "<div style='display:block;' id='inner-results' style='height:calc(100vh - 64px);'>"+empty_results_html+"</div>");
|
|
Helper.css("#results_soundcloud", "display", "block");
|
|
Helper.removeClass(".search_loader_spinner", "active");
|
|
}*/
|
|
});
|
|
},
|
|
|
|
backgroundSearch: function(title, artist, length, totalNumber, current) {
|
|
var keyword = encodeURIComponent(title + " " + artist);
|
|
var yt_url =
|
|
"https://www.googleapis.com/youtube/v3/search?key=" +
|
|
api_key.youtube +
|
|
"&videoEmbeddable=true&part=id,snippet&fields=items(id,snippet)&type=video&order=relevance&safeSearch=none&maxResults=10&videoCategoryId=10";
|
|
yt_url += "&q=" + keyword;
|
|
var vid_url =
|
|
"https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key=" +
|
|
api_key.youtube +
|
|
"&id=";
|
|
artist = artist.split(" ");
|
|
var temptitle = title.split("-");
|
|
temptitle = temptitle.join(" ").split(" ");
|
|
Helper.ajax({
|
|
type: "GET",
|
|
url: yt_url,
|
|
dataType: "jsonp",
|
|
success: function(response) {
|
|
response = JSON.parse(response);
|
|
//Helper.log(response);
|
|
if (response.items.length === 0) {
|
|
Search.readySubmit(false, { totalLength: totalNumber - 1 });
|
|
Helper.log([
|
|
"NO MATCH FOR:",
|
|
"Spotify title: " + title + " " + artist.join(" "),
|
|
"Spotify length: " + length
|
|
]);
|
|
var not_added_song = document.createElement("div");
|
|
not_added_song.innerHTML = not_import_html;
|
|
|
|
not_added_song.querySelector(".extra-add-text").innerText =
|
|
title + " - " + artist.join(" ");
|
|
not_added_song
|
|
.querySelector(".extra-add-text")
|
|
.setAttribute("title", title + " - " + artist.join(" "));
|
|
not_added_song
|
|
.querySelector(".extra-button-search")
|
|
.setAttribute("data-text", title + " - " + artist.join(" "));
|
|
document
|
|
.querySelector(".not-imported-container")
|
|
.insertAdjacentHTML("beforeend", not_added_song.innerHTML);
|
|
Helper.removeClass(".not-imported", "hide");
|
|
} else if (response.items.length > 0) {
|
|
for (var i = 0; i < response.items.length; i++) {
|
|
var data = response.items[i];
|
|
vid_url += data.id.videoId + ",";
|
|
}
|
|
|
|
Helper.ajax({
|
|
type: "GET",
|
|
url: vid_url,
|
|
dataType: "jsonp",
|
|
success: function(response) {
|
|
response = JSON.parse(response);
|
|
if (response.items.length > 0) {
|
|
var matched = false;
|
|
for (var y = 0; y < response.items.length; y++) {
|
|
var data = response.items[y];
|
|
//Helper.log(data);
|
|
//var title = data.snippet.title;
|
|
if (
|
|
data.contentDetails == undefined ||
|
|
data.contentDetails.duration == undefined
|
|
) {
|
|
Search.readySubmit(false, { totalLength: totalNumber - 1 });
|
|
Helper.log([
|
|
"NO MATCH FOR:",
|
|
"Spotify title: " + title + " " + artist.join(" "),
|
|
"Spotify length: " + length
|
|
]);
|
|
var not_added_song = document.createElement("div");
|
|
not_added_song.innerHTML = not_import_html;
|
|
not_added_song.querySelector(".extra-add-text").innerText =
|
|
title + " - " + artist.join(" ");
|
|
not_added_song
|
|
.querySelector(".extra-add-text")
|
|
.setAttribute("title", title + " - " + artist.join(" "));
|
|
not_added_song
|
|
.querySelector(".extra-button-search")
|
|
.setAttribute(
|
|
"data-text",
|
|
title + " - " + artist.join(" ")
|
|
);
|
|
document
|
|
.querySelector(".not-imported-container")
|
|
.insertAdjacentHTML(
|
|
"beforeend",
|
|
not_added_song.innerHTML
|
|
);
|
|
Helper.removeClass(".not-imported", "hide");
|
|
continue;
|
|
}
|
|
var duration = Search.durationToSeconds(
|
|
data.contentDetails.duration
|
|
);
|
|
var not_matched = false;
|
|
if (
|
|
similarity(data.snippet.title, artist + " - " + title) >
|
|
0.75
|
|
) {
|
|
not_matched = false;
|
|
} else {
|
|
for (var i = 0; i < temptitle.length; i++) {
|
|
var data_title = temptitle[i];
|
|
|
|
if (
|
|
data.snippet.title
|
|
.toLowerCase()
|
|
.indexOf(data_title.toLowerCase()) == -1 ||
|
|
!(
|
|
data.snippet.title.toLowerCase().indexOf("cover") ==
|
|
-1 &&
|
|
title.toLowerCase().indexOf("cover") == -1 &&
|
|
((data.snippet.title.toLowerCase().indexOf("remix") ==
|
|
-1 &&
|
|
title.toLowerCase().indexOf("remix") == -1) ||
|
|
(data.snippet.title
|
|
.toLowerCase()
|
|
.indexOf("remix") != -1 &&
|
|
title.toLowerCase().indexOf("remix") != -1) ||
|
|
!(
|
|
data.snippet.title
|
|
.toLowerCase()
|
|
.indexOf(artist[0].toLowerCase()) == -1 &&
|
|
(data.snippet.channelTitle
|
|
.toLowerCase()
|
|
.indexOf(artist[0].toLowerCase()) == -1 &&
|
|
data.snippet.channelTitle
|
|
.toLowerCase()
|
|
.indexOf("vevo") == -1)
|
|
))
|
|
)
|
|
)
|
|
not_matched = true;
|
|
else if (duration > 1800) not_matched = true;
|
|
}
|
|
}
|
|
|
|
if (!not_matched) {
|
|
matched = true;
|
|
Search.readySubmit(true, {
|
|
id: data.id,
|
|
title: data.snippet.title,
|
|
source: "youtube",
|
|
thumbnail:
|
|
"https://img.youtube.com/vi/" +
|
|
data.id +
|
|
"/mqdefault.jpg",
|
|
duration: duration,
|
|
totalLength: totalNumber - 1
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
if (!matched) {
|
|
Search.readySubmit(false, { totalLength: totalNumber - 1 });
|
|
Helper.log([
|
|
"NO MATCH FOR:",
|
|
"Spotify title: " + title + " " + artist.join(" "),
|
|
"Spotify length: " + length
|
|
]);
|
|
var not_added_song = document.createElement("div");
|
|
not_added_song.innerHTML = not_import_html;
|
|
not_added_song.querySelector(".extra-add-text").innerText =
|
|
title + " - " + artist.join(" ");
|
|
not_added_song
|
|
.querySelector(".extra-add-text")
|
|
.setAttribute("title", title + " - " + artist.join(" "));
|
|
not_added_song
|
|
.querySelector(".extra-button-search")
|
|
.setAttribute(
|
|
"data-text",
|
|
title + " - " + artist.join(" ")
|
|
);
|
|
document
|
|
.querySelector(".not-imported-container")
|
|
.insertAdjacentHTML("beforeend", not_added_song.innerHTML);
|
|
Helper.removeClass(".not-imported", "hide");
|
|
}
|
|
}
|
|
},
|
|
error: function(e) {
|
|
console.error(e);
|
|
}
|
|
});
|
|
}
|
|
},
|
|
error: function(e) {
|
|
console.error(e);
|
|
}
|
|
});
|
|
},
|
|
|
|
readySubmit: function(found, obj) {
|
|
if (Search.submitArrayExpected === null) {
|
|
Search.submitArrayExpected = obj.totalLength;
|
|
}
|
|
if (found) {
|
|
Search.submitArray.push(obj);
|
|
} else {
|
|
Search.submitArrayExpected -= 1;
|
|
}
|
|
if (Search.submitArray.length - 1 == Search.submitArrayExpected) {
|
|
socket.emit("addPlaylist", {
|
|
channel: chan.toLowerCase(),
|
|
songs: Search.submitArray
|
|
});
|
|
/*$.each(Search.submitArray, function(i, data){
|
|
Search.submit(data.id, data.title, data.duration, true, i, Search.submitArray.length - 1, 0, data.duration);
|
|
});*/
|
|
document.getElementById("import_spotify").disabled = false;
|
|
Helper.removeClass("#import_spotify", "hide");
|
|
Helper.addClass("#playlist_loader_spotify", "hide");
|
|
Search.submitArray = [];
|
|
Search.submitArrayExpected = null;
|
|
}
|
|
},
|
|
|
|
submitAndClose: function(id, title, duration, start, end, source, thumbnail) {
|
|
Search.submit(
|
|
id,
|
|
title,
|
|
duration,
|
|
false,
|
|
0,
|
|
1,
|
|
start,
|
|
end,
|
|
source,
|
|
thumbnail
|
|
);
|
|
Helper.setHtml("#results", "");
|
|
Search.showSearch();
|
|
document.getElementById("search").value = "";
|
|
document
|
|
.getElementsByTagName("body")[0]
|
|
.setAttribute("style", "overflow-y:auto");
|
|
Helper.setHtml("#results", "");
|
|
Helper.setHtml("#results-soundcloud", "");
|
|
Helper.removeClass(".main", "blurT");
|
|
Helper.removeClass("#controls", "blurT");
|
|
Helper.removeClass(".main", "clickthrough");
|
|
Helper.css(".search_results", "display", "none");
|
|
},
|
|
|
|
importPlaylist: function(pId, pageToken) {
|
|
token = "";
|
|
var headers;
|
|
var datatype;
|
|
if (pageToken !== undefined) token = "&pageToken=" + pageToken;
|
|
playlist_url =
|
|
"https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&maxResults=49&key=" +
|
|
api_key.youtube +
|
|
"&playlistId=" +
|
|
pId +
|
|
token;
|
|
if (youtube_authenticated) {
|
|
datatype = "html";
|
|
headers = {
|
|
"Content-Type": "application/json",
|
|
Authorization: "Bearer " + access_token_data_youtube.access_token
|
|
};
|
|
} else {
|
|
headers = {}; //'Content-Type': 'application/json'};
|
|
datatype = "jsonp";
|
|
}
|
|
Helper.ajax({
|
|
type: "GET",
|
|
url: playlist_url,
|
|
dataType: datatype,
|
|
//dataType:"jsonp",
|
|
headers: headers,
|
|
success: function(response) {
|
|
response = JSON.parse(response);
|
|
Helper.log(["Import response nr1", response]);
|
|
if (response.error) {
|
|
if (response.error.errors[0].reason == "playlistItemsNotAccessible") {
|
|
var nonce = Helper.randomString(29);
|
|
window.callback = function(data) {
|
|
access_token_data_youtube = data;
|
|
if (access_token_data_youtube.state == nonce) {
|
|
youtube_authenticated = true;
|
|
setTimeout(function() {
|
|
youtube_authenticated = false;
|
|
access_token_data_youtube = {};
|
|
}, access_token_data_youtube.expires_in * 1000);
|
|
Search.importPlaylist(pId, pageToken);
|
|
} else {
|
|
access_token_data_youtube = "";
|
|
console.error("Nonce doesn't match");
|
|
}
|
|
youtube_window.close();
|
|
window.callback = "";
|
|
};
|
|
youtube_window = window.open(
|
|
"/api/oauth#youtube=true&nonce=" + nonce,
|
|
"",
|
|
"width=600, height=600"
|
|
);
|
|
} else {
|
|
Helper.log(["import list error: ", response.error]);
|
|
document.getElementById("import").disabled = false;
|
|
Helper.addClass("#playlist_loader", "hide");
|
|
Helper.removeClass("#import", "hide");
|
|
before_toast();
|
|
M.toast({
|
|
html: "It seems you've entered a invalid url.",
|
|
displayLength: 4000
|
|
});
|
|
}
|
|
} else {
|
|
var ids = "";
|
|
var this_length = 0;
|
|
if (typeof response == "string") response = JSON.parse(response);
|
|
//Search.addVideos(response.items[0].contentDetails.videoId);
|
|
//response.items.shift();
|
|
for (var i = 0; i < response.items.length; i++) {
|
|
var data = response.items[i];
|
|
ids += data.contentDetails.videoId + ",";
|
|
Search.submitYouTubeArrayIds.push(data.contentDetails.videoId);
|
|
this_length += 1;
|
|
Search.submitYouTubeExpected += 1;
|
|
}
|
|
|
|
if (response.nextPageToken) {
|
|
//Search.addVideos(ids, true, 0, false, this_length);
|
|
Search.importPlaylist(pId, response.nextPageToken);
|
|
} else {
|
|
Search.addVideos(Search.submitYouTubeArrayIds);
|
|
//Search.addVideos(ids, true, Search.submitYouTubeExpected, true, this_length);
|
|
//Search.submitYouTubeExpected = 0;
|
|
}
|
|
document.getElementById("import").value = "";
|
|
}
|
|
},
|
|
error: function(e) {
|
|
if (e.status == 403) {
|
|
var nonce = Helper.randomString(29);
|
|
window.callback = function(data) {
|
|
access_token_data_youtube = data;
|
|
if (access_token_data_youtube.state == nonce) {
|
|
youtube_authenticated = true;
|
|
setTimeout(function() {
|
|
youtube_authenticated = false;
|
|
access_token_data_youtube = {};
|
|
}, access_token_data_youtube.expires_in * 1000);
|
|
Search.importPlaylist(pId, pageToken);
|
|
} else {
|
|
access_token_data_youtube = "";
|
|
console.error("Nonce doesn't match");
|
|
}
|
|
youtube_window.close();
|
|
window.callback = "";
|
|
};
|
|
youtube_window = window.open(
|
|
"/api/oauth#youtube=true&nonce=" + nonce,
|
|
"",
|
|
"width=600, height=600"
|
|
);
|
|
} else {
|
|
Helper.log(["import list error: ", response.error]);
|
|
document.getElementById("import").disabled = false;
|
|
Helper.addClass("#playlist_loader", "hide");
|
|
Helper.removeClass("#import", "hide");
|
|
before_toast();
|
|
M.toast({
|
|
html: "It seems you've entered a invalid url.",
|
|
displayLength: 4000
|
|
});
|
|
}
|
|
}
|
|
});
|
|
},
|
|
|
|
importSpotifyPlaylist: function(url) {
|
|
Helper.ajax({
|
|
method: "get",
|
|
url: url,
|
|
headers: {
|
|
Authorization: "Bearer " + access_token_data.access_token
|
|
},
|
|
success: function(response) {
|
|
response = JSON.parse(response);
|
|
for (var i = 0; i < response.items.length; i++) {
|
|
var data = response.items[i];
|
|
//ids+=data.contentDetails.videoId+",";
|
|
Search.backgroundSearch(
|
|
data.track.name,
|
|
data.track.artists
|
|
.map(function(elem) {
|
|
return elem.name;
|
|
})
|
|
.join(" "),
|
|
Math.floor(data.track.duration_ms / 1000),
|
|
response.total,
|
|
i + response.offset
|
|
);
|
|
}
|
|
if (response.next) {
|
|
Search.importSpotifyPlaylist(response.next);
|
|
}
|
|
},
|
|
error: function(e) {
|
|
document.getElementById("import_spotify").disabled = false;
|
|
Helper.removeClass("#import_spotify", "hide");
|
|
Helper.addClass("#playlist_loader_spotify", "hide");
|
|
before_toast();
|
|
M.toast({
|
|
html: "It seems you've entered a invalid url.",
|
|
displayLength: 4000
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
addVideos: function(ids) {
|
|
var more = false;
|
|
var next_ids = [];
|
|
var request_url =
|
|
"https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key=" +
|
|
api_key.youtube +
|
|
"&id=";
|
|
for (var i = 0; i < ids.length; i++) {
|
|
if (i > 48) {
|
|
more = true;
|
|
next_ids = ids.slice(i, ids.length);
|
|
break;
|
|
}
|
|
request_url += ids[i] + ",";
|
|
}
|
|
Helper.ajax({
|
|
type: "GET",
|
|
url: request_url,
|
|
success: function(response) {
|
|
response = JSON.parse(response);
|
|
|
|
Helper.log([
|
|
"Import response, separate video nr2",
|
|
response,
|
|
"import response, separate video end"
|
|
]);
|
|
var x = 0;
|
|
if (response.error) {
|
|
Search.submitYouTubeError = true;
|
|
}
|
|
for (var i = 0; i < response.items.length; i++) {
|
|
var song = response.items[i];
|
|
if (
|
|
song.contentDetails == undefined ||
|
|
song.contentDetails.duration == undefined
|
|
) {
|
|
Helper.log(["Song without duration", song]);
|
|
continue;
|
|
}
|
|
var duration = Search.durationToSeconds(song.contentDetails.duration);
|
|
if ((longsongs != undefined && !longsongs) || duration < 720) {
|
|
enc_title = song.snippet.title; //encodeURIComponent(song.snippet.title);
|
|
//Search.submit(song.id, enc_title, duration, playlist, i);
|
|
x += 1;
|
|
Search.submitYouTubeArray.push({
|
|
id: song.id,
|
|
title: enc_title,
|
|
duration: duration,
|
|
source: "youtube",
|
|
thumbnail:
|
|
"https://img.youtube.com/vi/" + song.id + "/mqdefault.jpg"
|
|
});
|
|
}
|
|
}
|
|
if (more) Search.addVideos(next_ids);
|
|
else {
|
|
socket.emit("addPlaylist", {
|
|
channel: chan.toLowerCase(),
|
|
songs: Search.submitYouTubeArray
|
|
});
|
|
Search.submitYouTubeArray = [];
|
|
Search.submitYouTubeExpected = 0;
|
|
}
|
|
},
|
|
error: function(e) {
|
|
console.error(e);
|
|
}
|
|
});
|
|
},
|
|
|
|
submit: function(
|
|
id,
|
|
title,
|
|
duration,
|
|
playlist,
|
|
num,
|
|
full_num,
|
|
start,
|
|
end,
|
|
source,
|
|
thumbnail
|
|
) {
|
|
if ((client || Helper.mobilecheck()) && !socket_connected) {
|
|
add_ajax(
|
|
id,
|
|
title,
|
|
duration,
|
|
playlist,
|
|
num,
|
|
full_num,
|
|
start,
|
|
end,
|
|
source,
|
|
thumbnail
|
|
);
|
|
return;
|
|
}
|
|
if (
|
|
offline &&
|
|
document.getElementsByName("addsongs")[0].checked &&
|
|
document.getElementsByName("addsongs")[0].disabled
|
|
) {
|
|
var found_array = [];
|
|
for (var i = 0; i < full_playlist.length; i++) {
|
|
if (full_playlist[i].id == id) found_array.push(i);
|
|
}
|
|
if (found_array.length == 0) {
|
|
List.channel_function({
|
|
type: "added",
|
|
start: start,
|
|
end: end,
|
|
value: {
|
|
added: new Date().getTime() / 1000,
|
|
guids: [1],
|
|
id: id,
|
|
title: title,
|
|
duration: duration,
|
|
now_playing: false,
|
|
votes: 1
|
|
}
|
|
});
|
|
} else {
|
|
List.vote(id, "pos");
|
|
}
|
|
} else {
|
|
/*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true);
|
|
if(u == undefined) u = "";*/
|
|
emit("add", {
|
|
id: id,
|
|
start: start,
|
|
end: end,
|
|
title: title,
|
|
list: chan.toLowerCase(),
|
|
duration: duration,
|
|
source: source,
|
|
thumbnail: thumbnail
|
|
});
|
|
} //[id, decodeURIComponent(title), adminpass, duration, playlist]);
|
|
},
|
|
|
|
durationToSeconds: function(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;
|
|
}
|
|
};
|