7c508534b9d7ebc20a6cd87cef32b3905b77de1f
1 from error
import debug
2 from gobject
import GObject
, SIGNAL_RUN_FIRST
3 from model
import Feed
, Item
, Category
4 from storage
import DAO
, Storage
14 fm
.init_storage(_storage_path
)
16 def setup(storage_path
= None):
18 _storage_path
= storage_path
20 def get_feed_items(id):
22 return im
.get_feed_items(id)
24 def get_category_items(id):
26 return im
.get_category_items(id)
28 def feed_item_exists(item
):
30 return im
.feed_item_exists(item
)
32 class ItemManager(GObject
):
34 "item-added" : (gobject
.SIGNAL_RUN_LAST
, gobject
.TYPE_NONE
, (gobject
.TYPE_PYOBJECT
,)),
35 "feed-added" : (gobject
.SIGNAL_RUN_LAST
, gobject
.TYPE_NONE
, (gobject
.TYPE_PYOBJECT
,)),
36 "category-added" : (gobject
.SIGNAL_RUN_LAST
, gobject
.TYPE_NONE
, (gobject
.TYPE_PYOBJECT
,)),
37 "update-all-done" : (gobject
.SIGNAL_RUN_LAST
, gobject
.TYPE_NONE
, ())
41 GObject
.__init
__(self
)
45 def init_storage(self
, path
):
46 self
.storage
= Storage(path
)
47 self
.dao
= DAO(self
.storage
)
49 def get_category_items(self
, id):
50 category
= FeedManager
.lookup_category(id)
55 in_str
= ", ".join([str(feed
.id) for feed
in FeedManager
.get_children_feeds(id)])
57 query
= "SELECT id, title, feed_id, is_read, link, pub_date, description FROM items WHERE feed_id IN(%s) ORDER BY pub_date DESC" % in_str
59 items
= self
.dao
.get(Item
, query
= query
)
62 feed
= FeedManager
.lookup_feed(item
.feed_id
)
64 item
.connect("is-read-changed", feed
.on_is_read_changed
)
65 item
.connect("is-read-changed", self
.on_item_is_read_changed
)
69 def get_feed_items(self
, id):
70 feed
= FeedManager
.lookup_feed(id)
71 feed
.items
= self
.dao
.get(Item
, " WHERE feed_id = %d ORDER BY pub_date DESC" % feed
.id)
73 for item
in feed
.items
:
75 item
.connect("is-read-changed", feed
.on_is_read_changed
)
76 item
.connect("is-read-changed", self
.on_item_is_read_changed
)
80 def feed_item_exists(self
, item
):
81 result
= self
.dao
.get(Item
, sql
= " WHERE feed_id = ? AND title = ?", params
= (str(item
.feed_id
), str(item
.title
),))
82 return len(result
) > 0
84 def on_item_is_read_changed(self
, obj
, is_read
):
92 _instance
= ItemManager()