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 class ServiceThread(threading
.Thread
):
24 result
= call
[0](call
[1][0])
25 gobject
.idle_add(call
[2], result
)
27 serviceThread
= ServiceThread()
32 fm
.init_storage(_storage_path
)
34 def setup(storage_path
= None):
36 _storage_path
= storage_path
42 def get_feed_items(id):
44 return im
.get_feed_items(id)
46 def get_category_items(id, callback
):
50 calls
.put_nowait((im
.get_category_items
, (id,), callback
))
51 #print calls.get_nowait()
52 #return im.get_category_items(id)
55 def feed_item_exists(item
):
57 return im
.feed_item_exists(item
)
59 class ItemManager(GObject
):
61 "item-added" : (gobject
.SIGNAL_RUN_LAST
, gobject
.TYPE_NONE
, (gobject
.TYPE_PYOBJECT
,)),
62 "feed-added" : (gobject
.SIGNAL_RUN_LAST
, gobject
.TYPE_NONE
, (gobject
.TYPE_PYOBJECT
,)),
63 "category-added" : (gobject
.SIGNAL_RUN_LAST
, gobject
.TYPE_NONE
, (gobject
.TYPE_PYOBJECT
,)),
64 "update-all-done" : (gobject
.SIGNAL_RUN_LAST
, gobject
.TYPE_NONE
, ())
68 GObject
.__init
__(self
)
72 def init_storage(self
, path
):
73 self
.storage
= Storage(path
)
74 self
.dao
= DAO(self
.storage
)
76 def get_category_items(self
, id):
77 category
= FeedManager
.lookup_category(id)
82 in_str
= ", ".join([str(feed
.id) for feed
in FeedManager
.get_children_feeds(id)])
84 query
= "SELECT id, title, feed_id, is_read, link, pub_date FROM items WHERE feed_id IN(%s) ORDER BY pub_date DESC" % in_str
85 #query = "SELECT id, title, feed_id, is_read, link, pub_date FROM items WHERE feed_id IN(%s) ORDER BY pub_date DESC" % in_str# LIMIT %d OFFSET %d" % (in_str, size, start)
86 #query = "SELECT id, title, feed_id, is_read, link, pub_date FROM items ORDER BY pub_date DESC"# LIMIT %d OFFSET %d" % (in_str, size, start)
88 items
= self
.dao
.get(Item
, query
= query
)
91 feed
= FeedManager
.lookup_feed(item
.feed_id
)
93 item
.connect("is-read-changed", feed
.on_is_read_changed
)
94 item
.connect("is-read-changed", self
.on_item_is_read_changed
)
98 def get_feed_items(self
, id):
99 feed
= FeedManager
.lookup_feed(id)
100 feed
.items
= self
.dao
.get(Item
, " WHERE feed_id = %d ORDER BY pub_date DESC" % feed
.id)
102 for item
in feed
.items
:
104 item
.connect("is-read-changed", feed
.on_is_read_changed
)
105 item
.connect("is-read-changed", self
.on_item_is_read_changed
)
109 def feed_item_exists(self
, item
):
110 result
= self
.dao
.get(Item
, sql
= " WHERE feed_id = ? AND title = ?", params
= (str(item
.feed_id
), str(item
.title
),))
111 return len(result
) > 0
113 def on_item_is_read_changed(self
, obj
, is_read
):
121 _instance
= ItemManager()