mirror of
				https://github.com/KevinMidboe/zoff.git
				synced 2025-10-29 18:00:23 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			698 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			698 lines
		
	
	
		
			38 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;
 | 
						|
                                    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);
 | 
						|
            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);
 | 
						|
            var x = 0;
 | 
						|
            if(response.error) {
 | 
						|
                Search.submitYouTubeError = true;
 | 
						|
            }
 | 
						|
            for(var i = 0; i < response.items.length; i++) {
 | 
						|
                var song = response.items[i];
 | 
						|
                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;
 | 
						|
}
 | 
						|
};
 |