home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2005 October / Gamestar_77_2005-10_dvd.iso / Programy / nsb-install-8-0.exe / chrome / toolkit.jar / content / mozapps / plugins / pluginInstallerDatasource.js next >
Text File  |  2005-07-29  |  6KB  |  132 lines

  1. const RDF_NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
  2. const PFS_NS = "http://www.mozilla.org/2004/pfs-rdf#";
  3.  
  4. function nsRDFItemUpdater(aClientOS, aChromeLocale){
  5.   this._rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"]
  6.                         .getService(Components.interfaces.nsIRDFService);
  7.   this._os = Components.classes["@mozilla.org/observer-service;1"]
  8.                        .getService(Components.interfaces.nsIObserverService);
  9.  
  10.   var prefBranch = Components.classes["@mozilla.org/preferences-service;1"]
  11.                              .getService(Components.interfaces.nsIPrefBranch);
  12.   this.appID = prefBranch.getCharPref("app.id");
  13.   this.buildID = prefBranch.getCharPref("app.build_id");
  14.   this.clientOS = aClientOS;
  15.   this.chromeLocale = aChromeLocale;
  16.   this.dsURI = prefBranch.getComplexValue("pfs.datasource.url",
  17.                                      Components.interfaces.nsIPrefLocalizedString).data;
  18. }
  19.  
  20. nsRDFItemUpdater.prototype = {
  21.   checkForPlugin: function (aPluginRequestItem){
  22.     var dsURI = this.dsURI;
  23.     dsURI = dsURI.replace(/%PLUGIN_MIMETYPE%/g, aPluginRequestItem.mimetype);
  24.     dsURI = dsURI.replace(/%APP_ID%/g, this.appID);
  25.     dsURI = dsURI.replace(/%APP_VERSION%/g, this.buildID);
  26.     dsURI = dsURI.replace(/%CLIENT_OS%/g, this.clientOS);
  27.     dsURI = dsURI.replace(/%CHROME_LOCALE%/g, this.chromeLocale);
  28.  
  29.     var ds = this._rdfService.GetDataSource(dsURI);
  30.     var rds = ds.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource)
  31.     if (rds.loaded)
  32.       this.onDatasourceLoaded(ds, aPluginRequestItem);
  33.     else {
  34.       var sink = ds.QueryInterface(Components.interfaces.nsIRDFXMLSink);
  35.       sink.addXMLSinkObserver(new nsPluginXMLRDFDSObserver(this, aPluginRequestItem));
  36.     }
  37.   },
  38.  
  39.   onDatasourceLoaded: function pfs_onDatasourceLoaded (aDatasource, aPluginRequestItem){
  40.     var container = Components.classes["@mozilla.org/rdf/container;1"].
  41.                   createInstance(Components.interfaces.nsIRDFContainer);
  42.     var resultRes = this._rdfService.GetResource("urn:mozilla:plugin-results:" + aPluginRequestItem.mimetype);
  43.     var pluginList = aDatasource.GetTarget(resultRes, this._rdfService.GetResource(PFS_NS+"plugins"), true);
  44.  
  45.     var pluginInfo = null;
  46.   
  47.     container = Components.classes["@mozilla.org/rdf/container;1"].createInstance(Components.interfaces.nsIRDFContainer);
  48.     try {
  49.       container.Init(aDatasource, pluginList);
  50.  
  51.       var children = container.GetElements();
  52.       var target;
  53.  
  54.       // get the first item
  55.       var child = children.getNext();
  56.       if (child instanceof Components.interfaces.nsIRDFResource){
  57.         var name = this._rdfService.GetResource("http://www.mozilla.org/2004/pfs-rdf#updates");
  58.         target = aDatasource.GetTarget(child, name, true);
  59.       }
  60.  
  61.       try {
  62.         container.Init(aDatasource, target);
  63.         target = null;
  64.         children = container.GetElements();
  65.  
  66.         var child = children.getNext();
  67.         if (child instanceof Components.interfaces.nsIRDFResource){
  68.           target = child;
  69.         }
  70.  
  71.         function getPFSValueFromRDF(aValue, aDatasource, aRDFService){
  72.           var rv = null;
  73.  
  74.           var myTarget = aDatasource.GetTarget(target, aRDFService.GetResource(PFS_NS + aValue), true);
  75.           if (myTarget)
  76.             rv = myTarget.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  77.  
  78.           return rv;
  79.         }
  80.  
  81.         pluginInfo = new Object();
  82.         pluginInfo.name = getPFSValueFromRDF("name", aDatasource, this._rdfService);
  83.         pluginInfo.pid = getPFSValueFromRDF("guid", aDatasource, this._rdfService);
  84.         pluginInfo.version = getPFSValueFromRDF("version", aDatasource, this._rdfService);
  85.         pluginInfo.IconUrl = getPFSValueFromRDF("IconUrl", aDatasource, this._rdfService);
  86.         pluginInfo.XPILocation = getPFSValueFromRDF("XPILocation", aDatasource, this._rdfService);
  87.         pluginInfo.InstallerShowsUI = getPFSValueFromRDF("InstallerShowsUI", aDatasource, this._rdfService);
  88.         pluginInfo.manualInstallationURL = getPFSValueFromRDF("manualInstallationURL", aDatasource, this._rdfService);
  89.         pluginInfo.requestedMimetype = getPFSValueFromRDF("requestedMimetype", aDatasource, this._rdfService);
  90.         pluginInfo.licenseURL = getPFSValueFromRDF("licenseURL", aDatasource, this._rdfService);
  91.         pluginInfo.needsRestart = getPFSValueFromRDF("needsRestart", aDatasource, this._rdfService);
  92.       }
  93.       catch (ex){}
  94.     }
  95.     catch (ex){}
  96.     
  97.     gPluginInstaller.pluginInfoReceived(pluginInfo);
  98.   },
  99.  
  100.   onDatasourceError: function pfs_onDatasourceError (aPluginRequestItem, aError){
  101.     this._os.notifyObservers(aPluginRequestItem, "error", aError);
  102.     gPluginInstaller.pluginInfoReceived(null);
  103.   },
  104. };
  105.  
  106. function nsPluginXMLRDFDSObserver(aUpdater, aPluginRequestItem){
  107.   this._updater = aUpdater;
  108.   this._item    = aPluginRequestItem;
  109. }
  110.  
  111. nsPluginXMLRDFDSObserver.prototype = 
  112.   _updater  : null,
  113.   _item     : null,
  114.  
  115.   // nsIRDFXMLSinkObserver
  116.   onBeginLoad: function(aSink){},
  117.   onInterrupt: function(aSink){},
  118.   onResume: function(aSink){},
  119.   onEndLoad: function(aSink){
  120.     aSink.removeXMLSinkObserver(this);
  121.     
  122.     var ds = aSink.QueryInterface(Components.interfaces.nsIRDFDataSource);
  123.     this._updater.onDatasourceLoaded(ds, this._item);
  124.   },
  125.   
  126.   onError: function(aSink, aStatus, aErrorMsg){  
  127.     aSink.removeXMLSinkObserver(this);   
  128.     this._updater.onDatasourceError(this._item, aStatus.toString());
  129.   }
  130. };
  131.