%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /data/www_bck/varak.net_bck/mpd.varak.net/rompr/
Upload File :
Create Path :
Current File : //data/www_bck/varak.net_bck/mpd.varak.net/rompr/lastfm.js

function LastFM(user) {

    var lastfm_secret="3ddf4cb9937e015ca4f30296a918a2b0";
    var logged_in = false;
    var username = user;
    var token = "";
    this.tunedto = "";
    var self=this;
    var lovebanshown = false;

    if (typeof lastfm_session_key != "undefined") {
        logged_in = true;
    }

    this.getScrobbling = function() {
        return prefs.lastfm_scrobbling ? 1 : 0;
    }
    
    this.showloveban = function(flag) {
        if (logged_in && lovebanshown != flag) {
            lovebanshown = flag;
            $("#lastfm").toggle(2000);
        }
    }
    
    this.isLoggedIn = function() {
        return logged_in;
    }

    this.setscrobblestate = function() {
        prefs.save({ lastfm_scrobbling: $("#scrobbling").is(":checked"), 
                    lastfm_autocorrect: $("#autocorrect").is(":checked"),
                    dontscrobbleradio: $("#radioscrobbling").is(":checked")}
        );
    }

    this.username = function() {
        return username;
    }

    this.login = function (user, pass) {

        username = user;
        var options = {api_key: lastfm_api_key, method: "auth.getToken"};
        var keys = getKeys(options);
        var it = "";

        for(var key in keys) {
            it = it+keys[key]+options[keys[key]];
        }
        it = it+lastfm_secret;
        options.api_sig = hex_md5(it);
        var url = "http://ws.audioscrobbler.com/2.0/";
        var adder = "?";
        var keys = getKeys(options);
        for(var key in keys) {
            url=url+adder+keys[key]+"="+options[keys[key]];
            adder = "&";
        }
        $.get(url, function(data) {
            token = $(data).find("token").text();

            var lfmlog = popupWindow.create(500,400,"lfmlog",true,"Log In to Last.FM");
            $("#popupcontents").append('<table align="center" cellpadding="2" id="lfmlogintable" width="90%"></table>');
            $("#lfmlogintable").append('<tr><td>Please click the button below to open the Last.FM website in a new tab. Enter your Last.FM login details if required then give RompR permission to access your account</td></tr>');
            $("#lfmlogintable").append('<tr><td>You can close the new tab when you have finished but do not close this dialog!</td></tr>');
            $("#lfmlogintable").append('<tr><td align="center"><a href="http://www.last.fm/api/auth/?api_key='+lastfm_api_key+'&token='+token+'" target="_blank">'+
                                        '<button>Click Here To Log In</button></a></td></tr>');
            $("#lfmlogintable").append('<tr><td>Once you have logged in to Last.FM, click the OK button below to complete the process</td></tr>');
            $("#lfmlogintable").append('<tr><td align="center"><button onclick="lastfm.finishlogin()">OK</button></td></tr>');

            popupWindow.open();
        });
    }

    this.finishlogin = function() {
        LastFMSignedRequest( 
            {
                token: token, 
                api_key: lastfm_api_key, 
                method: "auth.getSession"
            },
            function(data) {   
                lastfm_session_key = $(data).find("key").text();
                logged_in = true;
                prefs.save({ 
                    lastfm_session_key: lastfm_session_key,
                    lastfm_user: username
                });
                popupWindow.close();
                $("#lastfmlist").load("lastfmchooser.php");
            },
            function(data) {
                popupWindow.close();
                alert("Failed to log in to Last.FM");
            }
        );
    }

    function LastFMGetRequest(options, success, fail) {
        options.format = "json";
        options.callback = "?";
        var url = "http://ws.audioscrobbler.com/2.0/";
        var adder = "?";
        var keys = getKeys(options);
        for(var key in keys) {
            url=url+adder+keys[key]+"="+(options[keys[key]] == "?" ? "?" : encodeURIComponent(options[keys[key]]));
            adder = "&";
        }
        // Don't use JQuery's getJSON function for cross-site requests as it ignores any
        // error callbacks you give it. I'm using the jsonp plugin, which works.
        $.jsonp({
            url: url,
            timeout: 30000,
            success: success,
            error: fail
        });
    }

    function LastFMSignedRequest(options, success, fail) {

        // We've passed an object but we need the properties to be in alphabetical order
        var keys = getKeys(options);
        var it = "";
        for(var key in keys) {
            it = it+keys[key]+options[keys[key]];
        }
        it = it+lastfm_secret;
        options.api_sig = hex_md5(it);
        $.post("http://ws.audioscrobbler.com/2.0/", options)
            .done(success)
            .fail(fail);

    }

    var getKeys = function(obj) {
        var keys = [];
        for(var key in obj){
            keys.push(key);
        }
        keys.sort();
        return keys;
    }

    function addGetOptions(options, method) {
        options.api_key = lastfm_api_key;
        options.autocorrect = prefs.lastfm_autocorrect ? 1 : 0;
        options.method = method;
    }

    function addSetOptions(options, method) {
        options.api_key = lastfm_api_key;
        options.sk = lastfm_session_key;
        options.method = method;
    }

    this.track = {

        love : function(options,callback,callback2) {
            if (logged_in) {
                addSetOptions(options, "track.love");
                LastFMSignedRequest(
                    options,
                    function() { 
                        callback(options.track,options.artist,true,callback2);
                    },
                    function() { 
                        infobar.notify(infobar.ERROR, "Failed To Make Love"); 
                    }
                );
            }
        },

        unlove : function(options,callback,callback2) {
            if (logged_in) {
                addSetOptions(options, "track.unlove");
                LastFMSignedRequest(
                    options,
                    function() { 
                        callback(options.track,options.artist,false,callback2); 
                    },
                    function() { 
                        infobar.notify(infobar.ERROR, "Failed To Remove Love"); 
                    }
                );
            }
        },

        ban : function(options) {
            if (logged_in) {
                addSetOptions(options, "track.ban");
                LastFMSignedRequest(
                    options,
                    function() { 
                        $("#ban").effect('pulsate', {times: 1}, 2000);
                        if (nowplaying.mpd(-1, 'type') != "stream") {
                            playlist.next();
                        }
                        infobar.notify(infobar.NOTIFY, "Banned "+options.track);
                    },
                    function() { 
                        infobar.notify(infobar.ERROR, "Failed to ban"+options.track); 
                    }
                );
            }
        },

        getInfo : function(options, callback, failcallback) {
            if (username != "") { options.username = username; }
            addGetOptions(options, "track.getInfo");
            LastFMGetRequest(
                options,
                callback,
                function(data) { failcallback({error: "Could not find information about this track"}) }
            );
        },

        getTags: function(options, callback, failcallback) {
            if (username != "") { options.user = username; }
            addGetOptions(options, "track.getTags");
            LastFMGetRequest(
                options,
                callback,
                failcallback
            );
        },

        addTags : function(options, callback, failcallback) {
            if (logged_in) {
                addSetOptions(options, "track.addTags");
                LastFMSignedRequest(    
                    options,
                    function() { callback("track", options.tags) },
                    function() { failcallback("track", options.tags) }
                );
            }
        },

        removeTag: function(options, callback, failcallback) {
            if (logged_in) {
                addSetOptions(options, "track.removeTag");
                LastFMSignedRequest(
                    options,
                    function() { callback("track", options.tag); },
                    function() { failcallback("track", options.tag); }
                );
            }
        },

        updateNowPlaying : function(options) {
            if (logged_in && prefs.lastfm_scrobbling) {
                addSetOptions(options, "track.updateNowPlaying");
                LastFMSignedRequest(    
                    options,
                    function() {  },
                    function() { debug.log("Failed to update Now Playing",options) }
                );
            }
        },

        scrobble : function(options) {
            if (logged_in && prefs.lastfm_scrobbling) {
                if (prefs.dontscrobbleradio && nowplaying.mpd(-1, 'type') != "local") {
                    debug.log("Not Scrobbling because track is not local");
                    return 0;
                }
                debug.log("Last.FM is scrobbling");
                addSetOptions(options, "track.scrobble");
                LastFMSignedRequest(    
                    options,
                    function() { infobar.notify(infobar.NOTIFY, "Scrobbled "+options.track) },
                    function() { infobar.notify(infobar.ERROR, "Failed to scrobble "+options.track) }
                );
            }
        },

        getPlaylist: function(options, callback, failcallback) {
            $.get("getlfmtrack.php?url="+options.url+"&sk="+lastfm_session_key)
            .done( callback ) 
            .complete( function(data) { 
                playlist.saveTrackPlaylist(data.responseText) 
            })
            .fail( failcallback )
        },

        getBuylinks: function(options, callback, failcallback) {
            addGetOptions(options, "track.getBuylinks");
            options.country = prefs.lastfm_country_code;
            LastFMGetRequest(
                options,
                callback,
                failcallback
            );
        }

    }

    this.album = {

        getInfo: function(options, callback, failcallback) {
            addGetOptions(options, "album.getInfo");
            if (username != "") { options.username = username }
            options.autocorrect = prefs.lastfm_autocorrect ? 1 : 0;
            LastFMGetRequest(
                options,
                callback,
                function() { failcallback({error: "Could not find information about this album"}); }
            );
        },

        getTags: function(options, callback, failcallback) {
            addGetOptions(options, "album.getTags");
            if (username != "") { options.user = username }
            LastFMGetRequest(
                options,
                callback,
                failcallback
            );
        },

        addTags : function(options, callback, failcallback) {
            if (logged_in) {
                addSetOptions(options, "album.addTags");
                LastFMSignedRequest(    
                    options,
                    function() { callback("album", options.tags) },
                    function() { failcallback("album", options.tags) }
                );
            }
        },

        removeTag: function(options, callback, failcallback) {
            if (logged_in) {
                addSetOptions(options, "album.removeTag");
                LastFMSignedRequest(
                    options,
                    function() { callback("album", options.tag); },
                    function() { failcallback("album", options.tag); }
                );
            }
        },

        getBuylinks: function(options, callback, failcallback) {
            addGetOptions(options, "album.getBuylinks");
            options.country = prefs.lastfm_country_code;
            LastFMGetRequest(
                options,
                callback,
                failcallback
            );
        }

    }

    this.artist = {

        getInfo: function(options, callback, failcallback) {
            addGetOptions(options, "artist.getInfo");
            if (username != "") { options.username = username }
            LastFMGetRequest(
                options,
                callback,
                function() { failcallback({error: "Could not find information about this artist"}); }
            );
        },

        getTags: function(options, callback, failcallback) {
            if (username != "") { options.user = username }
            addGetOptions(options, "artist.getTags");
            LastFMGetRequest(
                options,
                callback,
                failcallback
            );
        },

        addTags : function(options, callback, failcallback) {
            if (logged_in) {
                addSetOptions(options, "artist.addTags");
                LastFMSignedRequest(    
                    options,
                    function() { callback("artist", options.tags) },
                    function() { failcallback("artist", options.tags) }
                );
            }
        },


        removeTag: function(options, callback, failcallback) {
            if (logged_in) {
                addSetOptions(options, "artist.removeTag");
                LastFMSignedRequest(
                    options,
                    function() { callback("artist", options.tag); },
                    function() { failcallback("artist", options.tag); }
                );
            }
        },

        getImages: function(options, callback, failcallback) {
            addGetOptions(options, "artist.getImages");
            options.limit = "100";
            LastFMGetRequest(
                options,
                callback,
                function() { failcallback( {images: {}}); }
            );
        },

    }

    this.radio = {

        tune: function(options, callback, failcallback) {
            if (logged_in) {
                if (options.station != self.tunedto) {
                    debug.log("Last.FM: Tuning to", options.station);
                    self.tunedto = "";
                    addSetOptions(options, "radio.tune");
                    LastFMSignedRequest(
                        options,
                        function(data) { 
                            self.tunedto = options.station;
                            callback(data);
                        },
                        failcallback
                    );
                } else {
                    callback();
                }
            }
        },

        getPlaylist: function(options, callback, failcallback) {
            if (logged_in) {
                addSetOptions(options, "radio.getPlaylist");
                var keys = getKeys(options);
                var it = "";
                for(var key in keys) {
                    it = it+keys[key]+options[keys[key]];
                }
                it = it+lastfm_secret;
                options.api_sig = hex_md5(it);
                $.post("http://ws.audioscrobbler.com/2.0/", options)
                    .done(  callback )
                    .fail(  failcallback );
            }
        }
    }

    this.user = {

        getNeighbours: function(options, callback, failcallback) {
            addGetOptions(options, "user.getNeighbours");
            LastFMGetRequest(
                options,
                callback,
                failcallback
            )
        },

        getFriends: function(options, callback, failcallback) {
            addGetOptions(options, "user.getFriends");
            LastFMGetRequest(
                options,
                callback,
                failcallback
            )
        },

        getTopTags: function(options, callback, failcallback) {
            addGetOptions(options, "user.getTopTags");
            LastFMGetRequest(
                options,
                callback,
                failcallback
            )
        },

        getTopArtists: function(options, callback, failcallback) {
            addGetOptions(options, "user.getTopArtists");
            LastFMGetRequest(
                options,
                callback,
                failcallback
            )
        }

    }
}

Zerion Mini Shell 1.0