var gAS_Controller = { Cc: Components.classes, Ci: Components.interfaces, _preferences: null, load: function() { var prefService = this.Cc["@mozilla.org/preferences-service;1"] .getService(this.Ci.nsIPrefService); this._preferences = prefService.getBranch("extensions.audioscrobbler."); this._preferences.QueryInterface(this.Ci.nsIPrefBranch2) .addObserver("", this, false); this._as = this.Cc["@skrul.com/audioscrobbler-service;1"] .getService(this.Ci.sbIAudioscrobblerService); this._as.addObserver(this); this._view = this.Cc["@skrul.com/songbird-xml-tree-view;1"] .createInstance(this.Ci.sbIXMLTreeView); var tree = document.getElementById("recenttracksTree"); tree.view = this._view; this._updateFeedTree(); this._updateUI(); }, unload: function() { this._preferences.QueryInterface(this.Ci.nsIPrefBranch2) .removeObserver("", this); this._as.removeObserver(this); }, observe: function(aSubject, aTopic, aData) { if(aTopic == "nsPref:changed") { this._updateUI(); } if(aTopic == "userfeed-updated") { this._updateFeedTree(); } }, openPreferences: function() { var features = "chrome,titlebar,toolbar,centerscreen,modal"; window.openDialog("chrome://audioscrobbler/content/preferences.xul", "Preferences", features); }, _updateUI: function() { var username = document.getElementById("audioscrobblerUsername"); var status = document.getElementById("audioscrobblerStatus"); username.value = this._preferences.getCharPref("username"); var s; switch(this._preferences.getIntPref("status")) { case this.Ci.sbIAudioscrobblerService.STATUS_NOCREDENTIALS: s = "Click 'Preferences' to set up"; break; case this.Ci.sbIAudioscrobblerService.STATUS_READY: s = "Ready"; break; case this.Ci.sbIAudioscrobblerService.STATUS_BADPASS: s = "Bad authorization, please check your password"; break; } status.value = s; }, _updateFeedTree: function() { var doc = this._as.getUserFeedData("recenttracks"); if(doc) { this._view.document = doc; } } }