40 const Ci = Components.interfaces;
41 const Cc = Components.classes;
42 const Cr = Components.results;
43 const Cu = Components.utils;
46 "distribution-customization-complete";
50 let
dirSvc =
Cc[
"@mozilla.org/file/directory_service;1"].
52 let iniFile = dirSvc.get(
"XCurProcD",
Ci.nsIFile);
53 iniFile.append(
"distribution");
54 iniFile.append(
"distribution.ini");
56 this._iniFile = iniFile;
63 let ini =
Cc[
"@mozilla.org/xpcom/ini-parser-factory;1"].
65 createINIParser(this._iniFile);
73 locale = this.
_prefs.getCharPref(
"general.useragent.locale");
83 let svc =
Cc[
"@songbirdnest.com/servicepane/bookmarks;1"]
84 .getService(
Ci.sbIBookmarks);
90 let svc =
Cc[
"@songbirdnest.com/servicepane/service;1"]
91 .getService(
Ci.sbIServicePaneService);
97 let svc =
Cc[
"@mozilla.org/preferences-service;1"].
100 return this._prefSvc;
104 let branch = this._prefSvc.getBranch(
null);
110 let svc =
Cc[
"@mozilla.org/network/io-service;1"].
116 _makeURI:
function DIST__makeURI(spec) {
117 return this._ioSvc.newURI(spec,
null,
null);
120 _parseBookmarksSection:
121 function DIST_parseBookmarksSection(aParentNode, section) {
122 var parentNode = aParentNode;
123 if (!(parentNode instanceof
Ci.sbIServicePaneNode)) {
124 parentNode = this._spsSvc.getNode(aParentNode);
126 throw "Failed to find parent node " + aParentNode;
131 for (let
i in
enumerate(this._ini.getKeys(section)))
136 let defaultItemId = -1;
140 for (let
i = 0;
i < keys.length;
i++) {
141 let m = /^item\.(\d+)\.(\w+)\.?(\w*)/.exec(keys[
i]);
143 let [foo, iid, iprop, ilocale] = m;
151 if (keys.indexOf(keys[i] +
"." +
this._locale) >= 0) {
152 items[iid][iprop] = this._ini.getString(section, keys[i] +
"." +
155 items[iid][iprop] = this._ini.getString(section, keys[i]);
161 dump(
"Key did not match: " + keys[i] +
"\n");
166 for (let iid = 0; iid <= maxItemId; iid++) {
170 if (!(
"title" in items[iid])) {
171 dump(
"Distribution.ini: missing title in '" + iid +
"'\n");
177 switch(items[iid][
"type"]) {
179 if (!(
"folderId" in items[iid])) {
180 dump(
"Distribution.ini: missing folderId in '" + iid +
"'\n");
183 newNode = this._bmSvc.addFolder(items[iid][
"title"]);
184 this._parseBookmarksSection(newNode,
185 "BookmarksFolder-" + items[iid][
"folderId"]);
189 if (
"type" in items[iid]) {
190 dump(
"Distribution.ini: unknown type '" + items[iid][
"type"] +
191 "' for '" + iid +
"'\n");
196 if (!(
"link" in items[iid])) {
197 dump(
"Distribution.ini: missing link in '" + iid +
"'\n");
200 let icon = items[iid][
"icon"];
201 if (
"icon" in items[iid]) {
204 this._makeURI(items[iid][
"icon"]);
206 dump(
"Distribution.ini: invalid icon URL '" + items[iid][
"icon"] +
207 "' for '" + iid +
"'\n");
213 newNode = this._bmSvc.addBookmarkAt(items[iid][
"link"],
221 if (
"weight" in items[iid]) {
223 this._spsSvc.sortNode(newNode);
226 return this._checkCustomizationComplete();
229 _customizationsApplied:
false,
230 applyCustomizations:
function DIST_applyCustomizations() {
231 this._customizationsApplied =
true;
233 return this._checkCustomizationComplete();
238 this._prefSvc.QueryInterface(
Ci.nsIObserver);
239 this._prefSvc.observe(
null,
"reload-default-prefs",
null);
242 _bookmarksApplied:
false,
243 applyBookmarks:
function DIST_applyBookarks() {
244 this._bookmarksApplied =
true;
246 return this._checkCustomizationComplete();
252 if (!sections[
"Global"])
253 return this._checkCustomizationComplete();
254 let globalPrefs =
enumToObject(this._ini.getKeys(
"Global"));
255 if (!(globalPrefs[
"id"] && globalPrefs[
"version"] && globalPrefs[
"about"]))
256 return this._checkCustomizationComplete();
260 bmProcessedPref = this._ini.getString(
"Global",
261 "bookmarks.initialized.pref");
264 bmProcessedPref =
"distribution." +
265 this._ini.getString(
"Global",
"id") +
".bookmarksProcessed";
268 let bmProcessed =
false;
270 bmProcessed = this.
_prefs.getBoolPref(bmProcessedPref);
275 if (sections[
"Bookmarks"])
277 this.
_prefs.setBoolPref(bmProcessedPref,
true);
279 return this._checkCustomizationComplete();
282 _prefDefaultsApplied:
false,
283 applyPrefDefaults:
function DIST_applyPrefDefaults() {
284 this._prefDefaultsApplied =
true;
286 return this._checkCustomizationComplete();
291 if (!sections[
"Global"])
292 return this._checkCustomizationComplete();
293 let globalPrefs =
enumToObject(this._ini.getKeys(
"Global"));
294 if (!(globalPrefs[
"id"] && globalPrefs[
"version"] && globalPrefs[
"about"]))
295 return this._checkCustomizationComplete();
302 defaults.setCharPref(
"distribution.id", this._ini.getString(
"Global",
"id"));
303 defaults.setCharPref(
"distribution.version",
304 this._ini.getString(
"Global",
"version"));
306 let partnerAbout =
Cc[
"@mozilla.org/supports-string;1"].
308 if (globalPrefs[
"about." + this._locale]) {
309 partnerAbout.data = this._ini.getString(
"Global",
"about." + this._locale);
311 partnerAbout.data = this._ini.getString(
"Global",
"about");
313 defaults.setComplexValue(
"distribution.about",
314 Ci.nsISupportsString, partnerAbout);
316 if (sections[
"Preferences"]) {
317 for (let
key in
enumerate(this._ini.getKeys(
"Preferences"))) {
319 let
value = eval(this._ini.getString(
"Preferences",
key));
320 switch (typeof value) {
322 defaults.setBoolPref(
key, value);
325 defaults.setIntPref(
key, value);
328 defaults.setCharPref(
key, value);
331 defaults.setCharPref(
key, value);
342 let localizedStr =
Cc[
"@mozilla.org/pref-localizedstring;1"].
345 if (sections[
"LocalizablePreferences"]) {
346 for (let
key in
enumerate(this._ini.getKeys(
"LocalizablePreferences"))) {
348 let
value = eval(this._ini.getString(
"LocalizablePreferences",
key));
349 value = value.replace(
"%LOCALE%", this._locale,
"g");
350 localizedStr.data =
"data:text/plain," +
key +
"=" +
value;
351 defaults.setComplexValue(
key,
Ci.nsIPrefLocalizedString, localizedStr);
356 if (sections[
"LocalizablePreferences-" + this._locale]) {
357 for (let
key in
enumerate(this._ini.getKeys(
"LocalizablePreferences-" +
this._locale))) {
359 let
value = eval(this._ini.getString(
"LocalizablePreferences-" +
this._locale,
key));
360 localizedStr.data =
"data:text/plain," +
key +
"=" +
value;
361 defaults.setComplexValue(
key,
Ci.nsIPrefLocalizedString, localizedStr);
366 return this._checkCustomizationComplete();
369 _checkCustomizationComplete:
function DIST__checkCustomizationComplete() {
370 let prefDefaultsApplied = this._prefDefaultsApplied || !this._iniFile;
371 if (this._customizationsApplied && this._bookmarksApplied &&
372 prefDefaultsApplied) {
373 let
os =
Cc[
"@mozilla.org/observer-service;1"].
381 while (UTF8Enumerator.hasMore())
382 yield UTF8Enumerator.getNext();
function enumerate(UTF8Enumerator)
const DISTRIBUTION_CUSTOMIZATION_COMPLETE_TOPIC
getService(Ci.sbIFaceplateManager)
function enumToObject(UTF8Enumerator)
function DistributionCustomizer()
__defineGetter__("Application", function(){delete this.Application;return this.Application=Cc["@mozilla.org/fuel/application;1"].getService(Ci.fuelIApplication);})
_getSelectedPageStyle s i