ngEqualizerPresetProviderManager.js
Go to the documentation of this file.
1 /*
2 //
3 // BEGIN NIGHTINGALE GPL
4 //
5 // This file is part of the Nightingale web player.
6 //
7 // http://getnightingale.com
8 //
9 // This file may be licensed under the terms of of the
10 // GNU General Public License Version 2 (the "GPL").
11 //
12 // Software distributed under the License is distributed
13 // on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
14 // express or implied. See the GPL for the specific language
15 // governing rights and limitations.
16 //
17 // You should have received a copy of the GPL along with this
18 // program. If not, go to http://www.gnu.org/licenses/gpl.html
19 // or write to the Free Software Foundation, Inc.,
20 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 //
22 // END NIGHTINGALE GPL
23 //
24 */
25 
26 "use strict";
27 
28 const Cc = Components.classes;
29 const Cu = Components.utils;
30 const Ci = Components.interfaces;
31 const Cr = Components.results;
32 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
33 Cu.import("resource://app/jsmodules/ArrayConverter.jsm");
34 Cu.import("resource://app/jsmodules/DebugUtils.jsm");
35 
40 const LOG = DebugUtils.generateLogFunction("ngEqualizerPresetProviderManager", 2);
41 
42 const PRESETS_CHANGED_TOPIC = "equalizer-presets-changed";
43 
52  LOG("Initializing equalizer preset provider manager");
53  this._providers = [];
54  this._presets = [];
55  XPCOMUtils.defineLazyServiceGetter(this, "_mainProvider",
56  "@getnightingale.com/equalizer-presets/main-provider;1",
57  "ngIMainEqualizerPresetProvider");
58  XPCOMUtils.defineLazyServiceGetter(this, "_observerService",
59  "@mozilla.org/observer-service;1", "nsIObserverService");
60 }
61 
63  classDescription: "Manages equalizer preset providers",
64  classID: Components.ID("{fead9fed-346b-49f1-94ca-21edd9e5fbf8}"),
65  contractID: "@getnightingale.com/equalizer-presets/manager;1",
66  QueryInterface: XPCOMUtils.generateQI([Ci.ngIEqualizerPresetProviderManager,
67  Ci.ngIEqualizerPresetCollection,
68  Ci.nsIObserver]),
70  category: 'app-startup',
71  entry: "ngEqualizerPresetProviderManager",
72  service: true
73  }],
74  _observerService: null,
75 
76  observe: function(aSubject, aTopic, aData) {
77  if(aTopic == "app-startup") {
78  this._observerService.addObserver(this, "profile-after-change", false);
79  }
80  else if(aTopic == "profile-after-change") {
81  this._observerService.removeObserver(this, "profile-after-change");
82 
83  LOG("Adding the default presets");
84  var dProvider = Cc["@getnightingale.com/equalizer-presets/defaults;1"]
85  .getService(Ci.ngIEqualizerPresetProvider);
86  if(!this._providers.length)
87  this.registerPresetProvider(dProvider);
88  else
89  this._providers.splice(0, 0, dProvider);
90 
91  LOG("Adding the user set presets");
92  // those get added secondly, so they override the default presets.
93  this._addPresetsFromProvider(this._mainProvider);
94 
95  this._observerService.addObserver(this, "equalizer-preset-saved", false);
96  this._observerService.addObserver(this, "equalizer-preset-deleted", false);
97  }
98  else if(aTopic == "equalizer-preset-saved"
99  || aTopic == "equalizer-preset-deleted") {
100  this._regeneratePresetsList();
101  }
102  },
103 
104  _providers: null,
105  _mainProvider: null,
106  _presets: null,
107 
108  get providers() {
109  if(this._providers) {
110  LOG("Adding the main provider to the presets and returning them in reverse.");
111  var providers = this._providers;
112  // make sure the main provider is the first one in the array (reverse in the nsIArray generation)
113  providers.push(this._mainProvider.QueryInterface(Ci.ngIEqualizerPresetProvider));
114  return ArrayConverter.nsIArray(providers.reverse());
115  }
116  else
117  throw Cr.NS_ERROR_UNEXPECTED;
118  },
119  get presets() {
120  if(this._presets)
121  return ArrayConverter.nsIArray(this._presets);
122  else
123  throw Cr.NS_ERROR_UNEXPECTED;
124  },
125  getPresetByName: function(aName) {
126  var preset = null;
127  this._presets.some(function(p) {
128  if(p.name == aName) {
129  preset = p;
130  return true;
131  }
132  return false;
133  });
134  return preset;
135  },
136  hasPresetNamed: function(aName) {
137  return this.getPresetByName(aName) != null;
138  },
139  registerPresetProvider: function(aNewProvider) {
140  if(this._providers.indexOf(aNewProvider) == -1 ) {
143  LOG("Adding a new equalizer provider");
144  this._providers.push(aNewProvider);
145 
146  this._addPresetsFromProvider(aNewProvider);
147  LOG("Nearly done adding the provider, just need to notify observers!");
148  this._observerService.notifyObservers(this.presets, PRESETS_CHANGED_TOPIC, null);
149  }
150  else {
151  LOG("Provider already registered");
152  }
153  },
154  unregisterPresetProvider: function(aProvider) {
155  var index = this._providers.indexOf(aProvider);
156  // > 0, so the default preset provider can not be removed.
157  if(index > 0) {
158  LOG("Removed equalizer preset provider");
159  this._providers.splice(index, 1);
160  }
161  this._regeneratePresetsList();
162  },
163 
164  _regeneratePresetsList: function() {
165  LOG("Regenerating presets array");
166  this._presets = [];
167  this._providers.forEach(function(provider) {
168  this._addPresetsFromProvider(provider);
169  }, this);
170  this._addPresetsFromProvider(this._mainProvider);
171  this._presets.sort(function(a, b) {
172  return a.name.localeCompare(b.name);
173  });
174 
175  this._observerService.notifyObservers(this.presets, PRESETS_CHANGED_TOPIC, null);
176  },
177  _addPresetsFromProvider: function(aProvider) {
178  LOG("Adding presets from provider");
179  var providerPresets = aProvider.presets.enumerate(),
180  preset;
181  while(providerPresets.hasMoreElements()) {
182  preset = providerPresets.getNext().QueryInterface(Ci.ngIEqualizerPreset);
183  // Add a preset if there is no user set one.
184  if(aProvider instanceof Ci.ngIMainEqualizerPresetProvider ||
185  (this._mainProvider &&
186  !this._mainProvider.QueryInterface(Ci.ngIEqualizerPresetCollection)
187  .hasPresetNamed(preset.name)))
188  this._presets.push(preset);
189  }
190  LOG("Presets added");
191  }
192 };
193 
194 var NSGetModule = XPCOMUtils.generateNSGetModule([ngEqualizerPresetProviderManager]);
classDescription entry
Definition: FeedWriter.js:1427
id service()
sbDeviceFirmwareAutoCheckForUpdate prototype contractID
sbOSDControlService prototype QueryInterface
sbDeviceFirmwareAutoCheckForUpdate prototype classDescription
return null
Definition: FeedWriter.js:1143
_updateCookies aName
sbDeviceFirmwareAutoCheckForUpdate prototype classID
sbWindowsAutoPlayServiceCfg _xpcom_categories
_updateTextAndScrollDataForFrame aData
function ngEqualizerPresetProviderManager()
sbDeviceFirmwareAutoCheckForUpdate prototype observe