2 from rss_sqlite import Listing
6 from htmlentitydefs import name2codepoint
7 from gconf import client_get_default
10 logger = logging.getLogger(__name__)
19 return unichr(int(text[3:-1], 16))
21 return unichr(int(text[2:-1]))
27 text = unichr(name2codepoint[text[1:-1]])
30 return text # leave as is
31 return sub("&#?\w+;", fixup, text)
34 from cgi import escape
35 return escape(text).encode('ascii', 'xmlcharrefreplace')
39 def __init__(self, listing):
42 def getConfigXml(self):
43 xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><xml>"
44 xml += "<hideReadFeed>True</hideReadFeed>"
45 xml += "<hideReadArticles>True</hideReadArticles>"
49 def generateCategoryXml(self):
50 xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><xml>"
51 for cat in self.listing.getListOfCategories():
53 xml += "<catname>%s</catname>" %sanitize(self.listing.getCategoryTitle(cat))
54 xml += "<catid>%s</catid>" % cat
55 xml += "<unread>%s</unread>" % self.listing.getCategoryUnread(cat)
60 def fix_title(self, title):
61 return escape(unescape(title).replace("<em>","").replace("</em>","").replace("<nobr>","").replace("</nobr>","").replace("<wbr>","").replace("—","-"))
63 def generateFeedsXml(self, catid):
64 xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><xml>"
65 for key in self.listing.getSortedListOfKeys("Manual", category=catid):
67 xml += "<feedname>%s</feedname>" %sanitize(self.listing.getFeedTitle(key))
68 xml += "<feedid>%s</feedid>" %key
69 xml += "<unread>%s</unread>" %self.listing.getFeedNumberOfUnreadItems(key)
70 xml += "<updatedDate>%s</updatedDate>" %self.listing.getFeedUpdateTime(key)
71 xml += "<icon>%s</icon>" %self.listing.getFavicon(key)
72 # xml += "<updating>True</updating>"
73 xml += "<updating>False</updating>"
78 def generateArticlesXml(self, key, onlyUnread):
79 feed = self.listing.getFeed(key)
80 xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><xml>"
81 if onlyUnread == "False":
83 for id in feed.getIds(onlyUnread):
85 xml += "<title>%s</title>" %self.fix_title(feed.getTitle(id))
86 xml += "<articleid>%s</articleid>" %id
87 xml += "<unread>%s</unread>" %str(feed.isEntryRead(id))
88 xml += "<updatedDate>%s</updatedDate>" %feed.getDateStamp(id)
89 xml += "<path>%s</path>" %feed.getContentLink(id)
95 (req, sep, arg) = self.path.partition("?")
96 request = req.split("/")
102 arguments[ele[0]] = ele[1]
103 if request[1] == "categories":
104 xml = self.generateCategoryXml()
105 elif request[1] == "feeds":
107 xml = self.generateFeedsXml(catid)
108 elif request[1] == "articles":
110 onlyUnread = arguments.get("onlyUnread","False")
111 markAllAsRead = arguments.get("markAllAsRead", "False")
112 xml = self.generateArticlesXml(key, onlyUnread, markAllAsRead)
113 elif request[1] == "html":
116 feed = listing.getFeed(key)
118 file = open(feed.getContentLink(article))
119 html = file.read().replace("body", "body bgcolor='#ffffff'", 1)
122 html = "<html><body>Error retrieving article</body></html>"
123 self.send_response(200)
124 self.send_header("Content-type", "text/html")
126 self.wfile.write(html)
127 #listing.updateUnread(key)
129 elif request[1] == "isUpdating":
132 if (key in updatingFeeds) or ((key=="") and (len(updatingFeeds)>0)):
133 xml += "<updating>True</updating>"
135 xml += "<updating>False</updating>"
136 xml += self.getCommands()
138 elif request[1] == "read":
141 feed = listing.getFeed(key)
142 feed.setEntryRead(article)
143 listing.updateUnread(key)
144 self.send_response(200)
145 self.send_header("Content-type", "text/html")
147 self.wfile.write("OK")
149 elif request[1] == "config":
150 xml = self.getConfigXml()
151 elif request[1] == "home":
152 file = open(self.path)
153 self.send_response(200)
154 self.send_header("Content-type", "text/html")
156 self.wfile.write(file.read())
159 elif request[1] == "task":
160 self.openTaskSwitch()
161 xml = "<xml>OK</xml>"
162 elif request[1] == "deleteCat":
164 listing.removeCategory(key)
165 xml = "<xml>OK</xml>"
166 elif request[1] == "deleteFeed":
168 listing.removeFeed(key)
169 xml = "<xml>OK</xml>"
170 elif request[1] == "addFeed":
173 url = arguments.get("url","")
174 listing.addFeed(name, url, category=cat)
175 xml = "<xml>OK</xml>"
176 elif request[1] == "updateFeed":
178 listing.updateFeed (key, priority=-1)
179 #download = Download(listing, [key,])
181 xml = "<xml>OK</xml>"
182 elif request[1]=="updateAll":
183 #app.automaticUpdate()
185 xml = "<xml>OK</xml>"
186 elif request[1] == "addCat":
188 listing.addCategory(catName)
189 xml = "<xml>OK</xml>"
191 self.send_error(404, "File not found")
193 self.send_response(200)
194 self.send_header("Content-type", "text/xml")
196 self.wfile.write(xml.encode("utf-8"))