Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bandwagon
diff options
context:
space:
mode:
authordave@33eels.com <dave@33eels.com@4eb1ac78-321c-0410-a911-ec516a8615a5>2009-09-25 16:01:09 (GMT)
committer dave@33eels.com <dave@33eels.com@4eb1ac78-321c-0410-a911-ec516a8615a5>2009-09-25 16:01:09 (GMT)
commitacdb11dbee33393b0e0f4d33b49a7e659b8666ba (patch)
treea66e7d25c6222fbaded1c1f3a997f39289dd3149 /bandwagon
parenta33fa50b30555b873e374c3bc5359b84fc5fd5a0 (diff)
Fix for bug 509081 - [E-2.2.1] [Fennec] Automatic Add-on Installation
git-svn-id: http://svn.mozilla.org/addons/trunk@52336 4eb1ac78-321c-0410-a911-ec516a8615a5
Diffstat (limited to 'bandwagon')
-rw-r--r--bandwagon/components/bandwagon-service.js70
-rw-r--r--bandwagon/content/scripts/model/addon.js14
-rw-r--r--bandwagon/content/ui/collectionsPaneController.js2
-rw-r--r--bandwagon/content/ui/overlays/browserOverlayController.js131
-rw-r--r--bandwagon/content/ui/settings-fennec.xul11
-rw-r--r--bandwagon/defaults/preferences/bandwagon.js1
-rw-r--r--bandwagon/locale/en-US/browserOverlay.properties2
7 files changed, 185 insertions, 46 deletions
diff --git a/bandwagon/components/bandwagon-service.js b/bandwagon/components/bandwagon-service.js
index dbaa927..11b579f 100644
--- a/bandwagon/components/bandwagon-service.js
+++ b/bandwagon/components/bandwagon-service.js
@@ -296,15 +296,28 @@ BandwagonService.prototype = {
}
var installedExtensions = Bandwagon.Util.getInstalledExtensions();
+ var autoinstallBlacklist = Bandwagon.Preferences.getPreferenceList("autoinstall_blacklist");
+ var addons = [];
- var doAutoInstall = function(addon)
+ addon: for (var id in localAutoInstaller.addons)
{
+ var addon = localAutoInstaller.addons[id];
+
for (var i=0; i<installedExtensions.length; i++)
{
if (installedExtensions[i].id == addon.guid)
{
- Bandwagon.Logger.debug("autoinstallExtensions: addon '" + addon.name + "' is already installed");
- return;
+ Bandwagon.Logger.debug("autoinstallExtensions: Won't install '" + addon.name + "': is already installed");
+ continue addon;
+ }
+ }
+
+ for (var i=0; i<autoinstallBlacklist.length; i++)
+ {
+ if (autoinstallBlacklist[i] == addon.guid)
+ {
+ Bandwagon.Logger.debug("autoinstallExtensions: Won't install '" + addon.name + "': is in the autoinstall blacklist");
+ continue addon;
}
}
@@ -312,57 +325,30 @@ BandwagonService.prototype = {
if (canInstall.type != Bandwagon.Model.Addon.INSTALL_YES && canInstall.type != Bandwagon.Model.Addon.INSTALL_YES_IS_EXPERIMENTAL)
{
- Bandwagon.Logger.warn("Can't auto install '" + addon.name + "' because it is not compatible with this application or os.");
- // TODO better warning here
- return;
+ Bandwagon.Logger.warn("autoinstallExtensions: Won't install '" + addon.name + "' because it is not compatible with this application or os.");
+ continue;
}
var installer = addon.getInstaller(Bandwagon.Util.getHostEnvironmentInfo().os);
if (!installer)
{
- Bandwagon.Logger.warn("Can't auto install '" + addon.name + "' because it is not compatible with " + Bandwagon.Util.getHostEnvironmentInfo().os);
- return;
- }
-
- // TODO accept eula here
-
- var params = [];
- params[addon.name] = installer;
-
- var internalCallback = function(url, status)
- {
- Bandwagon.Logger.info("Finished installing '" + url + "'; status = " + status);
- callback();
+ Bandwagon.Logger.warn("autoinstallExtensions: Won't install '" + addon.name + "' because it is not compatible with " + Bandwagon.Util.getHostEnvironmentInfo().os);
+ continue;
}
- Bandwagon.Logger.info("About to auto install the add-on '" + addon.name + "'");
- //Bandwagon.Logger.info(params[addon.name].URL);
- //Bandwagon.Logger.info(params[addon.name].Hash);
- //Bandwagon.Logger.info(params[addon.name].IconURL);
-
- Bandwagon.Util.getMainWindow().InstallTrigger.install(params, internalCallback);
+ addons.push(addon);
}
- var addons = [];
-
- for (var id in localAutoInstaller.addons)
+ if (addons.length)
{
- var addon = localAutoInstaller.addons[id];
- addons.push(addon);
+ Bandwagon.Controller.BrowserOverlay.doFennecInitAutoInstallDialog(addons);
+ }
+ else
+ {
+ Bandwagon.Logger.debug("autoinstallExtensions: none to install");
}
- var callback = function()
- {
- var addon = addons.pop();
-
- if (addon)
- {
- doAutoInstall(addon, callback);
- }
- };
-
- callback();
},
getLocalAutoPublisher: function()
@@ -409,8 +395,6 @@ BandwagonService.prototype = {
for (var i=0; i<installedExtensions.length; i++)
{
- //Bandwagon.Logger.debug("checking addon '" + installedExtensions[i].id + "' against user auto pub prefs (type=" + installedExtensions[i].type + ")");
-
// check if user wants to publish this extension (enabled, type)
if ((
diff --git a/bandwagon/content/scripts/model/addon.js b/bandwagon/content/scripts/model/addon.js
index 037b156..7bcab92 100644
--- a/bandwagon/content/scripts/model/addon.js
+++ b/bandwagon/content/scripts/model/addon.js
@@ -106,6 +106,20 @@ Bandwagon.Model.Addon.prototype.isTheme = function()
return (this.type == 2);
}
+Bandwagon.Model.Addon.prototype.isLocale = function()
+{
+ return (this.type2 == "Locale");
+}
+
+Bandwagon.Model.Addon.prototype.getFennecType = function()
+{
+ if (this.isTheme()) return 4;
+ if (this.isExtension()) return 2;
+ if (this.isLocale()) return 8;
+ if (this.isSearchProvider()) return 1024;
+
+}
+
Bandwagon.Model.Addon.prototype.canInstall = function(env)
{
// check is the extension already installed
diff --git a/bandwagon/content/ui/collectionsPaneController.js b/bandwagon/content/ui/collectionsPaneController.js
index 54cbea8..2f23790 100644
--- a/bandwagon/content/ui/collectionsPaneController.js
+++ b/bandwagon/content/ui/collectionsPaneController.js
@@ -112,7 +112,7 @@ Bandwagon.Controller.CollectionsPane.onViewSelect = function()
for each (var item in elemsAddon)
{
- if (item.getAttribute("type") == "bandwagonAddonExpanded")
+ if (item && item.getAttribute("type") == "bandwagonAddonExpanded")
{
try
{
diff --git a/bandwagon/content/ui/overlays/browserOverlayController.js b/bandwagon/content/ui/overlays/browserOverlayController.js
index a4ded8f..7890ecd 100644
--- a/bandwagon/content/ui/overlays/browserOverlayController.js
+++ b/bandwagon/content/ui/overlays/browserOverlayController.js
@@ -287,5 +287,136 @@ Bandwagon.Controller.BrowserOverlay.doFennecLogin = function()
}
+Bandwagon.Controller.BrowserOverlay.doSetMobileCollection = function(event)
+{
+ Bandwagon.Preferences.setPreference("mobile_sync_collection", document.getElementById("bw-mobile-collection").selectedItem.value);
+}
+
+Bandwagon.Controller.BrowserOverlay.doFennecInitAutoInstallDialog = function(addons)
+{
+ Bandwagon.Logger.debug("in doFennecInitAutoInstallDialog, " + addons.length + " to install");
+
+ // show the addons panel
+
+ document.getElementById("tool-addons").click();
+ top.BrowserUI.showPanel("addons-container");
+
+ setTimeout(function()
+ {
+ // show notification that we're automatically installing
+
+ var bwInstallingNotification = document.getElementById("addons-messages").appendNotification(
+ document.getElementById("bandwagon-strings").getString("fennec.autopublish.notification"),
+ "bw-installing",
+ "",
+ document.getElementById("addons-messages").PRIORITY_WARNING_LOW,
+ []);
+
+ // show the section header
+
+ var sectionHeader = document.createElement("richlistitem");
+ sectionHeader.setAttribute("class", "section-header");
+ var sectionHeaderLabel = document.createElement("label");
+ sectionHeaderLabel.setAttribute("value", document.getElementById("bandwagon-strings").getString("fennec.autopublish.section.header"));
+ sectionHeaderLabel.setAttribute("flex", "1");
+ sectionHeader.appendChild(sectionHeaderLabel);
+ document.getElementById("addons-list").appendChild(sectionHeader);
+
+ // add our prospective addons to the richlistbox
+
+ for (var i=0; i<addons.length; i++)
+ {
+ var addon = addons[i];
+
+ var item = document.createElement("richlistitem");
+ item.setAttribute("id", "bw-install-" + addon.guid);
+ item.setAttribute("addonID", addon.guid);
+ item.setAttribute("typeName", "search");
+ item.setAttribute("type", addon.getFennecType());
+ item.setAttribute("typeLabel", ExtensionsView._strings["addonType." + addon.getFennecType()]);
+ item.setAttribute("name", addon.name);
+ //item.setAttribute("version", addon.version);
+ item.setAttribute("version", "");
+ item.setAttribute("iconURL", addon.icon);
+ item.setAttribute("description", addon.summary);
+ item.setAttribute("homepageURL", addon.learnmore);
+
+ var installer = addon.getInstaller(Bandwagon.Util.getHostEnvironmentInfo().os);
+
+ if (!installer)
+ continue;
+
+ item.setAttribute("xpiURL", installer.URL);
+ item.setAttribute("xpiHash", installer.Hash);
+
+ document.getElementById("addons-list").appendChild(item);
+ }
+
+ var doAutoInstall = function(addon, aCallback)
+ {
+ var aItem = document.getElementById("bw-install-" + addon.guid);
+
+ if (!aItem)
+ return;
+
+ var details = {
+ URL: aItem.getAttribute("xpiURL"),
+ Hash: aItem.getAttribute("xpiHash"),
+ IconURL: aItem.getAttribute("iconURL"),
+ toString: function () { return this.URL; }
+ };
+
+ var params = [];
+ params[aItem.getAttribute("name")] = details;
+
+ var internalCallback = function(aURL, aStatus)
+ {
+ Bandwagon.Logger.info("Finished installing '" + aURL + "'; status = " + aStatus);
+
+ if (aStatus < 0)
+ {
+ // installation failed, add to blacklist
+ Bandwagon.Logger.debug("Installation failed, adding this add-on to blacklist");
+
+ var autoinstallBlacklist = Bandwagon.Preferences.getPreferenceList("autoinstall_blacklist");
+ autoinstallBlacklist.push(aItem.getAttribute("addonID"));
+ Bandwagon.Preferences.setPreferenceList("autoinstall_blacklist", autoinstallBlacklist);
+ }
+
+ setTimeout(aCallback, 1000);
+ }
+
+ // TODO EULA
+
+ InstallTrigger.install(params, internalCallback);
+ }
+
+ // install
+
+ var callback = function()
+ {
+ var addon = addons.shift();
+
+ if (addon)
+ {
+ doAutoInstall(addon, callback);
+ }
+ else
+ {
+ // finished
+
+ Bandwagon.Logger.info("Finishing auto-installing");
+
+ document.getElementById("addons-messages").removeNotification(bwInstallingNotification);
+
+ ExtensionsView.showRestart();
+ }
+ }
+
+ callback();
+
+ }, 2000);
+}
+
window.addEventListener("load", Bandwagon.Controller.BrowserOverlay.initBandwagon, true);
diff --git a/bandwagon/content/ui/settings-fennec.xul b/bandwagon/content/ui/settings-fennec.xul
index 2d0d60e..681b2a9 100644
--- a/bandwagon/content/ui/settings-fennec.xul
+++ b/bandwagon/content/ui/settings-fennec.xul
@@ -4,8 +4,15 @@
<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<setting pref="extensions.bandwagon.login" type="string" title="&username.label;"/>
- <setting pref="extensions.bandwagon.password" type="string" title="&password.label;"/>
- <setting pref="extensions.bandwagon.mobile_sync_collection" type="string" title="&collection.to.sync.label;"/>
+ <setting pref="extensions.bandwagon.password" type="string" inputtype="password" title="&password.label;"/>
+ <setting type="control" title="&collection.to.sync.label;">
+ <menulist id="bw-mobile-collection" onchange="Bandwagon.Controller.BrowserOverlay.doSetMobileCollection()">
+ <menupopup>
+ <menuitem value="red" label="Red"/>
+ <menuitem value="blue" label="blue"/>
+ </menupopup>
+ </menulist>
+ </setting>
<setting type="button" title="&login.label;">
<button label="&login.button;" oncommand="Bandwagon.Controller.BrowserOverlay.doFennecLogin()"/>
</setting>
diff --git a/bandwagon/defaults/preferences/bandwagon.js b/bandwagon/defaults/preferences/bandwagon.js
index 1460f04..32a949c 100644
--- a/bandwagon/defaults/preferences/bandwagon.js
+++ b/bandwagon/defaults/preferences/bandwagon.js
@@ -60,3 +60,4 @@ pref("extensions.bandwagon.login", "");
pref("extensions.bandwagon.amo_host", "addons.mozilla.org");
pref("extensions.bandwagon.mobile_sync_collection", "");
pref("extensions.bandwagon.password", "");
+pref("extensions.bandwagon.autoinstall_blacklist", "");
diff --git a/bandwagon/locale/en-US/browserOverlay.properties b/bandwagon/locale/en-US/browserOverlay.properties
index 1d7d96e..b4454a8 100644
--- a/bandwagon/locale/en-US/browserOverlay.properties
+++ b/bandwagon/locale/en-US/browserOverlay.properties
@@ -5,3 +5,5 @@ newaddons.alert.text=There are new add-ons in your subscription "%S".
fennec.prompt.title=Add-on Collector
fennec.login.error=There was an error logging in. Please check that your email and password are correct.
fennec.login.ok=You are now logged in. Add-ons from your specified collection will be automatically installed on restart.
+fennec.autopublish.notification=Add-on Collector is automatically installing add-ons from your mobile collection
+fennec.autopublish.section.header=Add-ons from your mobile collection