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();