diff options
author | dave@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) |
commit | acdb11dbee33393b0e0f4d33b49a7e659b8666ba (patch) | |
tree | a66e7d25c6222fbaded1c1f3a997f39289dd3149 /bandwagon | |
parent | a33fa50b30555b873e374c3bc5359b84fc5fd5a0 (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.js | 70 | ||||
-rw-r--r-- | bandwagon/content/scripts/model/addon.js | 14 | ||||
-rw-r--r-- | bandwagon/content/ui/collectionsPaneController.js | 2 | ||||
-rw-r--r-- | bandwagon/content/ui/overlays/browserOverlayController.js | 131 | ||||
-rw-r--r-- | bandwagon/content/ui/settings-fennec.xul | 11 | ||||
-rw-r--r-- | bandwagon/defaults/preferences/bandwagon.js | 1 | ||||
-rw-r--r-- | bandwagon/locale/en-US/browserOverlay.properties | 2 |
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 |