var info_lastfm = function() { var me = "lastfm"; var medebug = "LASTFM PLUGIN"; function formatLastFmError(lfmdata, type) { if (lfmdata.errorcode() == 6) { return '
'+taglist[i].name+' | '; } } html += '
';
for(var i in similies) {
html += ' ';
html += ' ';
}
html += '
|
'; html += ''+language.gettext("lastfm_releasedate")+' : '+lfmdata.releasedate(); html += '
'; } html += ''+lastfm.formatBio(lfmdata.bio())+'
'; var tracks = lfmdata.tracklisting(); debug.trace(medebug,"Track Listing",tracks); if (tracks && tracks.length > 0) { var dh = false; for(var i in tracks) { if (tracks[i].name) { if (!dh) { html += ''+lastfm.formatBio(lfmdata.bio())+'
'; html += ''; return html; } return { getRequirements: function(parent) { return ['musicbrainz']; }, collection: function(parent, artistmeta, albummeta, trackmeta) { debug.trace(medebug, "Creating data collection"); var self = this; var displaying = false; this.populate = function() { $('#love').addClass('notloved').makeSpinner(); self.artist.populate(); self.album.populate(); self.track.populate(); } this.displayData = function() { displaying = true; self.artist.doBrowserUpdate(); self.album.doBrowserUpdate(); self.track.doBrowserUpdate(); } this.stopDisplaying = function() { $('#love').stopSpinner(); displaying = false; } this.handleClick = function(source, element, event) { debug.trace(medebug,parent.nowplayingindex,source,"is handling a click event"); if (element.hasClass('clickremovetag')) { var tagname = element.parent().prev().children().text(); debug.trace(medebug,parent.nowplayingindex,source,"wants to remove tag",tagname); self[source].removetags(tagname); if (prefs.synctags) { parent.setMeta('remove', 'Tags', tagname); } } else if (element.hasClass('clickaddtags')) { var tagname = element.prev().val(); debug.trace(medebug,parent.nowplayingindex,source,"wants to add tags",tagname); self[source].addtags(tagname); if (prefs.synctags) { parent.setMeta('set', 'Tags', tagname.split(',')); } } else if (element.hasClass('clickzoomimage')) { imagePopup.create(element, event, element.next().val()); } else if (element.hasClass('clickunlove')) { self[source].unlove(); if (prefs.synclove) { parent.setMeta('set', 'Rating', '0'); } } else if (element.hasClass('clicklove')) { self[source].love(); if (prefs.synclove) { parent.setMeta('set', 'Rating', prefs.synclovevalue); } } } this.somethingfailed = function(data) { debug.warn(medebug,"Something went wrong",data); } this.justaddedtags = function(type, tags) { debug.trace(medebug,parent.nowplayingindex,"Just added or removed tags",tags,"on",type); self[type].resetUserTags(); self[type].getUserTags(); } this.tagAddFailed = function(type, tags) { $("#tagadd"+type).stopSpinner(); infobar.error(language.gettext("lastfm_tagerror")); debug.warn(medebug,"Failed to modify tags",type,tags); } function formatUserTagData(name, taglist, displaying) { if (displaying) { debug.trace("FUTD","Doing",name,"tags"); var toAdd = new Array(); var toRemove = new Array(); $('table[name="'+name+'tagtable"]').find("tr").each( function() { if (!(findTag($(this).find('a').text(), taglist))) { debug.trace("FUTD","Marking tag",$(this).find('a').text(),"for removal"); toRemove.push($(this)); } }); for(var i in taglist) { debug.trace("FUTD","Checking for addition",taglist[i].name); if (!(findTag2(taglist[i].name, $('table[name="'+name+'tagtable"]')))) { debug.trace("FUTD","Marking Tag",taglist[i].name,"for addition"); toAdd.push(taglist[i]) } } for (var i in toRemove) { toRemove[i].fadeOut('fast', function() { $(this).remove() }); } for (var i in toAdd) { appendTag(name, toAdd[i].name, toAdd[i].url); } } } function doUserLoved(flag) { debug.log("LASTFM","Doing UserLoved With Flags at",flag); if (parent.isCurrentTrack()) { $('#love').stopSpinner(); if (flag) { $('#love').removeClass('notloved').attr('title', language.gettext("lastfm_unlove")).off('click').on('click', nowplaying.unlove); } else { $('#love').removeClass('notloved').addClass('notloved').attr('title', language.gettext("lastfm_lovethis")).off('click').on('click', nowplaying.love); } } if (displaying) { var li = $('li[name="userloved"]'); li.empty(); if (flag) { li.append($('').html(language.gettext("lastfm_loved")+': ')).append(language.gettext("label_yes")+' ') li.append($('', { title: language.gettext("lastfm_unlove"), class: "icon-heart-broken smallicon infoclick clickunlove tooltip" })); } else { li.append($('').html(language.gettext("lastfm_loved")+': ')).append(language.gettext("label_no")+' ') li.append($('', { title: language.gettext("lastfm_lovethis"), class: "icon-heart smallicon infoclick clicklove tooltip notloved" })); } } } function getSearchArtist() { return (albummeta.artist && albummeta.artist != "" && parent.playlistinfo.type != 'stream') ? albummeta.artist : parent.playlistinfo.trackartist; } function sendLastFMCorrections() { try { var updates = { trackartist: (parent.playlistinfo.metadata.artists.length == 1) ? self.artist.name() : parent.playlistinfo.trackartist, album: self.album.name(), title: self.track.name(), image: self.album.image('mega') ? self.album.image('mega') : self.album.image('medium') }; nowplaying.setLastFMCorrections(parent.currenttrack, updates); } catch(err) { debug.fail(medebug,"Not enough information to send corrections"); } } function sendMetadataUpdates(de) { var lfmdata = new lfmDataExtractor(trackmeta.lastfm.track); nowplaying.setMetadataFromLastFM(parent.nowplayingindex, {Playcount: lfmdata.userplaycount()}); } this.artist = function() { var retries = 10; return { populate: function() { if (artistmeta.lastfm === undefined) { debug.mark(medebug,parent.nowplayingindex,"artist is populating",artistmeta.name); lastfm.artist.getInfo( {artist: artistmeta.name}, this.lfmResponseHandler, this.lfmResponseHandler ); } else { debug.trace(medebug,parent.nowplayingindex,"artist is already populated",artistmeta.name); } }, lfmResponseHandler: function(data) { debug.trace(medebug,parent.nowplayingindex,"got artist data for",artistmeta.name); debug.trace(medebug,data); var de = new lfmDataExtractor(data); artistmeta.lastfm = de.getCheckedData('artist'); if (artistmeta.musicbrainz_id == "") { var mbid = null; try { mbid = data.artist.mbid || null; } catch(err) { mbid = null; } debug.log(medebug,parent.nowplayingindex,"has found a musicbrainz artist ID",mbid); artistmeta.musicbrainz_id = mbid; } self.artist.doBrowserUpdate(); }, tryForAllmusicImage: function() { if (typeof artistmeta.allmusic == 'undefined' || typeof artistmeta.allmusic.artistlink === 'undefined') { debug.shout(medebug,"Allmusic artist link not back yet"); retries--; if (retries > 0) { setTimeout(self.artist.tryForAllmusicImage, 2000); } else { debug.shout(medebug,"Artist giving up waiting for musicbrainz"); } } else if (artistmeta.allmusic.artistlink === null) { debug.shout(medebug,"No Allmusic artist bio link found"); } else { debug.shout(medebug,"Getting allmusic bio from",artistmeta.allmusic.artistlink); $.post('browser/backends/getamimage.php', {url: artistmeta.allmusic.artistlink}) .done( function(data) { debug.log(medebug,"Got Allmusic Image", data); if (displaying) { var image = $('