home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / AIMP2 / aimp_2.61.583.exe / $TEMP / YandexPackSetup.msi / fil15422A702B5854BAE1380B3E1254C8F3 < prev    next >
Text File  |  2010-07-12  |  12KB  |  356 lines

  1. var gFinalHeight = 50;
  2. var gSlideIncrement = 1;
  3. var gSlideTime = 10;
  4.  
  5. var gAlertListener = null;
  6. var gAlertTextClickable = false;
  7. var gAlertCookie = "";
  8.  
  9. var gExtensionStrings = null;
  10.  
  11. var gObserverIndex = -1;
  12.  
  13. var gExtensionManager = Cc["@mozilla.org/extensions/manager;1"].getService(Ci.nsIExtensionManager)
  14.                             .QueryInterface(Ci.nsIExtensionManager_MOZILLA_1_8_BRANCH);
  15.  
  16. var gYaSearchService = Cc["@yandex.ru/yasearch;1"].getService(Ci.nsIYaSearch).wrappedJSObject;
  17.  
  18. var gAddonId = gYaSearchService.EXT_ID;
  19. var gAddonXPIUrl = null;
  20.  
  21. function getBrandShortName() {
  22.   var brandStrings = document.getElementById("brandStrings");
  23.   return brandStrings.getString("brandShortName");
  24. }
  25.  
  26. function getExtensionString(key, strings) {
  27.   if (strings)
  28.     return gExtensionStrings.getFormattedString(key, strings);
  29.   return gExtensionStrings.getString(key);
  30. }
  31.  
  32. function prefillAlertInfo() {
  33.   gExtensionStrings = document.getElementById("yasearch-string-bundle-alerts");
  34.   
  35.   var args = window.arguments;
  36.   
  37.   gAlertCookie = args[3];
  38.   gAlertListener = args[4];
  39.   
  40.   document.getElementById('alertImage').setAttribute('src', args[0]);
  41.   document.getElementById('alertTitleLabel').setAttribute('value', args[1]);
  42.   
  43.   document.getElementById('alertTextDescription').innerHTML = args[2].replace(/(<\/?)/g, '$1html:');
  44.   for each (var a in document.getElementById('alertTextDescription').getElementsByTagName("a")) {
  45.     if (a.hasAttribute) {
  46.       a.setAttribute("tooltiptext", a.title || a.href);
  47.       if (a.href == "https://download.yandex.ru/bar/firefox/YandexBar.xpi" && gAlertCookie == "error") {
  48.         a.parentNode.style.display = "none";
  49.         document.getElementById("yaInstallActions").hidden = false;
  50.         _startUpdate(false);
  51.       }
  52.     }
  53.   }
  54. }
  55.  
  56. function onAlertLoad() {
  57.   try {
  58.     var prefService = Cc["@mozilla.org/preferences-service;1"].getService();
  59.     prefService = prefService.QueryInterface(Ci.nsIPrefService);
  60.     var prefBranch = prefService.getBranch(null);
  61.     gSlideIncrement = prefBranch.getIntPref("alerts.slideIncrement");
  62.     gSlideTime = prefBranch.getIntPref("alerts.slideIncrementTime");
  63.   } catch (ex) {}
  64.   
  65.   gSlideTime /= 2;
  66.   
  67.   sizeToContent();
  68.   
  69.   var contentDim = document.getElementById("alertBox").boxObject;
  70.   if (window.innerWidth == contentDim.width + 1)
  71.     --window.innerWidth;
  72.   
  73.   gFinalHeight = window.outerHeight;
  74.   
  75.   window.outerHeight = 1;
  76.   
  77.   _moveAlert();
  78.  
  79.   setTimeout(animateAlert, gSlideTime);
  80. }
  81.  
  82. function _moveAlert() {
  83.   window.moveTo(10, screen.availTop + screen.availHeight - window.outerHeight);
  84. }
  85.  
  86. function animateAlert() {
  87.   if (window.outerHeight < gFinalHeight) {
  88.     window.outerHeight += gSlideIncrement;
  89.     _moveAlert();
  90.     setTimeout(animateAlert, gSlideTime);
  91.   }
  92. }
  93.  
  94. function closeAlert() {
  95.   if (gAlertListener)
  96.     gAlertListener.observe(null, "alertfinished", gAlertCookie);
  97.   
  98.   gExtensionManager.removeUpdateListenerAt(gObserverIndex);
  99.   
  100.   window.close();
  101. }
  102.  
  103. function onAlertClick(aEvent) {
  104.   if (gAlertListener)
  105.     gAlertListener.observe(null, "alertclickcallback", gAlertCookie);
  106.   
  107.   var target = aEvent.target;
  108.   if (target.localName.toLowerCase() == "a" && target.hasAttribute("href"))
  109.     gYaSearchService.loadURI(target.getAttribute("href"), "tab");
  110.   
  111.   return false;
  112. }
  113.  
  114. function _startUpdate(aVisible) {
  115.   gExtensionManager.update([gExtensionManager.getItemForID(gAddonId)], 1, false, new UpdateCheckListener(aVisible));
  116. }
  117.  
  118. function startUpdate() {
  119.   document.getElementById("progressStatus").value = getExtensionString("updatingMsg");
  120.   
  121.   document.getElementById("alertBox").hidden = true;
  122.   document.getElementById("progress").hidden = false;
  123.   
  124.   _startUpdate(true);
  125.   
  126.   sizeToContent();
  127.   
  128.   _moveAlert();
  129. }
  130.  
  131. function skipInstall() {
  132.   gAlertCookie = "cancelled";
  133.   closeAlert();
  134. }
  135.  
  136. function restartApp() {
  137.   const nsIAppStartup = Ci.nsIAppStartup;
  138.   
  139.   var os = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
  140.   var cancelQuit = Cc["@mozilla.org/supports-PRBool;1"].createInstance(Ci.nsISupportsPRBool);
  141.   os.notifyObservers(cancelQuit, "quit-application-requested", null);
  142.    
  143.   if (cancelQuit.data)
  144.     return;
  145.   
  146.   os.notifyObservers(null, "quit-application-granted", null);
  147.   
  148.   var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
  149.   var windows = wm.getEnumerator(null);
  150.   while (windows.hasMoreElements()) {
  151.     var win = windows.getNext();
  152.     if (("tryToClose" in win) && !win.tryToClose())
  153.       return;
  154.   }
  155.   Cc["@mozilla.org/toolkit/app-startup;1"].getService(nsIAppStartup)
  156.                                           .quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);
  157. }
  158.  
  159. function DownloadManager() {
  160.   this._statusFormatKBMB = getExtensionString("statusFormatKBMB");
  161.   this._statusFormatKBKB = getExtensionString("statusFormatKBKB");
  162.   this._statusFormatMBMB = getExtensionString("statusFormatMBMB");
  163. }
  164.  
  165. DownloadManager.prototype = {
  166.   _statusFormatKBMB : null,
  167.   _statusFormatKBKB : null,
  168.   _statusFormatMBMB : null,
  169.   
  170.   onProgress: function(aAddon, aValue, aMaxValue) {
  171.       if (aAddon.id != gAddonId)
  172.         return;
  173.       
  174.       document.getElementById("addonsProgress").value = Math.round((aValue / aMaxValue) * 100);
  175.       
  176.       var status = document.getElementById("addonsProgressStatus");
  177.       
  178.       var KBProgress = parseInt(aValue/1024 + .5);
  179.       var KBTotal = parseInt(aMaxValue/1024 + .5);
  180.       
  181.       var statusPrevious = status.value;
  182.       var statusCurrent = this._formatKBytes(KBProgress, KBTotal);
  183.       
  184.       if (statusCurrent != statusPrevious)
  185.         status.value = statusCurrent;
  186.     },
  187.     
  188.     onStateChange: function(aAddon, aState, aValue) {
  189.       if (aAddon.id != gAddonId)
  190.         return;
  191.       
  192.       const nsIXPIProgressDialog = Ci.nsIXPIProgressDialog;
  193.       switch (aState) {
  194.         case nsIXPIProgressDialog.DOWNLOAD_START:
  195.           setThrobberStatus(true);
  196.           document.getElementById("progressStatus").value = getExtensionString("downloadStartMsg");
  197.           break;
  198.         case nsIXPIProgressDialog.DOWNLOAD_DONE:
  199.           setThrobberStatus(false);
  200.           document.getElementById("progressStatus").value = getExtensionString("downloadDoneMsg");
  201.           break;
  202.         case nsIXPIProgressDialog.INSTALL_START:
  203.           document.getElementById("progressStatus").value = getExtensionString("installStartMsg");
  204.           break;
  205.         case nsIXPIProgressDialog.INSTALL_DONE:
  206.           setThrobberStatus(false);
  207.           if (aValue == 0 || aValue == 999) {
  208.             gAlertCookie = "installed";
  209.             document.getElementById("progressStatus").value = getExtensionString("installDoneSuccessMsg");
  210.             document.getElementById("yaRestartAppButton").disabled = false;
  211.             break;
  212.           } else if (aValue == -210) {
  213.             gAlertCookie = "cancelled";
  214.             document.getElementById("progressStatus").value = getExtensionString("installDoneCancelledMsg");
  215.             break;
  216.           }
  217.           
  218.           document.getElementById("progressStatus").value = getExtensionString("installDoneErrorMsg");
  219.           
  220.           var xpinstallStrings = document.getElementById("xpinstallStrings");
  221.           try {
  222.             var msg = xpinstallStrings.getString("error" + aValue);
  223.           }
  224.           catch (e) {
  225.             msg = xpinstallStrings.getFormattedString("unknown.error", [aValue]);
  226.           }
  227.           
  228.           var title = getExtensionString("errorInstallTitle");
  229.           var message = getExtensionString("errorInstallMsg", [getBrandShortName(), aAddon.xpiURL, msg]);
  230.           
  231.           var ps = Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Ci.nsIPromptService);
  232.           ps.alert(window, title, message + "\n" + aValue);
  233.           break;
  234.         
  235.         case nsIXPIProgressDialog.DIALOG_CLOSE:
  236.           gExtensionManager.sortTypeByProperty(Ci.nsIUpdateItem.TYPE_ADDON, "name", true);
  237.           break;
  238.       }
  239.     },
  240.     
  241.     _formatKBytes: function (aKBytes, aTotalKBytes) {
  242.       var progressHasMB = parseInt(aKBytes/1000) > 0;
  243.       var totalHasMB = parseInt(aTotalKBytes/1000) > 0;
  244.       
  245.       var format = "";
  246.       if (!progressHasMB && !totalHasMB) {
  247.         format = this._statusFormatKBKB;
  248.         format = this._replaceInsert(format, 1, aKBytes);
  249.         format = this._replaceInsert(format, 2, aTotalKBytes);
  250.       }
  251.       else if (progressHasMB && totalHasMB) {
  252.         format = this._statusFormatMBMB;
  253.         format = this._replaceInsert(format, 1, (aKBytes / 1000).toFixed(1));
  254.         format = this._replaceInsert(format, 2, (aTotalKBytes / 1000).toFixed(1));
  255.       }
  256.       else if (totalHasMB && !progressHasMB) {
  257.         format = this._statusFormatKBMB;
  258.         format = this._replaceInsert(format, 1, aKBytes);
  259.         format = this._replaceInsert(format, 2, (aTotalKBytes / 1000).toFixed(1));
  260.       }
  261.       
  262.       return format;  
  263.     },
  264.     
  265.     _replaceInsert: function (text, index, value) {
  266.       return text.replace(new RegExp("#"+index), value);
  267.     },
  268.     
  269.     QueryInterface: function (aIID)  {
  270.       if (!aIID.equals(Ci.nsIAddonUpdateListener) &&
  271.           !aIID.equals(Ci.nsISupports))
  272.         throw Components.results.NS_ERROR_NO_INTERFACE;
  273.       return this;
  274.     }
  275. };
  276.  
  277. function setThrobberStatus(aState) {
  278.   document.getElementById("progressImage").setAttribute("class", aState ? "addonThrobber throbber" : "");
  279. }
  280.  
  281. function UpdateCheckListener(aVisible) {
  282.   this._addons = [];
  283.   this._visible = aVisible;
  284. }
  285. UpdateCheckListener.prototype = {
  286.   _addons: [],
  287.   _visible: false,
  288.   
  289.   onUpdateStarted: function() {},
  290.   
  291.   onUpdateEnded: function() {
  292.     if (!this._visible)
  293.       return;
  294.     
  295.     if (this._addons.length == 1) {
  296.       
  297.       setThrobberStatus(true);
  298.       
  299.       document.getElementById("progressStatus").value = getExtensionString("updateFoundMsg");
  300.       
  301.       gAddonXPIUrl = this._addons[0].xpiURL;
  302.       if (/\.xpi$/.test(gAddonXPIUrl)) {
  303.         try {
  304.           var cacheSession = Cc["@mozilla.org/network/cache-service;1"]
  305.                                  .getService(Ci.nsICacheService)
  306.                                  .createSession("HTTP", Ci.nsICache.STORE_ANYWHERE, true);
  307.           var cacheEntryDescriptor = cacheSession.openCacheEntry(gAddonXPIUrl, Ci.nsICacheEntryDescriptor, false);
  308.           if (cacheEntryDescriptor) {
  309.             cacheEntryDescriptor.doom();
  310.             cacheEntryDescriptor.close();
  311.           }
  312.         } catch(e) {}
  313.       }
  314.       
  315.       gObserverIndex = gExtensionManager.addUpdateListener(new DownloadManager());
  316.       gExtensionManager.addDownloads(this._addons, this._addons.length, true);
  317.     
  318.     } else {
  319.       document.getElementById("progressStatus").value = getExtensionString("updateNotFoundMsg");
  320.     }
  321.   },
  322.   
  323.   onAddonUpdateStarted: function(addon) {
  324.     setThrobberStatus(true);
  325.   },
  326.   
  327.   // TODO: remove this. not used
  328.   onAddonUpdateEnded: function(addon, status) {
  329.     if (!this._visible)
  330.       return;
  331.     
  332.     setThrobberStatus(false);
  333.     
  334.     const nsIAUCL = Ci.nsIAddonUpdateCheckListener;
  335.     switch (status) {
  336.       case nsIAUCL.STATUS_UPDATE:
  337.         this._addons.push(addon);
  338.         break;
  339.       case nsIAUCL.STATUS_FAILURE:
  340.         document.getElementById("progressStatus").value = getExtensionString("updateFailedMsg");
  341.         break;
  342.       case nsIAUCL.STATUS_DISABLED:
  343.         document.getElementById("progressStatus").value = getExtensionString("updateDisabledMsg"); 
  344.         break;
  345.     }
  346.     
  347.     document.getElementById("yaInstallButton").disabled = false;
  348.   },
  349.   
  350.   QueryInterface: function(iid) {
  351.     if (!iid.equals(Ci.nsIAddonUpdateCheckListener) &&
  352.         !iid.equals(Ci.nsISupports))
  353.       throw Components.results.NS_ERROR_NO_INTERFACE;
  354.     return this;
  355.   }
  356. };