+feedingit (0.8.0-5) unstable; urgency=low
+
+ * Fixed feed listing background colour
+ * Added author item in articles
+ * Fixed dates of articles/feeds
+
+ -- Yves <yves@marcoz.org> Sun, 8 Aug 2010 19:03:19 -0800
+
+feedingit (0.8.0-4) unstable; urgency=low
+
+ * Created widget option for small/large size
+
+ -- Yves <yves@marcoz.org> Mon, 19 Jul 2010 23:12:19 -0800
+
feedingit (0.8.0-3) unstable; urgency=low
* Updated feed/article cell size in widget
head_font = style.get_font_desc('SystemFont')
sub_font = style.get_font_desc('SmallSystemFont')
-head_color = style.get_color('ButtonTextColor')
+#head_color = style.get_color('ButtonTextColor')
+head_color = style.get_color('DefaultTextColor')
sub_color = style.get_color('DefaultTextColor')
active_color = style.get_color('ActiveTextColor')
+bg_color = style.get_color('DefaultBackgroundColor').to_string()
+c1=hex(min(int(bg_color[1:5],16)+10000, 65535))[2:6]
+c2=hex(min(int(bg_color[5:9],16)+10000, 65535))[2:6]
+c3=hex(min(int(bg_color[9:],16)+10000, 65535))[2:6]
+bg_color = "#" + c1 + c2 + c3
+
+
head = MARKUP_TEMPLATE % (head_font.to_string(), head_color.to_string())
normal_sub = MARKUP_TEMPLATE % (sub_font.to_string(), sub_color.to_string())
self.feedItems = gtk.ListStore(str, str)
#self.feedList = gtk.TreeView(self.feedItems)
self.feedList = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL)
+ self.feedList.set_rules_hint(True)
+
selection = self.feedList.get_selection()
selection.set_mode(gtk.SELECTION_NONE)
#selection.connect("changed", lambda w: True)
self.markup_renderer = gtk.CellRendererText()
self.markup_renderer.set_property('wrap-mode', pango.WRAP_WORD_CHAR)
- self.markup_renderer.set_property('background', "#333333")
+ self.markup_renderer.set_property('background', bg_color) #"#333333")
(width, height) = self.get_size()
self.markup_renderer.set_property('wrap-width', width-20)
- self.markup_renderer.set_property('ypad', 5)
+ self.markup_renderer.set_property('ypad', 8)
self.markup_renderer.set_property('xpad', 5)
markup_column = gtk.TreeViewColumn('', self.markup_renderer, \
markup=FEED_COLUMN_MARKUP)
hildondesktop.HomePluginItem.__init__(self)
self.set_settings(True)
self.connect("show-settings", self.show_settings)
- self.feed_list = {}
+ self.initialized = False
self.total = 0
self.status = 0 # 0=Showing feeds, 1=showing articles
self.updateStatus = 0 # 0=Not updating, 1=Update in progress
self.pageStatus = 0
+ self.pageSize = 10
+ self.size = 1 # 1=Big widget, 0=small widget
+
if isfile(SOURCE):
file = open(SOURCE)
self.autoupdateId = int(file.read())
file.close()
else:
self.autoupdateId=False
+ self.load_config()
vbox = gtk.VBox(False, 0)
self.buttonUpdate.set_image(gtk.image_new_from_icon_name('general_refresh', gtk.ICON_SIZE_BUTTON))
self.buttonUpdate.connect("clicked", self.buttonUpdate_clicked)
- self.buttonUp = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
- self.buttonUp.set_image(gtk.image_new_from_icon_name('keyboard_move_up', gtk.ICON_SIZE_BUTTON))
- self.buttonUp.set_sensitive(False)
- self.buttonUp.connect("clicked", self.buttonUp_clicked)
-
- self.buttonDown = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
- self.buttonDown.set_image(gtk.image_new_from_icon_name('keyboard_move_down', gtk.ICON_SIZE_BUTTON))
- self.buttonDown.set_sensitive(False)
- self.buttonDown.connect("clicked", self.buttonDown_clicked)
+ if self.size==1:
+ self.buttonUp = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
+ self.buttonUp.set_image(gtk.image_new_from_icon_name('keyboard_move_up', gtk.ICON_SIZE_BUTTON))
+ self.buttonUp.set_sensitive(False)
+ self.buttonUp.connect("clicked", self.buttonUp_clicked)
+
+ self.buttonDown = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
+ self.buttonDown.set_image(gtk.image_new_from_icon_name('keyboard_move_down', gtk.ICON_SIZE_BUTTON))
+ self.buttonDown.set_sensitive(False)
+ self.buttonDown.connect("clicked", self.buttonDown_clicked)
self.hbox1.pack_start(self.buttonUpdate, expand=False)
- self.hbox1.pack_start(self.buttonUp, expand=False)
- self.hbox1.pack_start(self.buttonDown, expand=False)
+ if self.size==1:
+ self.hbox1.pack_start(self.buttonUp, expand=False)
+ self.hbox1.pack_start(self.buttonDown, expand=False)
self.hbox1.pack_start(self.buttonApp, expand=False)
#button.show_all()
else:
self.status = 0
self.pageStatus = 0
- self.buttonUp.set_sensitive(False)
- self.buttonDown.set_sensitive(False)
+ if self.size == 1:
+ self.buttonUp.set_sensitive(False)
+ self.buttonDown.set_sensitive(False)
self.treeview.append_column(gtk.TreeViewColumn('Unread Items', self.unread_renderer, text = 1))
self.update_list()
#iface.StopUpdate()
db = sqlite3.connect(CONFIGDIR+self.key+".d/"+self.key+".db")
count = db.execute("SELECT count(*) FROM feed WHERE read=0;").fetchone()[0]
if count>0:
- maxPage = count/10
+ maxPage = count/self.pageSize
+ print maxPage
if self.pageStatus > maxPage:
self.pageStatus = maxPage
- rows = db.execute("SELECT id, title FROM feed WHERE read=0 ORDER BY date DESC LIMIT 10 OFFSET ?;", (self.pageStatus*10,) )
+ print self.pageStatus
+ rows = db.execute("SELECT id, title FROM feed WHERE read=0 ORDER BY date DESC LIMIT ? OFFSET ?;", (self.pageSize, self.pageStatus*self.pageSize,) )
treestore = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
for row in rows:
#title = fix_title(row[1][0:32])
def row_activated(self, treeview, treepath):
if self.status == 0:
- self.status = 1
- self.pageStatus = 0
- (model, iter) = self.treeview.get_selection().get_selected()
- self.key = model.get_value(iter, 2)
- treeviewcolumn = self.treeview.get_column(1)
- self.treeview.remove_column(treeviewcolumn)
- self.show_articles()
- self.buttonApp.set_image(gtk.image_new_from_icon_name('general_back', gtk.ICON_SIZE_BUTTON))
- self.buttonUp.set_sensitive(True)
- self.buttonDown.set_sensitive(True)
+ if self.size == 1:
+ self.status = 1
+ self.pageStatus = 0
+ (model, iter) = self.treeview.get_selection().get_selected()
+ self.key = model.get_value(iter, 2)
+ treeviewcolumn = self.treeview.get_column(1)
+ self.treeview.remove_column(treeviewcolumn)
+ self.show_articles()
+ self.buttonApp.set_image(gtk.image_new_from_icon_name('general_back', gtk.ICON_SIZE_BUTTON))
+ self.buttonUp.set_sensitive(True)
+ self.buttonDown.set_sensitive(True)
+ else:
+ (model, iter) = self.treeview.get_selection().get_selected()
+ id = model.get_value(iter, 2)
+ remote_object = bus.get_object("org.maemo.feedingit", # Connection name
+ "/org/maemo/feedingit" # Object's path
+ )
+ iface = dbus.Interface(remote_object, 'org.maemo.feedingit')
+ iface.OpenFeed(id)
else:
(model, iter) = self.treeview.get_selection().get_selected()
id = model.get_value(iter, 1)
iface = dbus.Interface(remote_object, 'org.maemo.feedingit')
iface.OpenArticle(self.key, id)
+ def check_db(self, db):
+ table = db.execute("SELECT sql FROM sqlite_master").fetchone()
+ from string import find
+ if find(table[0], "widget")==-1:
+ db.execute("ALTER TABLE feeds ADD COLUMN widget int;")
+ db.execute("UPDATE feeds SET widget=1;")
+ db.commit()
+
+ def no_feeds_available(self, treestore):
+ treestore.append(["No feeds added yet", "", None])
+ treestore.append(["Start Application", "", None])
+ #self.update_label("No feeds added yet")
+ self.treeview.set_model(treestore)
def update_list(self, *widget):
#listing = Listing(CONFIGDIR)
- if self.status == 0:
- treestore = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
-
- if self.feed_list == {}:
- self.load_config()
-
- if self.feed_list == None:
- treestore.append(["No feeds added yet", "", None])
- treestore.append(["Start Application", "", None])
- #self.update_label("No feeds added yet")
- self.treeview.set_model(treestore)
+ try:
+ if self.status == 0:
+ treestore = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
- else:
- list = []
- oldtotal = self.total
- self.total = 0
- #for key in listOfFeeds["feedingit-order"]:
- db = sqlite3.connect(CONFIGDIR+"feeds.db")
- for key in self.feed_list.keys():
- try:
- countUnread = db.execute("SELECT unread FROM feeds WHERE id=?;", (key,)).fetchone()[0]
- #list.append([self.feed_list[key][0:25], countUnread, key])
- list.append([self.feed_list[key], countUnread, key])
- self.total += countUnread
- except:
- pass
- list = sorted(list, key=lambda item: item[1], reverse=True)
- count = 0
- for item in list[0:10]:
- count += 1
- treestore.append(item)
- for i in range(count, 10):
- treestore.append( ("", "", None) )
+ #if self.feed_list == {}:
+ if self.initialized == False:
+ self.load_config()
+ try:
+ db = sqlite3.connect(CONFIGDIR+"feeds.db")
+ except:
+ self.no_feeds_available(treestore)
+ return True
+ try:
+ rows = db.execute("SELECT id, title, unread FROM feeds WHERE widget=1 ORDER BY unread DESC LIMIT 10;")
+ except:
+ self.check_db(db)
+ rows = db.execute("SELECT id, title, unread FROM feeds WHERE widget=1 ORDER BY unread DESC LIMIT 10;")
+ self.pageSize = 0
+ for row in rows:
+ self.pageSize += 1
+ id = row[0]
+ countUnread = row[2]
+ name = row[1]
+ treestore.append([name, countUnread, id])
self.treeview.set_model(treestore)
self.buttonApp.set_image(gtk.image_new_from_icon_name('feedingit', gtk.ICON_SIZE_BUTTON))
- #self.update_label(self.total)
- return True
+ return True
+ except:
+ import traceback
+ file = open("/home/user/feedingit_widget.log", "a")
+ traceback.print_exc(file=file)
+ file.close()
def create_selector(self, choices, setting):
#self.pickerDialog = hildon.PickerDialog(self.parent)
def selection_changed(self, selector, button, setting):
tmp = selector.get_current_text()
- if tmp == "Disabled":
- self.autoupdate = 0
- else:
- self.autoupdate = tmp
+ if setting == "autoupdate":
+ if tmp == "Disabled":
+ self.autoupdate = 0
+ else:
+ self.autoupdate = tmp
+ elif setting == "sizing":
+ if tmp == "Large":
+ self.size=1
+ else:
+ self.size=0
#current_selection = selector.get_current_text()
#if current_selection:
# self.config[setting] = current_selection
#vbox.pack_start(picker, expand=False)
return picker
+ def create_size_picker(self):
+ picker = hildon.PickerButton(gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
+ selector = self.create_selector(["Small", "Large"], "sizing")
+ picker.set_selector(selector)
+ picker.set_title("Default Size For The Widget")
+ if self.size ==1:
+ tmp = "Large"
+ else:
+ tmp = "Small"
+ picker.set_text("Widget Size (requires restart)", tmp)
+ picker.set_name('HildonButton-finger')
+ picker.set_alignment(0,0,1,1)
+ #self.buttons[setting] = picker
+ #vbox.pack_start(picker, expand=False)
+ return picker
+
def show_settings(self, widget):
if isfile(CONFIGDIR+"feeds.db"):
db = sqlite3.connect(CONFIGDIR+"feeds.db")
self.treestore_settings = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
self.treeview_settings.set_model(self.treestore_settings)
- feeds = db.execute("SELECT title, id FROM feeds;")
+ feeds = db.execute("SELECT title, id, widget FROM feeds;")
for feed in feeds:
# feed is (id, title)
- item = self.treestore_settings.append(feed)
- if feed[1] in self.feed_list:
+ item = self.treestore_settings.append(feed[0:2])
+ if feed[2]==1:
self.treeview_settings.get_selection().select_iter(item)
self.pannableArea.add(self.treeview_settings)
dialog.set_default_size(-1, 600)
dialog.action_area.pack_start(self.create_autoupdate_picker())
+ dialog.action_area.pack_start(self.create_size_picker())
dialog.show_all()
response = dialog.run()
if response == gtk.RESPONSE_ACCEPT:
- self.feed_list = self.getItems()
+ self.getItems()
dialog.destroy()
self.save_config()
self.update_list()
list = {}
treeselection = self.treeview_settings.get_selection()
(model, pathlist) = treeselection.get_selected_rows()
+ db = sqlite3.connect(CONFIGDIR+"feeds.db")
+ db.execute("UPDATE feeds SET widget=0;")
for path in pathlist:
- list[model.get_value(model.get_iter(path),1)] = model.get_value(model.get_iter(path),0)
- return list
+ id = model.get_value(model.get_iter(path),1)
+ db.execute("UPDATE feeds SET widget=1 WHERE id=?;", (id,) )
+ db.commit()
+ #title = model.get_value(model.get_iter(path),0)
+ #list[model.get_value(model.get_iter(path),1)] = model.get_value(model.get_iter(path),0)
+ #return list
def setupDbus(self):
bus.add_signal_receiver(self.update_list, dbus_interface="org.marcoz.feedingit",
if not isdir(CONFIGDIR):
from os import mkdir
mkdir(CONFIGDIR)
- file = open(CONFIGDIR+"widget", "w")
- pickle.dump(self.feed_list, file )
+ file = open(CONFIGDIR+"widget2", "w")
+ pickle.dump(self.size, file )
pickle.dump(self.autoupdate, file)
file.close()
self.setup_autoupdate()
remove(SOURCE)
def load_config(self):
- if isfile(CONFIGDIR+"widget"):
+ if isfile(CONFIGDIR+"widget2"):
+ file = open(CONFIGDIR+"widget2", "r")
+ self.size = pickle.load( file )
+ self.autoupdate = pickle.load( file )
+ file.close()
+ self.setup_autoupdate()
+ elif isfile(CONFIGDIR+"widget"):
file = open(CONFIGDIR+"widget", "r")
- self.feed_list = pickle.load( file )
+ feed_list = pickle.load( file )
self.autoupdate = pickle.load( file )
file.close()
self.setup_autoupdate()
- elif isfile(CONFIGDIR+"feeds.db"):
- db = sqlite3.connect(CONFIGDIR+"feeds.db")
- feeds = db.execute("SELECT id, title FROM feeds;")
-
- for feed in feeds:
- self.feed_list[feed[0]] = feed[1]
- self.autoupdate = 0
+ self.size = 1
+ self.save_config()
+ remove(CONFIGDIR+"widget")
else:
- self.feed_list = None
+ #self.feed_list = None
+ self.autoupdate = 0
+ self.size = 1
+ self.initialized = True
hd_plugin_type = FeedingItHomePlugin
import urllib2
from BeautifulSoup import BeautifulSoup
from urlparse import urljoin
+from calendar import timegm
def getId(string):
return md5.new(string).hexdigest()
tmp=feedparser.parse(url, etag = etag, modified = modified, handlers = [proxy])
expiry = float(expiryTime) * 3600.
- currentTime = time.time()
+ currentTime = 0
# Check if the parse was succesful (number of entries > 0, else do nothing)
if len(tmp["entries"])>0:
+ currentTime = time.time()
# The etag and modified value should only be updated if the content was not null
try:
etag = tmp["etag"]
entry["link"]
except:
entry["link"] = ""
+ try:
+ entry["author"]
+ except:
+ entry["author"] = None
tmpEntry = {"title":entry["title"], "content":self.extractContent(entry),
- "date":date, "link":entry["link"]}
+ "date":date, "link":entry["link"], "author":entry["author"]}
id = self.generateUniqueId(tmpEntry)
#articleTime = time.mktime(self.entries[id]["dateTuple"])
self.db.execute("INSERT INTO feed (id, title, contentLink, date, updated, link, read) VALUES (?, ?, ?, ?, ?, ?, ?);", values)
else:
try:
+ self.db.execute("UPDATE feed SET updated=? WHERE id=?;", (currentTime, id) )
+ self.db.commit()
filename = configdir+self.key+".d/"+id+".html"
file = open(filename,"a")
utime(filename, None)
self.db.commit()
- rows = self.db.execute("SELECT id FROM feed WHERE (read=0 AND updated<?) OR (read=1 AND updated<?);", (2*expiry, expiry))
- for row in rows:
- self.removeEntry(row[0])
-
- from glob import glob
- from os import stat
- for file in glob(configdir+self.key+".d/*"):
- #
- stats = stat(file)
- #
- # put the two dates into matching format
- #
- lastmodDate = stats[8]
- #
- expDate = time.time()-expiry*3
- # check if image-last-modified-date is outdated
+ rows = self.db.execute("SELECT id FROM feed WHERE (read=0 AND updated<?) OR (read=1 AND updated<?);", (currentTime-2*expiry, currentTime-expiry))
+ for row in rows:
+ self.removeEntry(row[0])
+
+ from glob import glob
+ from os import stat
+ for file in glob(configdir+self.key+".d/*"):
+ #
+ stats = stat(file)
+ #
+ # put the two dates into matching format
+ #
+ lastmodDate = stats[8]
+ #
+ expDate = time.time()-expiry*3
+ # check if image-last-modified-date is outdated
+ #
+ if expDate > lastmodDate:
#
- if expDate > lastmodDate:
+ try:
+ #
+ #print 'Removing', file
#
- try:
- #
- #print 'Removing', file
- #
- remove(file) # commented out for testing
- #
- except OSError:
- #
- print 'Could not remove', file
- return (currentTime, etag, modified)
+ remove(file) # commented out for testing
+ #
+ except OSError:
+ #
+ print 'Could not remove', file
+ updateTime = 0
+ rows = self.db.execute("SELECT MAX(date) FROM feed;")
+ for row in rows:
+ updateTime=row[0]
+ return (updateTime, etag, modified)
def setEntryRead(self, id):
self.db.execute("UPDATE feed SET read=1 WHERE id=?;", (id,) )
content = entry["content"]
link = entry['link']
+ author = entry['author']
date = time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime(entry["date"]) )
#text = '''<div style="color: black; background-color: white;">'''
text += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>\n'
#text += '<style> body {-webkit-user-select: none;} </style>'
text += '</head><body><div><a href=\"' + link + '\">' + title + "</a>"
+ if author != None:
+ text += "<BR /><small><i>Author: " + author + "</i></small>"
text += "<BR /><small><i>Date: " + date + "</i></small></div>"
text += "<BR /><BR />"
text += content
def extractDate(self, entry):
if entry.has_key("updated_parsed"):
- return time.mktime(entry["updated_parsed"])
+ return timegm(entry["updated_parsed"])
elif entry.has_key("published_parsed"):
- return time.mktime(entry["published_parsed"])
+ return timegm(entry["published_parsed"])
else:
return 0
self.db.commit()
def updateFeed(self, configdir, url, etag, modified, expiryTime=24, proxy=None, imageCache=False):
- currentTime = time.time()
+ currentTime = 0
rows = self.db.execute("SELECT id, link FROM feed WHERE updated=0;")
for row in rows:
+ currentTime = time.time()
id = row[0]
link = row[1]
f = urllib2.urlopen(link)
#ids = self.getIds()
for row in rows:
self.removeArticle(row[0])
-
+
def removeArticle(self, id):
rows = self.db.execute("SELECT imagePath FROM images WHERE id=?;", (id,) )
for row in rows:
self.db = sqlite3.connect("%s/feeds.db" % self.configdir)
try:
- self.db.execute("create table feeds(id text, url text, title text, unread int, updateTime float, rank int, etag text, modified text);")
- if isfile(self.configdir+"feeds.pickle"):
- self.importOldFormatFeeds()
+ table = self.db.execute("SELECT sql FROM sqlite_master").fetchone()
+ if table == None:
+ self.db.execute("CREATE TABLE feeds(id text, url text, title text, unread int, updateTime float, rank int, etag text, modified text, widget int);")
+ if isfile(self.configdir+"feeds.pickle"):
+ self.importOldFormatFeeds()
+ else:
+ self.addFeed("Maemo News", "http://maemo.org/news/items.xml")
else:
- self.addFeed("Maemo News", "http://maemo.org/news/items.xml")
+ from string import find, upper
+ if find(upper(table[0]), "WIDGET")<0:
+ self.db.execute("ALTER TABLE feeds ADD COLUMN (widget int);")
+ self.db.execute("UPDATE feeds SET widget=1;")
+ self.db.commit()
except:
- # Table already created
pass
-
+
def importOldFormatFeeds(self):
"""This function loads feeds that are saved in an outdated format, and converts them to sqlite"""
import rss
for id in listing.getListOfFeeds():
try:
rank += 1
- values = (id, listing.getFeedTitle(id) , listing.getFeedUrl(id), 0, time.time(), rank, None, "None")
- self.db.execute("INSERT INTO feeds (id, title, url, unread, updateTime, rank, etag, modified) VALUES (?, ?, ? ,? ,? ,?, ?, ?);", values)
+ values = (id, listing.getFeedTitle(id) , listing.getFeedUrl(id), 0, time.time(), rank, None, "None", 1)
+ self.db.execute("INSERT INTO feeds (id, title, url, unread, updateTime, rank, etag, modified, widget) VALUES (?, ?, ? ,? ,? ,?, ?, ?, ?);", values)
self.db.commit()
feed = listing.getFeed(id)
read_status = 1
else:
read_status = 0
- date = time.mktime(feed.getDateTuple(item))
+ date = timegm(feed.getDateTuple(item))
title = feed.getTitle(item)
newId = new_feed.generateUniqueId({"date":date, "title":title})
values = (newId, title , feed.getContentLink(item), date, time.time(), feed.getExternalLink(item), read_status)
archFeed = self.getFeed("ArchivedArticles")
archFeed.addArchivedArticle(title, link, date, self.configdir)
self.updateUnread("ArchivedArticles")
-
+
def updateFeed(self, key, expiryTime=24, proxy=None, imageCache=False):
feed = self.getFeed(key)
db = sqlite3.connect("%s/feeds.db" % self.configdir)
(url, etag, modified) = db.execute("SELECT url, etag, modified FROM feeds WHERE id=?;", (key,) ).fetchone()
(updateTime, etag, modified) = feed.updateFeed(self.configdir, url, etag, eval(modified), expiryTime, proxy, imageCache)
- db.execute("UPDATE feeds SET updateTime=?, etag=?, modified=? WHERE id=?;", (updateTime, etag, str(modified), key) )
+ if updateTime > 0:
+ db.execute("UPDATE feeds SET updateTime=?, etag=?, modified=? WHERE id=?;", (updateTime, etag, str(modified), key) )
+ else:
+ db.execute("UPDATE feeds SET etag=?, modified=? WHERE id=?;", (etag, str(modified), key) )
db.commit()
self.updateUnread(key, db=db)
max_rank = self.db.execute("SELECT MAX(rank) FROM feeds;").fetchone()[0]
if max_rank == None:
max_rank = 0
- values = (id, title, url, 0, 0, max_rank+1, None, "None")
- self.db.execute("INSERT INTO feeds (id, title, url, unread, updateTime, rank, etag, modified) VALUES (?, ?, ? ,? ,? ,?, ?, ?);", values)
+ values = (id, title, url, 0, 0, max_rank+1, None, "None", 1)
+ self.db.execute("INSERT INTO feeds (id, title, url, unread, updateTime, rank, etag, modified, widget) VALUES (?, ?, ? ,? ,? ,?, ?, ?, ?);", values)
self.db.commit()
# Ask for the feed object, it will create the necessary tables
self.getFeed(id)