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 / fil89C17E505EAA8C21519199303B225741 < prev    next >
Text File  |  2010-07-12  |  6KB  |  185 lines

  1. var gYaSearchPlugin = {
  2.   
  3.   __engine: null,
  4.   __inited: false,
  5.   
  6.   __checkEnginePrefName: "yasearch.general.searchplugin.check",
  7.   
  8.   init: function() {
  9.     if (!this.__inited) {
  10.       this.__inited = true;
  11.       
  12.       OBSERVER_SERVICE.addObserver(this, "browser-search-engine-modified", false);
  13.     }
  14.   },
  15.   
  16.   destroy: function() {
  17.     if (this.__inited) {
  18.       this.__inited = false;
  19.       this.__engine = null;
  20.       
  21.       OBSERVER_SERVICE.removeObserver(this, "browser-search-engine-modified");
  22.       
  23.       this.__searchPluginFilePath = null;
  24.     }
  25.   },
  26.   
  27.   engineName: UConverter.ConvertToUnicode("╨»╨╜╨┤╨╡╨║╤ü"),
  28.   
  29.   observe: function(aSubject, aTopic, aData) {
  30.     switch (aTopic) {
  31.       case "browser-search-engine-modified":
  32.         if (aData == "engine-changed" || aData == "engine-added") {
  33.           var engine = aSubject.QueryInterface(Ci.nsISearchEngine);
  34.           engine = engine.wrappedJSObject;
  35.           
  36.           if (this.searchPluginFilePath && this.searchPluginFilePath == engine._location) {
  37.             this.__engine = engine;
  38.           } else if (this.__engine && engine._name == this.engineName && engine._location == this.onlineSearchPluginPath) {
  39.             for (var p in engine)
  40.               if (!(engine.__lookupGetter__(p) || engine.__lookupSetter__(p)))
  41.                 this.__engine[p] = engine[p];
  42.             
  43.             this.__engine = null;
  44.           }
  45.         }
  46.         break;
  47.     }
  48.   },
  49.   
  50.   __searchPluginFilePath: null,
  51.   
  52.   get searchPluginFilePath() {
  53.     if (this.__searchPluginFilePath === null) {
  54.       var engineFile = gYaSearchService.getInstallDir();
  55.       engineFile.append("searchplugins");
  56.       engineFile.append("yasearch.xml");
  57.       
  58.       this.__searchPluginFilePath = (engineFile.exists() && engineFile.isFile()) ? engineFile.path : false;
  59.     }
  60.     
  61.     return this.__searchPluginFilePath;
  62.   },
  63.   
  64.   _getSearchPluginsDir: function(aDirType) {
  65.     return Cc["@mozilla.org/file/directory_service;1"]
  66.                .getService(Ci.nsIProperties)
  67.                .get(aDirType || "SrchPlugns", Ci.nsIFile);
  68.   },
  69.   
  70.   __onlineSearchPluginPath: null,
  71.   
  72.   get onlineSearchPluginPath() {
  73.     if (this.__onlineSearchPluginPath === null) {
  74.       var file = this._getSearchPluginsDir("UsrSrchPlugns");
  75.       file.append("yandexsearch.xml");
  76.       this.__onlineSearchPluginPath = (file.exists() && file.isFile()) ? file.path : false;
  77.     }
  78.     
  79.     return this.__onlineSearchPluginPath;
  80.   },
  81.   
  82.   get appSearchPluginFile() {
  83.     var file = this._getSearchPluginsDir("SrchPlugns");
  84.     file.append("yandex.xml");
  85.     return (file.exists() && file.isFile()) ? file : null;
  86.   },
  87.   
  88.   addParamToEngine: function(aEngine, aName, aValue) {
  89.     if (!aValue)
  90.       return;
  91.     
  92.     var url = aEngine._getURLOfType("text/html");
  93.     if (url) {
  94.       var replaced = false;
  95.       
  96.       for (var i = 0; i < url.params.length; ++i) {
  97.         if (url.params[i].name == aName) {
  98.           url.params[i].value = aValue;
  99.           replaced = true;
  100.           break;
  101.         }
  102.       }
  103.       
  104.       if (!replaced)
  105.         url.addParam(aName, aValue);
  106.     }
  107.   },
  108.   
  109.   checkEngineSearchURL: function(aEngine) {
  110.     var service = gYaSearchService.getServiceById("www");
  111.     
  112.     if (service && service.hasAttribute("search-url")) {
  113.       var url = aEngine._getURLOfType("text/html");
  114.       if (url && url.template) {
  115.         url.template = service.getAttribute("search-url").split("?")[0];
  116.         
  117.         let suggestions = aEngine._getURLOfType("application/x-suggestions+json");
  118.         if (suggestions && suggestions.template && suggestions.template.indexOf("suggest-ff.cgi") > 0)
  119.           suggestions.template = gYaSearchService.searchEngineSuggestURL.split("?")[0];
  120.         
  121.         return true;
  122.       }
  123.     }
  124.     
  125.     return false;
  126.   },
  127.   
  128.   getYaEngineParams: function() {
  129.     let params = {};
  130.     
  131.     let yaSPFile = this.appSearchPluginFile;
  132.     if (yaSPFile && gYaSearchService.getCharPref("app.distributor") != "yandex") {
  133.       let fileData = gYaSearchService.readFile(yaSPFile);
  134.       if (fileData) {
  135.         let qsXml = gYaSearchService.safeE4Xml(fileData, null, "SearchPlugin");
  136.         if (qsXml) {
  137.           let qsns = new Namespace("qsns", "http://www.mozilla.org/2006/browser/search/");
  138.           let qsUrl = qsXml.qsns::Url.(function::attribute("type") == "text/html")[0];
  139.           if (qsUrl) {
  140.             for each (let param in qsUrl.qsns::Param.(function::attribute("name").toString() != "text"
  141.                                                       && function::attribute("name").toString() != "")) {
  142.               params[param.@name.toString()] = param.@value.toString();
  143.             }
  144.             
  145.             return params;
  146.           }
  147.         }
  148.       }
  149.     }
  150.     
  151.     params.clid = gYaSearchService.vendorData.clid6;
  152.     params.yasoft = gYaSearchService.AppInfo.yasoftStr;
  153.     
  154.     return params;
  155.   },
  156.   
  157.   checkSearchPluginInstall: function() {
  158.     var checkEngine = gYaSearchService.getBoolPref(this.__checkEnginePrefName);
  159.     if (checkEngine)
  160.       gYaSearchService.setComplexValue("browser.search.defaultenginename", this.engineName);
  161.     
  162.     var ss = gYaSearchService.searchService;
  163.     
  164.     if (("getEngines" in ss)) {
  165.       if (checkEngine) {
  166.         gYaSearchService.setBoolPref(this.__checkEnginePrefName, false);
  167.         var yaEngine = ss.getEngineByName(this.engineName);
  168.         if (yaEngine)
  169.           ss.currentEngine = yaEngine;
  170.       }
  171.     }
  172.     
  173.     if (this.__engine && this.checkEngineSearchURL(this.__engine)) {
  174.       let engineParams = this.getYaEngineParams();
  175.       
  176.       for (var [paramName, paramValue] in Iterator(engineParams)) {
  177.         this.addParamToEngine(this.__engine, paramName, paramValue);
  178.       }
  179.     }
  180.     
  181.     this.destroy();
  182.   }
  183. }
  184.  
  185. gYaSearchPlugin.init();