Sun, 29 Jul 2007 19:00:14 +0000
Make the rss-reader look and behave nicer.
|
19175
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
1 | #!/usr/bin/env python |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
2 | |
|
19179
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
3 | """ |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
4 | gr - An RSS-reader built using libgnt and feedparser. |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
5 | |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
6 | Copyright (C) 2007 Sadrul Habib Chowdhury <sadrul@pidgin.im> |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
7 | |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
8 | This application is free software; you can redistribute it and/or |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
9 | modify it under the terms of the GNU Lesser General Public |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
10 | License as published by the Free Software Foundation; either |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
11 | version 2.1 of the License, or (at your option) any later version. |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
12 | |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
13 | This application is distributed in the hope that it will be useful, |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
16 | Lesser General Public License for more details. |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
17 | |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
18 | You should have received a copy of the GNU Lesser General Public |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
19 | License along with this application; if not, write to the Free Software |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
20 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
21 | USA |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
22 | """ |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
23 | |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
24 | """ |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
25 | This file deals with the rss parsing part (feedparser) of the application |
|
b3e5a04d839f
Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19178
diff
changeset
|
26 | """ |
|
19175
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
27 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
28 | import threading |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
29 | import feedparser |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
30 | import gobject |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
31 | import sys |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
32 | import time |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
33 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
34 | ## |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
35 | # The FeedItem class. It will update emit 'delete' signal when it's |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
36 | # destroyed. |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
37 | ## |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
38 | class FeedItem(gobject.GObject): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
39 | __gproperties__ = { |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
40 | 'unread' : (gobject.TYPE_BOOLEAN, 'read', |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
41 | 'The unread state of the item.', |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
42 | False, gobject.PARAM_READWRITE) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
43 | } |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
44 | __gsignals__ = { |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
45 | 'delete' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_OBJECT,)) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
46 | } |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
47 | def __init__(self, item, parent): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
48 | self.__gobject_init__() |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
49 | self.date = item['date'] |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
50 | self.date_parsed = item['date_parsed'] |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
51 | self.title = item['title'] |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
52 | self.summary = item['summary'] |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
53 | self.link = item['link'] |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
54 | self.parent = parent |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
55 | self.unread = True |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
56 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
57 | def remove(self): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
58 | self.emit('delete', self.parent) |
|
19178
952bf9cb471d
A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19176
diff
changeset
|
59 | if self.unread: |
|
952bf9cb471d
A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19176
diff
changeset
|
60 | self.parent.set_property('unread', self.parent.unread - 1) |
|
19175
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
61 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
62 | def do_set_property(self, property, value): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
63 | if property.name == 'unread': |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
64 | self.unread = value |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
65 | |
|
19186
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
66 | def mark_unread(self, unread): |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
67 | if self.unread == unread: |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
68 | return |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
69 | self.set_property('unread', unread) |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
70 | |
|
19175
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
71 | gobject.type_register(FeedItem) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
72 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
73 | def item_hash(item): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
74 | return str(item['date'] + item['title']) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
75 | |
|
19186
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
76 | """ |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
77 | The Feed class. It will update the 'link', 'title', 'desc' and 'items' |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
78 | attributes if/when they are updated (triggering 'notify::<attr>' signal) |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
79 | |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
80 | TODO: |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
81 | - Add a 'count' attribute |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
82 | - Each feed will have a 'uidata', which will be its display window |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
83 | - Look into 'category'. Is it something that feed defines, or the user? |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
84 | - Have separate refresh times for each feed. |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
85 | - Have 'priority' for each feed. (somewhat like category, perhaps?) |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
86 | """ |
|
19175
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
87 | class Feed(gobject.GObject): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
88 | __gproperties__ = { |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
89 | 'link' : (gobject.TYPE_STRING, 'link', |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
90 | 'The web page this feed is associated with.', |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
91 | '...', gobject.PARAM_READWRITE), |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
92 | 'title' : (gobject.TYPE_STRING, 'title', |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
93 | 'The title of the feed.', |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
94 | '...', gobject.PARAM_READWRITE), |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
95 | 'desc' : (gobject.TYPE_STRING, 'description', |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
96 | 'The description for the feed.', |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
97 | '...', gobject.PARAM_READWRITE), |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
98 | 'items' : (gobject.TYPE_POINTER, 'items', |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
99 | 'The items in the feed.', gobject.PARAM_READWRITE), |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
100 | 'unread' : (gobject.TYPE_INT, 'unread', |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
101 | 'Number of unread items in the feed.', 0, 10000, 0, gobject.PARAM_READWRITE) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
102 | } |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
103 | __gsignals__ = { |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
104 | 'added' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_OBJECT,)) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
105 | } |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
106 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
107 | def __init__(self, url): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
108 | self.__gobject_init__() |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
109 | self.url = url # The url of the feed itself |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
110 | self.link = url # The web page associated with the feed |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
111 | self.desc = url |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
112 | self.title = url |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
113 | self.unread = 0 |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
114 | self.timer = 0 |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
115 | self.items = [] |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
116 | self.hash = {} |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
117 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
118 | def do_set_property(self, property, value): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
119 | if property.name == 'link': |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
120 | self.link = value |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
121 | elif property.name == 'desc': |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
122 | self.desc = value |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
123 | elif property.name == 'title': |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
124 | self.title = value |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
125 | elif property.name == 'unread': |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
126 | self.unread = value |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
127 | pass |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
128 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
129 | def check_thread_for_death(self): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
130 | #if self.thread.running: |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
131 | # sys.stderr.write(time.ctime() + "continue") |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
132 | # return True |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
133 | # The thread has ended!! |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
134 | #result = self.thread.result |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
135 | #self.thread = None |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
136 | result = feedparser.parse(self.url) |
|
19178
952bf9cb471d
A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19176
diff
changeset
|
137 | # XXX Look at result['bozo'] first, and emit some signal that the UI can use |
|
952bf9cb471d
A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19176
diff
changeset
|
138 | # to indicate (dim the row?) that the feed has invalid XML format or something |
|
952bf9cb471d
A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19176
diff
changeset
|
139 | |
|
19175
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
140 | channel = result['channel'] |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
141 | self.set_property('link', channel['link']) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
142 | self.set_property('desc', channel['description']) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
143 | self.set_property('title', channel['title']) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
144 | self.timer = 0 |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
145 | items = result['items'] |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
146 | tmp = {} |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
147 | for item in self.items: |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
148 | tmp[hash(item)] = item |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
149 | |
|
19178
952bf9cb471d
A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19176
diff
changeset
|
150 | unread = self.unread |
|
19175
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
151 | for item in items: |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
152 | try: |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
153 | exist = self.hash[item_hash(item)] |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
154 | del tmp[hash(exist)] |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
155 | except: |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
156 | itm = FeedItem(item, self) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
157 | self.items.append(itm) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
158 | self.emit('added', itm) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
159 | self.hash[item_hash(item)] = itm |
|
19178
952bf9cb471d
A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19176
diff
changeset
|
160 | unread = unread + 1 |
|
952bf9cb471d
A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19176
diff
changeset
|
161 | |
|
19175
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
162 | for hv in tmp: |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
163 | tmp[hv].remove() |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
164 | |
|
19178
952bf9cb471d
A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19176
diff
changeset
|
165 | if unread != self.unread: |
|
952bf9cb471d
A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19176
diff
changeset
|
166 | self.set_property('unread', unread) |
|
19175
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
167 | return False |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
168 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
169 | def refresh(self): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
170 | #if self.thread == 0: |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
171 | # self.thread = FeedReader(self) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
172 | # self.thread.start() |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
173 | if self.timer == 0: |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
174 | self.timer = gobject.timeout_add(1000, self.check_thread_for_death) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
175 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
176 | gobject.type_register(Feed) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
177 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
178 | ## |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
179 | # A FeedReader class, which is threaded to make sure it doesn't freeze the ui |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
180 | # (this thing doesn't quite work ... yet) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
181 | ## |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
182 | class FeedReader(threading.Thread): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
183 | def __init__(self, feed): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
184 | self.feed = feed |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
185 | self.running = True |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
186 | threading.Thread.__init__(self) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
187 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
188 | def run(self): |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
189 | sys.stderr.write(str(time.ctime()) + " STARTED!!!\n\n\n") |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
190 | self.running = True |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
191 | self.result = feedparser.parse(self.feed.url) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
192 | self.running = False |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
193 | sys.stderr.write(str(time.ctime()) + " DONE!!!\n\n\n") |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
194 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
195 | feeds = [] |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
196 | urls = ("http://rss.slashdot.org/Slashdot/slashdot", |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
197 | "http://www.python.org/channews.rdf", |
|
19186
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
198 | "http://pidgin.im/rss.php", |
|
6426c0906fc8
Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19179
diff
changeset
|
199 | "http://kerneltrap.org/node/feed" |
|
19175
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
200 | ) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
201 | |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
202 | for url in urls: |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
203 | feed = Feed(url) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
204 | feeds.append(feed) |
|
d6cea4e8560f
A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
205 |