Fixed etag value of None if a feed did not contain updates, plus parsing for gzipped...
[feedingit] / src / rss.py
index 3348500..a105f3d 100644 (file)
@@ -71,6 +71,8 @@ class Feed:
         self.countUnread = 0
         self.updateTime = "Never"
         self.uniqueId = uniqueId
+        self.etag = None
+        self.modified = None
 
     def addImage(self, configdir, key, baseurl, url):
         filename = configdir+key+".d/"+getId(url)
@@ -127,12 +129,23 @@ class Feed:
     def updateFeed(self, configdir, expiryTime=24, proxy=None, imageCache=False):
         # Expiry time is in hours
         if proxy == None:
-            tmp=feedparser.parse(self.url)
+            tmp=feedparser.parse(self.url, etag = self.etag, modified = self.modified)
         else:
-            tmp=feedparser.parse(self.url, handlers = [proxy])
+            tmp=feedparser.parse(self.url, etag = self.etag, modified = self.modified, handlers = [proxy])
         expiry = float(expiryTime) * 3600.
+
         # Check if the parse was succesful (number of entries > 0, else do nothing)
         if len(tmp["entries"])>0:
+           # The etag and modified value should only be updated if the content was not null
+           try:
+               self.etag = tmp["etag"]
+           except KeyError:
+               self.etag = None
+           try:
+               self.modified = tmp["modified"]
+           except KeyError:
+               self.modified = None
+           #if len(tmp["entries"])>0:
            if not isdir(configdir+self.uniqueId+".d"):
                mkdir(configdir+self.uniqueId+".d")
            try:
@@ -144,8 +157,9 @@ class Feed:
                outf.close()
                del data
            except:
-                import traceback
-                traceback.print_exc()
+               #import traceback
+               #traceback.print_exc()
+                pass
 
 
            #reversedEntries = self.getEntries()
@@ -302,7 +316,9 @@ class Feed:
             self.readItems[id] = False
     
     def isEntryRead(self, id):
-        return self.readItems[id]
+        # Check if an entry is read; return False if the read
+        # status of an entry is unknown (id not in readItems)
+        return self.readItems.get(id, False)
     
     def getTitle(self, id):
         return self.entries[id]["title"]
@@ -532,6 +548,14 @@ class Listing:
                     del feed.imageHandler
                 except:
                     pass
+                try:
+                    feed.etag
+                except AttributeError:
+                    feed.etag = None
+                try:
+                    feed.modified
+                except AttributeError:
+                    feed.modified = None
                 #feed.reloadUnread(self.configdir)
             else:
                 #print key