").html(blob);
var r = yt.find(".tbl tr");
// results are in a table - we want first two items - score and link
for (n = 0; n < r.length; n++) {
var release = {};
var $row = $(r[n]);
release.score = $row.children()[0].innerHTML;
var $a = $row.find('a');
release.href = $a.eq(0).attr('href'); // first link in row
release.name = $a.eq(0).text(); // name
/*
if ((release.score > 80) && release.href) {
console.log (n+" "+release.score+" "+release.name+" "+release.href);
mbr.push(release);
}
*/
if ((mbr.length <= 5) && release.href) {
console.log(n + " " + release.score + " " + release.name + " " + release.href);
mbr.push(release);
}
}
console.log("Total " + mbr.length);
scrapeArtPartTwo(0, mbr);
}
});
}
function scrapeArt2(q) {
console.log("scrapeArt () val=<" + q + ">");
q = q.replace(/ /g, " ");
q = q.replace(/ /g, "+");
var url = "https://www.amazon.co.uk/s/ref=nb_sb_noss_1?url=search-alias%3Dpopular&field-keywords=" + q;
console.log("URL = " + url);
// $("#youtubeSearching").show ();
var mbr = [];
proxyFetchText(url, function (err, blob) {
if (err) console.log("Scrape failed");
else {
var n;
var yt = $("
").html(blob);
// var r = yt.find(".s-item-container img");
var r = yt.find(".s-image-fixed-height img");
var tb = $('#albumArtResultsTable');
// console.log ("Amazon scrape s-item-container count "+r.length);
console.log("Amazon scrape s-image-fixed-height count " + r.length);
for (n = 0;
(n < r.length) && (scrapeArtUrls.length < 5); n++) {
var href = r.eq(n).attr("src");
console.log("Image url " + href);
// href = href.replace ("https","http");
// var srcset = r.eq(n).attr("srcset");
// console.log ("srcset[0] "+srcset.split(" ")[0]);
var i = scrapeArtUrls.length;
tb.append('
');
if (href.startsWith("//")) href = "http:" + href;
scrapeArtUrls.push(href);
}
$('#artSearching').hide();
bottomLine();
}
});
}
function searchItemArt() {
console.log("searchItemArt");
$('#searchItemModal').modal("hide");
var tb = $('#albumArtResultsTable');
tb.children().remove();
var id = selectedSearchItem.id;
var album = '';
var name = '';
if (isAlbum(id)) {
album = selectedSearchItem.album;
var urlTail = 'albumDetails&id=' + id + '&time=' + new Date().getTime(); // IE
$.getJSON('b2gci.fcgi', urlTail, function (data) {
$('#albumArtModal').modal();
$("#albumArtBottomLine").hide();
$('#artSearching').show();
console.log("artist " + data.artist);
console.log("album = " + album);
$("#albumArtArtist").text(data.artist);
$("#albumArtAlbum").text(album);
scrapeArtUrls = [];
scrapeArtId = id;
scrapeArt(data.artist + " " + album);
});
} else alert("Albums Only");
}
function searchItemArt2() {
console.log("searchItemArt2");
$('#searchItemModal').modal("hide");
var tb = $('#albumArtResultsTable');
tb.children().remove();
var id = selectedSearchItem.id;
var album = '';
var name = '';
if (isAlbum(id)) {
album = selectedSearchItem.album;
var urlTail = 'albumDetails&id=' + id + '&time=' + new Date().getTime(); // IE
$.getJSON('b2gci.fcgi', urlTail, function (data) {
$('#albumArtModal').modal();
$("#albumArtBottomLine").hide();
$('#artSearching').show();
console.log("artist " + data.artist);
console.log("album = " + album);
$("#albumArtArtist").text(data.artist);
$("#albumArtAlbum").text(album);
scrapeArtUrls = [];
scrapeArtId = id;
scrapeArt2(data.artist + " " + album);
});
} else alert("Albums Only");
}
function blockProgressSliderUpdates() {
clearTimeout(bpsuTimer);
enableProgressSliderUpdates = false;
bpsuTimer = setTimeout(function () {
enableProgressSliderUpdates = true;
}, 2500);
}
function progressChange() {
// console.log ("progressChange ()");
// console.log ("Progress = "+$("#progressSlider").val());
var pos = $("#progressSlider").val();
var urlTail = 'seek&pos=' + pos + '&time=' + new Date().getTime(); // IE
$.getJSON('b2gci.fcgi', urlTail, function (data) {});
blockProgressSliderUpdates();
// displayTimeLeft (nowPlaying.duration-nowPlaying.duration*pos/1000,nowPlaying.duration);
displayTimeLeft2(nowPlaying.duration * pos / 1000, nowPlaying.duration);
}
function progressInput() {
console.log("progressInput ()");
// console.log ("Progress = "+$("#progressSlider").val());
var pos = $("#progressSlider").val();
console.log("calculated time " + nowPlaying.duration * pos / 1000);
blockProgressSliderUpdates();
// displayTimeLeft (nowPlaying.duration-nowPlaying.duration*pos/1000,nowPlaying.duration);
displayTimeLeft2(nowPlaying.duration * pos / 1000, nowPlaying.duration);
}
function displayTimeLeft(timeLeft, duration) {
// console.log ("displayTimeLeft () timeLeft="+timeLeft+" duration=",duration);
var p = duration - timeLeft;
var pm = Math.floor(p / 60);
var ps = Math.round(p % 60);
var pss = "0" + ps;
var m = Math.floor(timeLeft / 60);
var s = Math.round(timeLeft % 60);
var ss = "0" + s;
$('#seekTimeLeft').html("Time: " + pm + ":" + pss.substr(-2) + '
' + m + ":" + ss.substr(-
2) + ' ');
}
function displayTimeLeft2(timeIntoTrack, duration) {
// console.log ("displayTimeLeft2 () timeIntoTrack="+timeIntoTrack+" duration=",duration);
var p = timeIntoTrack;
var pm = Math.floor(p / 60);
var ps = Math.round(p % 60);
var pss = "0" + ps;
var tl = duration - timeIntoTrack;
if (tl < 0) tl = 0;
var m = Math.floor((tl) / 60);
var s = Math.round((tl) % 60);
var ss = "0" + s;
$('#seekTimeLeft').html(" " + pm + ":" + pss.substr(-2) + '
' + m + ":" + ss.substr(-
2) + ' ');
}
function openbTubeDebugPanel() {
console.log("openbTubeDebugPanel ()");
$('#bTubeDebugModal').modal();
}
function deleteP3() {
console.log("deleteP3 ()");
var urlTail = 'bTubeDebugs&command=deleteP3&time=' + new Date().getTime(); // IE
$.getJSON('b2gci.fcgi', urlTail, function (data) {});
$('#bTubeDebugModal').modal("hide");
}
function quitProgram() {
console.log("quitProgram ()");
var urlTail = 'bTubeDebugs&command=quit&time=' + new Date().getTime(); // IE
$.getJSON('b2gci.fcgi', urlTail, function (data) {});
$('#bTubeDebugModal').modal("hide");
}
function reboot() {
console.log("reboot ()");
var urlTail = 'bTubeDebugs&command=reboot&time=' + new Date().getTime(); // IE
$.getJSON('b2gci.fcgi', urlTail, function (data) {});
$('#bTubeDebugModal').modal("hide");
}
function nextFolderUpload() {
var name, artist, album;
for (; folderUploadEnable && currentUpload < uploadFiles.length; currentUpload++) {
name = uploadFiles[currentUpload].name;
if (okToUpload(name)) {
console.log("NextFolderUpload () OKtoUpload " + currentUpload);
console.log(uploadFiles[currentUpload].name);
// console.dir (uploadFiles[currentUpload]);
var path = uploadFiles[currentUpload].webkitRelativePath;
// console.log (path);
var folders = path.split('/');
if (folders.length > 2) {
album = folders[folders.length - 2];
artist = folders[folders.length - 3];
} else if (folders.length == 2) {
album = folders[0].replace(/&/g, "_");
artist = "Unknown";
$('#unknownWarning').show();
} else {
album = "Unknown";
artist = "Unknown";
$('#unknownWarning').show();
}
// console.log ("Artist="+artist+" Album="+album);
var urlTail = 'fileExists&artist=' + encodeURIComponent(artist) +
'&album=' + encodeURIComponent(album) +
'&name=' + encodeURIComponent(name) + '&time=' + new Date().getTime(); // IE
$.getJSON('b2gci.fcgi', urlTail, function (exists) {
if (exists) {
console.log("skipping " + name);
currentUpload++;
uploadTry = 1;
if (folderUploadEnable && (currentUpload < uploadFiles.length)) {
bulkUploadProgress(0);
nextFolderUpload();
} else {
folderUploadEnable = false;
$('#folderUploading').hide();
}
} else {
//************************************************************
var formData = new FormData();
formData.append(album, uploadFiles[currentUpload], name);
$.ajax({
xhr: function () {
var xhr = new window.XMLHttpRequest();
xhr.upload.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
bulkUploadProgress(Math.round(100 * evt.loaded / evt
.total));
}
}, false);
return xhr;
},
url: 'b2cgi.fcgi?upload&artist=' + encodeURIComponent(artist),
type: 'POST',
data: formData,
cache: false,
dataType: 'json',
processData: false,
contentType: false,
success: function (data, textStatus, jqXHR) {
checkUpload(function (status) {
if (status) {
currentUpload++;
uploadTry = 1;
if (folderUploadEnable && (currentUpload < uploadFiles
.length)) {
bulkUploadProgress(0);
nextFolderUpload();
} else {
$('#folderUploading').hide();
searchFunction(); // refresh
listalbumAndArtistFunction(selectedAlbum);
refreshNowPlaying();
folderUploadEnable = false;
}
} else uploadOver("upload success");
});
},
error: function (jqXHR, textStatus, errorThrown) {
console.log("nextFolderUpload error try = " + uploadTry + " status " +
tetxStatus);
checkUpload(function (status) {
if (status) {
if (folderUploadEnable && (uploadTry < 3)) {
uploadTry++;
bulkUploadProgress(0);
nextFolderUpload();
} else {
folderUploadEnable = false;
$('#folderUploading').hide();
alert("Upload error: " + textStatus + " file = " +
uploadFiles[currentUpload].name);
}
} else uploadOver("upload error");
});
}
});
//************************************************************
}
}).fail(function (jqxhr, textStatus, error) {
console.log("fileExists Failed - fastcgi tied up probably");
if (folderUploadEnable && (uploadTry < 5)) {
uploadTry++;
bulkUploadProgress(0);
setTimeout(nextFolderUpload, 3000);
} else {
$('#folderUploading').hide();
folderUploadEnable = false;
alert("Upload error: " + textStatus + " file = " + uploadFiles[currentUpload].name);
}
});
break;
}
}
if (currentUpload >= uploadFiles.length) uploadOver("call at end of NextFolderUpload");
return;
}
function uploadOver(caller) {
console.log("uploadOver called by " + caller);
$('#folderUploading').hide();
searchFunction();
listalbumAndArtistFunction(selectedAlbum);
refreshNowPlaying();
folderUploadEnable = false;
}
function okToUpload(name) {
if (name.toLowerCase().indexOf(".jpg") != -1) return true;
if (name.toLowerCase().indexOf(".wav") != -1) return true;
if (name.toLowerCase().indexOf(".mp3") != -1) return true;
if (name.toLowerCase().indexOf(".flac") != -1) return true;
if (name.toLowerCase().indexOf(".m4a") != -1) return true;
return false;
}
/*
function folderUploadOnChange (e){
console.log ("folderUploadOnChange ()");
console.dir (e.files);
getSpace (function (space){
freeSpace = space;
$('#unknownWarning').hide ();
uploadFiles = e.files;
var f = $('#bulkForm');
f.children().remove();
f.append('
');
currentUpload = 0;
folderUploadEnable = true;
$('#folderUploading').show ();
folderUploadCount = 0;
bulkUploadProgress (0);
nextFolderUpload ();
});
}
*/
function folderUploadOnChange(e) {
console.log("folderUploadOnChange ()");
console.dir(e.files);
checkUpload(function (result) {
$('#unknownWarning').hide();
uploadFiles = e.files;
var f = $('#bulkForm');
f.children().remove();
f.append(
'
'
);
currentUpload = 0;
folderUploadEnable = true;
$('#folderUploading').show();
folderUploadCount = 0;
bulkUploadProgress(0);
nextFolderUpload();
});
}
function folderUploadCancel() {
folderUploadEnable = false;
}
function uploadSelect() {
// console.log ("uploadSelect () checked = "+$("#bulkOption").prop("checked"));
if ($("#bulkOption").prop("checked")) {
$("#bulkDiv").show();
$("#fileDiv").hide();
} else {
$("#bulkDiv").hide();
$("#fileDiv").show();
}
}
function truncate(s) {
if (s.length > 20) return s.substring(0, 20) + '...';
else return s;
}
function bulkUploadProgress(pc) {
var n = currentUpload + 1;
var name = truncate(uploadFiles[currentUpload].name);
$('#folderUploadProgress').html(' Sending ' + n + ' of ' + uploadFiles.length + " " + pc + "% " +
name);
}
function makeEQSlider(band, level, text) {
return ('
' +
'
' + text + ' ');
}
var freqs = ["31Hz", "62Hz", "125Hz", "250Hz", "500Hz", "1kHz", "2kHz", "4kHz", "8kHz", "16kHz"];
function refreshEQ() {
console.log("refreshEQ ");
var urlTail = 'getEQ';
$.getJSON('b2gci.fcgi', urlTail, function (data) {
console.log("refreshEQ");
console.dir(data);
var s = $('#sliders');
s.children().remove();
var n;
for (n = 0; n < data.length; n++) {
s.append(makeEQSlider(n, data[n], freqs[n]));
}
$(".eqslider").on("input", eqChange);
$(".eqslider").on("change", eqChange);
});
}
function eqChange() {
var band = this.name.slice(2);
var level = this.value;
console.log("eqChange () band " + band + " value=" + level);
// console.dir (this);
var urlTail = 'setEQ&band=' + band + '&level=' + level;
$.getJSON('b2gci.fcgi', urlTail, function (data) {});
}
function equaliserFlat() {
console.log("equaliserFlat ()");
for (n = 0; n < 10; n++) {
$("#eq" + n).prop("value", 50);
var urlTail = 'setEQ&band=' + n + '&level=50';
$.getJSON('b2gci.fcgi', urlTail, function (data) {});
}
}
function gotMusicbrainzMetadata (error, mbd){
$('#fetchingArt').hide();
if (error) console.log ("gotMusicbrainzMetadata: "+error);
else {
console.log ("gotMusicbrainzMetadata got ",mbd);
displayMetadata (true);
}
}
function getMusicbrainzTracks (releases, index, callback){
if (index >= releases.length) callback ("No track data");
release = releases[index];
console.log ("getMusicbrainzTracks () Release "+index+" = "+release.title);
musicbrainzMetadata.album = release.title;
url = 'http://musicbrainz.org/ws/2/release/'+release.id;
urlTail = 'inc=recordings+artist-credits&fmt=json';
console.log ("Musicbrainz request "+url+' '+urlTail);
$.getJSON(url,urlTail,function(data){
console.log ("Musicbrainz release (track) data = ",data);
console.log ("Artist = "+data['artist-credit'][0].name);
musicbrainzMetadata.artist = data['artist-credit'][0].name;
var tracks = data.media[0].tracks;
console.log ("Track Count ="+tracks.length);
if (tracks.length){
for (var n=0;n
'
+cddb[i].album+''+cddb[i].artist+' ');
di++;
}
selectedcddb = 0;
pickCddb (0,display);
}
else {
$('#CDDBMessage').text("Found no matches");
}
}
function listCDDBFunction (display) {
command = 'getCDDB&' + new Date ().getTime(); // IE
$.getJSON('b2gci.fcgi',command,function(data){
console.log ("getCDDB result ",data);
cddb = data;
displayMetadata (display);
});
};
function showCDDBTracks (){
// console.log ("showCDDTracks()",cddb);
var ul = $('#CDDBTracks');
ul.children().remove();
for (var n=0;n'+cddb[selectedcddb].tracks[n]+'');
$('#CDDBModal').modal();
}
function pickCddb (i,display){
selectedcddb = i;
var box = $('#cddbChoiceBox');
box.children().remove();
if (cddb) {
tracks = cddb[i].tracks[0]+"
"+cddb[i].tracks[1]+"
"+cddb[i].tracks[2]+"
...";
box.append (''
+cddb[i].album+''+cddb[i].artist+' ');
}
else
box.append ('No Matches ');
if (cddb[i].art)
$('#cdbox').html (' ');
else
$('#cdbox').html ('
');
setCDBoxHeight ();
}
/*
function pickCddb (i,display){
selectedcddb = i;
if (cddb) $("#cddbChoice").html(cddb[i].album+" "+cddb[i].artist);
else $("#cddbChoice").html("No matches");
if (cddb[i].art)
$('#cdbox').html (' ');
else
$('#cdbox').html ('
');
setCDBoxHeight ();
}
*/