Added debug logging around document view creation.
[straw.git] / straw / ItemManager.py
blob7c508534b9d7ebc20a6cd87cef32b3905b77de1f
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
5 import FeedManager
6 import gobject
8 _storage_path = None
10 model_data = None
12 def init():
13 fm = _get_instance()
14 fm.init_storage(_storage_path)
16 def setup(storage_path = None):
17 global _storage_path
18 _storage_path = storage_path
20 def get_feed_items(id):
21 im = _get_instance()
22 return im.get_feed_items(id)
24 def get_category_items(id):
25 im = _get_instance()
26 return im.get_category_items(id)
28 def feed_item_exists(item):
29 im = _get_instance()
30 return im.feed_item_exists(item)
32 class ItemManager(GObject):
33 __gsignals__ = {
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, ())
40 def __init__(self):
41 GObject.__init__(self)
43 self.storage = None
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)
52 if not category:
53 return None
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)
61 for item in items:
62 feed = FeedManager.lookup_feed(item.feed_id)
63 item.feed = feed
64 item.connect("is-read-changed", feed.on_is_read_changed)
65 item.connect("is-read-changed", self.on_item_is_read_changed)
67 return items
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:
74 item.feed = feed
75 item.connect("is-read-changed", feed.on_is_read_changed)
76 item.connect("is-read-changed", self.on_item_is_read_changed)
78 return feed.items
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):
85 self.dao.save(obj)
87 _instance = None
89 def _get_instance():
90 global _instance
91 if not _instance:
92 _instance = ItemManager()
93 return _instance