home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 120 / cdrom120.iso / internet / sage / sage.xpi / chrome / sage.jar / content / updatechecker.js < prev   
Encoding:
Text File  |  2005-05-12  |  4.3 KB  |  166 lines

  1. var UpdateChecker = {
  2.     checking: false,
  3.     checkList: null,
  4.     httpReq: null,
  5.     lastResource: null,
  6.     
  7.     getURL: function(resource) {
  8.         var type = CommonFunc.getBMDSProperty(resource, CommonFunc.RDF_TYPE);
  9.         var url;
  10.         if(type == NC_NS + "Bookmark") {
  11.             url = CommonFunc.getBMDSProperty(resource, CommonFunc.BM_URL);
  12.         }
  13.         if(type == NC_NS + "Livemark") {
  14.             url = CommonFunc.getBMDSProperty(resource, CommonFunc.BM_FEEDURL);
  15.         }
  16.         return url;
  17.     },
  18.     
  19.     startCheck: function(aCheckFolderId) {
  20.         if(this.checking) return;
  21.  
  22.         var resourceList = CommonFunc.getBMDSCChildren(aCheckFolderId);
  23.         this.checkList = new Array();
  24.  
  25.         // select feeds to be checked, exclude separators and updated feeds
  26.         for(var i = 0; i < resourceList.length; i++) {
  27.             var url = this.getURL(resourceList[i]);
  28.             var desc = CommonFunc.getBMDSProperty(resourceList[i], CommonFunc.BM_DESCRIPTION);
  29.             var status = desc.split(" ")[0];
  30.             if(url && !(status == CommonFunc.STATUS_UPDATE || status == CommonFunc.STATUS_NO_CHECK)) {
  31.                 this.checkList.push(resourceList[i]);
  32.             }
  33.         }
  34.  
  35.         logMessage("checking " + this.checkList.length + " feed(s)");
  36.  
  37.         if (this.checkList.length > 0) {
  38.             this.checking = true;
  39.             this.check();
  40.         }
  41.     },
  42.  
  43.     done: function() {
  44.         if(this.checking) {
  45.             this.httpReq.abort();
  46.         }
  47.     },
  48.  
  49.     check: function() {
  50.         this.lastResource = this.checkList.shift();
  51.         var name = CommonFunc.getBMDSProperty(this.lastResource, CommonFunc.BM_NAME);
  52.         var type = CommonFunc.getBMDSProperty(this.lastResource, CommonFunc.RDF_TYPE);
  53.         var url = this.getURL(this.lastResource);
  54.  
  55.         if(!url) {
  56.             this.checkResult(false, 0);
  57.         }
  58.  
  59.         if(this.httpReq) {
  60.             this.httpReq.abort();
  61.         }
  62.         
  63.         this.httpReq = new XMLHttpRequest();
  64.         this.httpReq.parent = this;
  65.  
  66.         this.httpReq.open("GET", url);
  67.  
  68.         this.httpReq.onload = this.httpLoaded;
  69.         this.httpReq.onerror = this.httpError;
  70.         this.httpReq.onreadystatechange = this.httpReadyStateChange;
  71.  
  72.         try {
  73.             this.httpReq.setRequestHeader("User-Agent", USER_AGENT);
  74.             this.httpReq.overrideMimeType("application/xml");
  75.             this.httpReq.send(null);
  76.             this.onCheck(name, url);
  77.         } catch(e) {
  78.                 // FAILURE
  79.             this.httpReq.abort();
  80.             this.checkResult(false, 0);
  81.         }
  82.     },
  83.  
  84.     httpError: function(e) {
  85.         logMessage("HTTP Error: " + e.target.status + " - " + e.target.statusText);
  86.         UpdateChecker.httpReq.abort();
  87.         UpdateChecker.checkResult(false, 0);
  88.     },
  89.  
  90.     httpReadyStateChange: function() {
  91.         if(UpdateChecker.httpReq.readyState == 2) {
  92.             try {
  93.                 UpdateChecker.httpReq.status;
  94.             } catch(e) {
  95.                     // URL NOT AVAILABLE
  96.                 UpdateChecker.httpReq.abort();
  97.                 UpdateChecker.checkResult(false, 0);
  98.             }
  99.         }
  100.     },
  101.  
  102.     httpLoaded: function(e) {
  103.         var lastModified = 0;
  104.  
  105.         try {
  106.             var feed = new Feed(UpdateChecker.httpReq.responseXML);
  107.         } catch(e) {
  108.             UpdateChecker.checkResult(false, 0);
  109.             return;
  110.         }
  111.  
  112.         if(feed.hasLastPubDate()) {
  113.             lastModified = feed.getLastPubDate().getTime();
  114.         }
  115.         
  116.         UpdateChecker.checkResult(true, lastModified, feed);
  117.     },
  118.  
  119.     checkResult: function(aSucceed, aLastModified, feed) {
  120.         var name = CommonFunc.getBMDSProperty(this.lastResource, CommonFunc.BM_NAME);
  121.         var url = CommonFunc.getBMDSProperty(this.lastResource, CommonFunc.BM_URL);
  122.         var status = 0;
  123.  
  124.         var lastVisit = CommonFunc.getBMDSProperty(this.lastResource, CommonFunc.BM_LAST_VISIT);
  125.         if(!lastVisit) {
  126.             lastVisit = 0;
  127.         } else {
  128.             lastVisit /= 1000;
  129.         }
  130.  
  131.         if(aSucceed) {
  132.             var sig = CommonFunc.getBMDSProperty(this.lastResource, CommonFunc.BM_DESCRIPTION).match(/\[.*\]/);
  133.             if(aLastModified) {
  134.                 if((aLastModified > lastVisit) && (sig != feed.getSignature())) {
  135.                     status = CommonFunc.STATUS_UPDATE;
  136.                 } else {
  137.                     status = CommonFunc.STATUS_NO_UPDATE;
  138.                 }
  139.             } else {
  140.                 if(sig != feed.getSignature()) {
  141.                     //logMessage("signature mismatch: " + feed.getTitle() + "; old sig: " + sig + "  new sig: " + feed.getSignature());
  142.                     status = CommonFunc.STATUS_UPDATE;
  143.                 } else {
  144.                     status = CommonFunc.STATUS_NO_UPDATE;
  145.                 }
  146.             }
  147.         } else {
  148.             status = CommonFunc.STATUS_ERROR;
  149.         }
  150.  
  151.         CommonFunc.setBMDSProperty(this.lastResource, CommonFunc.BM_DESCRIPTION, status + " " + CommonFunc.getBMDSProperty(this.lastResource, CommonFunc.BM_DESCRIPTION).match(/\[.*\]/));
  152.         
  153.         if(this.checkList.length == 0) {
  154.             this.checking = false;
  155.             this.onChecked(name, url);
  156.             return;
  157.         } else {
  158.             this.check();
  159.         }
  160.     },
  161.  
  162.  
  163.     onCheck: function(aName, aURL) {},
  164.     onChecked: function(aName, aURL) {}
  165.  
  166. }