finch/libgnt/pygnt/example/rss/gntrss-ui.py

Mon, 30 Jul 2007 20:25:38 +0000

author
Sadrul Habib Chowdhury <sadrul@pidgin.im>
date
Mon, 30 Jul 2007 20:25:38 +0000
changeset 19189
d72a994ca5ac
parent 19186
6426c0906fc8
child 19191
1596abb76093
permissions
-rwxr-xr-x

Make things look nice in both 80x25 and in large screens.
Also, add a 'date' column in the items table. It'd be cool to make it configurable.
Some more usability features.

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 UI part (gnt) of the application
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
26
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
27 TODO:
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
28 - Allow showing feeds of only selected 'category' and/or 'priority'. A different
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
29 window should be used to change such filtering.
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
30 - Display details of each item in its own window.
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
31 - Add search capability, and allow searching only in title/body. Also allow
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
32 filtering in the search results.
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
33 - Show the data and time for feed items (probably in a separate column .. perhaps not)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
34 - Have a simple way to add a feed.
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
35 - Allow renaming a feed.
19179
b3e5a04d839f Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19178
diff changeset
36 """
19175
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 import gntrss
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
39 import gnt
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
40 import gobject
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
41 import sys
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
42
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
43 __version__ = "0.0.1alpha"
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
44 __author__ = "Sadrul Habib Chowdhury (sadrul@pidgin.im)"
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
45 __copyright__ = "Copyright 2007, Sadrul Habib Chowdhury"
19179
b3e5a04d839f Update the license info.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19178
diff changeset
46 __license__ = "GPL" # see full license statement above
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
47
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
48 gnt.gnt_init()
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
49
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
50 class RssTree(gnt.Tree):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
51 __gsignals__ = {
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
52 'active_changed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_OBJECT,))
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
53 }
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
54
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
55 def __init__(self):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
56 self.active = None
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
57 gnt.Tree.__init__(self)
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
58 gnt.set_flag(self, 8) # remove borders
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
59 self.connect('key_pressed', self.do_key_pressed)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
60
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
61 def set_active(self, active):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
62 if self.active == active:
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
63 return
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
64 if self.active:
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
65 flag = gnt.TEXT_FLAG_NORMAL
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
66 if self.active.unread:
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
67 flag = flag | gnt.TEXT_FLAG_BOLD
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
68 self.set_row_flags(self.active, flag)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
69 old = self.active
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
70 self.active = active
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
71 flag = gnt.TEXT_FLAG_UNDERLINE
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
72 if self.active.unread:
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
73 flag = flag | gnt.TEXT_FLAG_BOLD
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
74 self.set_row_flags(self.active, flag)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
75 self.emit('active_changed', old)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
76
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
77 def do_key_pressed(self, null, text):
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
78 if text == '\r':
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
79 now = self.get_selection_data()
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
80 self.set_active(now)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
81 return True
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
82 return False
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
83
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
84 gobject.type_register(RssTree)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
85
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
86 win = gnt.Box(homo = False, vert = True)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
87 win.set_toplevel(True)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
88 win.set_title("GntRss")
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
89 win.set_pad(0)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
90
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
91 #
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
92 # [[[ Generic feed/item callbacks
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
93 #
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
94 def feed_item_added(feed, item):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
95 add_feed_item(item)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
96
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
97 def add_feed(feed):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
98 if not feed.get_data('gntrss-connected'):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
99 feed.connect('added', feed_item_added)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
100 feed.connect('notify', update_feed_title)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
101 feed.set_data('gntrss-connected', True)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
102 feeds.add_row_after(feed, [feed.title, str(feed.unread)], None, None)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
103
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
104 def remove_item(item, feed):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
105 items.remove(item)
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 update_feed_item(item, property):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
108 if property.name == 'unread':
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
109 if feeds.active == item.parent:
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
110 flag = 0
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
111 if item == items.active:
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
112 flag = gnt.TEXT_FLAG_UNDERLINE
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
113 if item.unread:
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
114 flag = flag | gnt.TEXT_FLAG_BOLD
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
115 else:
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
116 flag = flag | gnt.TEXT_FLAG_NORMAL
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
117 items.set_row_flags(item, flag)
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
118
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
119 unread = item.parent.unread
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
120 if item.unread:
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
121 unread = unread + 1
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
122 else:
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
123 unread = unread - 1
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
124 item.parent.set_property('unread', unread)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
125
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
126 def add_feed_item(item):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
127 currentfeed = feeds.active
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
128 if item.parent != currentfeed:
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
129 return
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
130 months = ["", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
131 dt = str(item.date_parsed[2]) + "." + months[item.date_parsed[1]] + "." + str(item.date_parsed[0])
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
132 items.add_row_after(item, [str(item.title), dt], None, None)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
133 if item.unread:
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
134 items.set_row_flags(item, gnt.TEXT_FLAG_BOLD)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
135 if not item.get_data('gntrss-connected'):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
136 item.set_data('gntrss-connected', True)
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
137 # this needs to happen *without* having to add the item in the tree
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
138 item.connect('notify', update_feed_item)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
139 item.connect('delete', remove_item)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
140
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
141 #
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
142 # ]]] Generic feed/item callbacks
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
143 #
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
144
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
145
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
146 ####
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
147 # [[[ The list of feeds
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
148 ###
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
149
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
150 # 'Add Feed' dialog
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
151 add_feed_win = None
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
152 def add_feed_win_closed(win):
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
153 global add_feed_win
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
154 add_feed_win = None
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
155
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
156 def add_new_feed():
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
157 global add_feed_win
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
158
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
159 if add_feed_win:
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
160 gnt.gnt_window_present(add_feed_win)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
161 return
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
162 win = gnt.Window()
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
163 win.set_title("New Feed")
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
164
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
165 box = gnt.Box(False, False)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
166 label = gnt.Label("Link")
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
167 box.add_widget(label)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
168 entry = gnt.Entry("")
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
169 entry.set_size(40, 1)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
170 box.add_widget(entry)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
171
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
172 win.add_widget(box)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
173 win.show()
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
174 add_feed_win = win
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
175 add_feed_win.connect("destroy", add_feed_win_closed)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
176
19175
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 # The active row in the feed-list has changed. Update the feed-item table.
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
179 def feed_active_changed(tree, old):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
180 items.remove_all()
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
181 if not tree.active:
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
182 return
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
183 update_items_title()
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
184 for item in tree.active.items:
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
185 add_feed_item(item)
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
186 win.give_focus_to_child(items)
19175
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 #
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
189 # Check for the action keys and decide how to deal with them.
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
190 def feed_key_pressed(tree, text):
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
191 if tree.is_searching():
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
192 return
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
193 if text == 'r':
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
194 feed = tree.get_selection_data()
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
195 tree.perform_action_key('j')
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
196 #tree.perform_action('move-down')
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
197 feed.refresh()
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
198 elif text == 'R':
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
199 feeds = tree.get_rows()
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
200 for feed in feeds:
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
201 feed.refresh()
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
202 elif text == 'm':
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
203 feed = tree.get_selection_data()
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
204 if feed:
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
205 feed.mark_read()
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
206 feed.set_property('unread', 0)
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
207 elif text == 'a':
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
208 add_new_feed()
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
209 else:
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
210 return False
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
211 return True
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
212
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
213 feeds = RssTree()
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
214 feeds.set_property('columns', 2)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
215 feeds.set_col_width(0, 20)
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
216 feeds.set_col_width(1, 6)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
217 feeds.set_column_resizable(0, False)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
218 feeds.set_column_resizable(1, False)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
219 feeds.set_column_is_right_aligned(1, True)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
220 feeds.set_show_separator(False)
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
221 feeds.set_column_title(0, "Feeds")
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
222 feeds.set_show_title(True)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
223
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
224 feeds.connect('active_changed', feed_active_changed)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
225 feeds.connect('key_pressed', feed_key_pressed)
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
226 gnt.unset_flag(feeds, 256) # Fix the width
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
227
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
228 ####
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
229 # ]]] The list of feeds
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
230 ###
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
231
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
232 ####
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
233 # [[[ The list of items in the feed
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
234 ####
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
235
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
236 #
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
237 # The active item in the feed-item list has changed. Update the
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
238 # summary content.
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
239 def item_active_changed(tree, old):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
240 details.clear()
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
241 if not tree.active:
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
242 return
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
243 item = tree.active
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
244 details.append_text_with_flags(str(item.title) + "\n", gnt.TEXT_FLAG_BOLD)
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
245 details.append_text_with_flags("Link: ", gnt.TEXT_FLAG_BOLD)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
246 details.append_text_with_flags(str(item.link) + "\n", gnt.TEXT_FLAG_UNDERLINE)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
247 details.append_text_with_flags("Date: ", gnt.TEXT_FLAG_BOLD)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
248 details.append_text_with_flags(str(item.date) + "\n", gnt.TEXT_FLAG_NORMAL)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
249
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
250 details.append_text_with_flags("\n" + str(item.summary), gnt.TEXT_FLAG_NORMAL)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
251 item.mark_unread(False)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
252
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
253 if old and old.unread: # If the last selected item is marked 'unread', then make sure it's bold
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
254 items.set_row_flags(old, gnt.TEXT_FLAG_BOLD)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
255
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
256 #
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
257 # Look for action keys in the feed-item list.
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
258 def item_key_pressed(tree, text):
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
259 if tree.is_searching():
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
260 return
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
261 current = tree.get_selection_data()
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
262 if text == 'M': # Mark all of the items 'read'
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
263 feed = feeds.active
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
264 if feed:
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
265 feed.mark_read()
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
266 elif text == 'm': # Mark the current item 'read'
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
267 current.mark_unread(False)
19178
952bf9cb471d A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19176
diff changeset
268 tree.perform_action_key('j')
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
269 elif text == 'U': # Mark the current item 'unread'
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
270 current.mark_unread(True)
19178
952bf9cb471d A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19176
diff changeset
271 elif text == 'd':
952bf9cb471d A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19176
diff changeset
272 current.remove()
952bf9cb471d A few updates to the rss reader.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19176
diff changeset
273 tree.perform_action_key('j')
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
274 else:
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
275 return False
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
276 return True
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
277
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
278 items = RssTree()
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
279 items.set_property('columns', 2)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
280 items.set_col_width(0, 40)
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
281 items.set_col_width(1, 11)
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
282 items.set_column_resizable(1, False)
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
283 items.set_column_title(0, "Items")
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
284 items.set_column_title(1, "Date")
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
285 items.set_show_title(True)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
286 items.connect('key_pressed', item_key_pressed)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
287 items.connect('active_changed', item_active_changed)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
288
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
289 ####
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
290 # ]]] The list of items in the feed
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
291 ####
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
292
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
293 #
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
294 # Update the title of the items list depending on the selection in the feed list
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
295 def update_items_title():
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
296 feed = feeds.active
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
297 if feed:
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
298 items.set_column_title(0, str(feed.title) + ": " + str(feed.unread) + "(" + str(len(feed.items)) + ")")
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
299 else:
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
300 items.set_column_title(0, "Items")
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
301 items.draw()
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
302
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
303 # The container on the top
19176
487103c2e783 The promised cleanups.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19175
diff changeset
304 line = gnt.Line(vertical = False)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
305
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
306 # The textview to show the details of a feed
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
307 details = gnt.TextView()
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
308 details.set_take_focus(True)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
309 details.set_flag(gnt.TEXT_VIEW_TOP_ALIGN)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
310 details.attach_scroll_widget(details)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
311
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
312 # Make it look nice
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
313 s = feeds.get_size()
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
314 size = gnt.screen_size()
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
315 size[0] = size[0] - s[0]
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
316 items.set_size(size[0], size[1] / 2)
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
317 details.set_size(size[0], size[1] / 2)
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
318
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
319 # Category tree
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
320 cat = gnt.Tree()
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
321 cat.set_property('columns', 1)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
322 cat.set_column_title(0, 'Category')
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
323 cat.set_show_title(True)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
324 gnt.set_flag(cat, 8) # remove borders
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
325
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
326 box = gnt.Box(homo = False, vert = False)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
327 box.set_pad(0)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
328
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
329 vbox = gnt.Box(homo = False, vert = True)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
330 vbox.set_pad(0)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
331 vbox.add_widget(feeds)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
332 vbox.add_widget(gnt.Line(False))
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
333 vbox.add_widget(cat)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
334 box.add_widget(vbox)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
335
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
336 box.add_widget(gnt.Line(True))
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
337
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
338 vbox = gnt.Box(homo = False, vert = True)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
339 vbox.set_pad(0)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
340 vbox.add_widget(items)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
341 vbox.add_widget(gnt.Line(False))
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
342 vbox.add_widget(details)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
343 box.add_widget(vbox)
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
344
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
345 win.add_widget(box)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
346 win.show()
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
347
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
348 def update_feed_title(feed, property):
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
349 if property.name == 'title':
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
350 feeds.change_text(feed, 0, feed.title)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
351 elif property.name == 'unread':
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
352 feeds.change_text(feed, 1, str(feed.unread) + "(" + str(len(feed.items)) + ")")
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
353 flag = 0
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
354 if feeds.active == feed:
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
355 flag = gnt.TEXT_FLAG_UNDERLINE
19186
6426c0906fc8 Make the rss-reader look and behave nicer.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19179
diff changeset
356 update_items_title()
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
357 if feed.unread > 0:
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
358 flag = flag | gnt.TEXT_FLAG_BOLD
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
359 feeds.set_row_flags(feed, flag)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
360
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
361 # populate everything
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
362 for feed in gntrss.feeds:
19176
487103c2e783 The promised cleanups.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19175
diff changeset
363 feed.refresh()
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
364 add_feed(feed)
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
365
19189
d72a994ca5ac Make things look nice in both 80x25 and in large screens.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19186
diff changeset
366 gnt.gnt_register_action("Stuff", add_new_feed)
19175
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
367 gnt.gnt_main()
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
368
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
369 gnt.gnt_quit()
d6cea4e8560f A proof-of-conecpt RSS reader using pygnt.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
370

mercurial