var lfmImporter = function() {
var lfmi = null;
var offset = prefs.lfm_importer_start_offset;
var alloffset = 0;
var alldata = new Array();
var limit = 25;
var row;
var tracksdone = 0;
var totaltracks;
var starttime;
function getNextChunk() {
$.ajax({
url: 'plugins/code/lfmimporter.php',
type: "POST",
data: {action: 'getchunk', offset: offset, limit: limit},
dataType: 'json'
})
.done(putTracks)
.fail(function() {
infobar.error(language.gettext('label_general_error'));
});
}
function putTracks(data) {
alldata = data;
alloffset = 0;
if (data.length > 0) {
$('#lfmitable tr:not(:first-child)').remove();
debug.log("LFMIMPORTER","Got data",data);
for (var i in data) {
var tr = $('
', {name: data[i].TTindex}).appendTo('#lfmitable');
tr.append(''+data[i].Albumartist+' | ');
tr.append(''+data[i].Albumname+' | ');
tr.append(''+data[i].Title+' | ');
tr.append(''+data[i].Trackartist+' | ');
tr.append(''+data[i].TrackNo+' | ');
tr.append(''+data[i].Disc+' | ');
tr.append(''+data[i].Playcount+' | ');
tr.append(' | ');
tr.append(' | ');
}
offset += limit;
getNextRow();
} else {
debug.log("LFMIMPORTER","Got all data");
metaHandlers.resetSyncCounts();
}
}
function getNextRow() {
var data = cloneObject(alldata[alloffset]);
lastfm.track.getInfo( { artist: data.Albumartist, track: data.Title },
lfmResponseHandler,
lfmResponseHandler,
alloffset);
alloffset++;
}
function lfmResponseHandler(data, reqid) {
var de = new lfmDataExtractor(data.track);
var trackdata = de.getCheckedData('track');
de = new lfmDataExtractor(trackdata);
debug.trace("LFMIMPORTER","Playcount for",reqid,"is",alldata[reqid].Playcount, de.userplaycount());
row = $('#lfmitable').children('tr[name="'+alldata[reqid].TTindex+'"]');
row.children('td[name="lastfmplaycount"]').html(de.userplaycount());
if (parseInt(alldata[reqid].Playcount) < parseInt(de.userplaycount())) {
debug.mark("LFMIMPORTER","Incrementing Playcount for",alldata[reqid].TTindex,"to",de.userplaycount());
var playlistinfo = {type: 'local', location: ''};
$.each(row.children('td.playlistinfo'), function() {
playlistinfo[$(this).attr('name')] = htmlspecialchars_decode($(this).html());
});
debug.trace("LFMIMPORTER","Using data",playlistinfo);
metaHandlers.fromPlaylistInfo.setMeta(playlistinfo, 'inc', [{attribute: 'Playcount', value: de.userplaycount()}], setSuccess, setFail);
} else {
row.children('td[name="tick"]').html('');
doNext();
}
}
function setSuccess() {
debug.log("LFMIMPORTER","Success");
row.children('td[name="tick"]').html('');
doNext();
}
function setFail() {
debug.warn("LFMIMPORTER","Fail");
row.children('td[name="tick"]').html('');
doNext();
}
function doNext() {
tracksdone++;
$('#lfmiprogress').rangechooser("setRange", {min: 0, max: tracksdone+prefs.lfm_importer_start_offset});
var elapsed = Date.now() - starttime;
var remaining = (elapsed/tracksdone) * (totaltracks - tracksdone - prefs.lfm_importer_start_offset);
$('#lfmiinfo').html(language.gettext('importer_status', [tracksdone+prefs.lfm_importer_start_offset, totaltracks, formatTimeString(elapsed/1000), formatTimeString(remaining/1000)]));
if (alloffset < alldata.length) {
getNextRow();
} else {
getNextChunk();
}
}
function getTotalTracks() {
$.ajax({
url: 'plugins/code/lfmimporter.php',
type: "POST",
data: {action: 'gettotal'},
dataType: 'json'
})
.done(function(data) {
totaltracks = data.total;
if (totaltracks > 0) {
$("#lfmiprogress").rangechooser({
range: data.total,
interactive: false,
startmax: 0,
});
starttime = Date.now();
getNextChunk();
} else {
$('#lfmitable').remove();
$('#lfmimunger').append(''+language.gettext('label_lfm_nonew', [new Date(prefs.lfm_importer_last_import * 1000).toLocaleString()])+'
');
}
})
.fail(function() {
infobar.error(language.gettext('label_general_error'));
});
}
return {
open: function() {
if (lfmi == null) {
lfmi = browser.registerExtraPlugin("lfmi", language.gettext("label_lfm_playcountimporter"), lfmImporter, 'https://fatg3erman.github.io/RompR/Using-Saved-Playlists#editing-your-saved-playlists');
$("#lfmifoldup").append('');
$("#lfmimunger").append('');
$("#lfmimunger").append('');
$("#lfmimunger").append('');
if (lastfm.isLoggedIn()) {
$('#lfmitable').append('
Artist | '+language.gettext('label_album')+' | '+language.gettext('label_track')+' | th class="invisible"> | | '+language.gettext('label_playcount')+' | '+language.gettext('label_lfm_playcount')+' | |
');
getTotalTracks();
} else {
$('#lfmimunger').append(''+language.gettext('label_mustlogintolfm')+'
');
}
lfmi.slideToggle('fast');
} else {
browser.goToPlugin("lfmi");
}
},
handleClick: function(element, event) {
},
close: function() {
lfmi = null;
offset = 0;
alldata = new Array();
alloffset = 0;
tracksdone = 0;
}
}
}();
pluginManager.setAction(language.gettext("label_lfm_playcountimporter"), lfmImporter.open);
lfmImporter.open();