11 |
def set_busy_cursor(): |
def set_busy_cursor(): |
12 |
rw = gtk.gdk.get_default_root_window() |
rw = gtk.gdk.get_default_root_window() |
13 |
rw.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) |
rw.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) |
14 |
|
while gtk.events_pending(): |
15 |
|
gtk.mainiteration(gtk.FALSE) |
16 |
|
|
17 |
|
|
18 |
def set_ready_cursor(): |
def set_ready_cursor(): |
19 |
rw = gtk.gdk.get_default_root_window() |
rw = gtk.gdk.get_default_root_window() |
20 |
rw.set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR)) |
rw.set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR)) |
21 |
|
while gtk.events_pending(): |
22 |
|
gtk.mainiteration(gtk.FALSE) |
23 |
|
|
24 |
class SubscribeDialog: |
class SubscribeDialog: |
25 |
COLUMN_SUBSCRIBE = 0 |
COLUMN_SUBSCRIBE = 0 |
62 |
self.reset_fields() |
self.reset_fields() |
63 |
|
|
64 |
def on_start_page_prepare(self, *args): |
def on_start_page_prepare(self, *args): |
65 |
|
self._start_page.emit_stop_by_name("prepare") |
66 |
self._find_assistant.set_buttons_sensitive(gtk.FALSE, gtk.TRUE, gtk.TRUE, gtk.TRUE) |
self._find_assistant.set_buttons_sensitive(gtk.FALSE, gtk.TRUE, gtk.TRUE, gtk.TRUE) |
67 |
|
|
68 |
def on_start_page_next(self, *args): |
def on_start_page_next(self, *args): |
74 |
|
|
75 |
def on_location_page_prepare(self, *args): |
def on_location_page_prepare(self, *args): |
76 |
self._location_page.emit_stop_by_name("prepare") |
self._location_page.emit_stop_by_name("prepare") |
77 |
forward = gtk.FALSE |
if not self._url: |
78 |
if self._subscribe_site_entry.get_text().strip(): |
self._url = "" |
79 |
forward = gtk.TRUE |
self._subscribe_site_entry.set_text(self._url) |
80 |
if self._err: |
self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.FALSE, gtk.TRUE, gtk.TRUE) |
81 |
forward = gtk.FALSE |
if self._url and not self._err: |
82 |
self._find_assistant.set_buttons_sensitive(gtk.TRUE, forward, gtk.TRUE, gtk.TRUE) |
self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.TRUE, gtk.TRUE, gtk.TRUE) |
83 |
|
|
84 |
def on_location_page_next(self, widget, data): |
def on_location_page_next(self, widget, data): |
85 |
self.location_page_forward(self._subscribe_site_entry.get_text().strip()) |
gtk.timeout_add(1, self.location_page_forward) |
86 |
return gtk.TRUE |
return gtk.TRUE |
87 |
|
|
88 |
def on_location_page_cancel(self, *args): |
def on_location_page_cancel(self, *args): |
90 |
|
|
91 |
def on_multiple_feed_page_cancel(self, *args): |
def on_multiple_feed_page_cancel(self, *args): |
92 |
self.hide() |
self.hide() |
93 |
|
|
94 |
def on_multiple_feed_page_prepare(self, *args): |
def on_multiple_feed_page_prepare(self, *args): |
95 |
self._multiple_feed_page.emit_stop_by_name("prepare") |
self._multiple_feed_page.emit_stop_by_name("prepare") |
96 |
self.display_feed_choices() |
self.display_feed_choices() |
97 |
|
next = gtk.TRUE |
98 |
if len(self._feeds) == 0: |
if len(self._feeds) == 0: |
99 |
self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.FALSE, gtk.TRUE, gtk.TRUE) |
next = gtk.FALSE |
100 |
|
self._find_assistant.set_buttons_sensitive(gtk.TRUE, next, gtk.TRUE, gtk.TRUE) |
101 |
|
|
102 |
def on_multiple_feed_page_next(self, *args): |
def on_multiple_feed_page_next(self, *args): |
103 |
self._find_assistant.set_page(self._last_page) |
self._find_assistant.set_page(self._last_page) |
108 |
title = "" |
title = "" |
109 |
text = "" |
text = "" |
110 |
if self._err: |
if self._err: |
111 |
title = self._err[0] |
title, text = self._err |
|
text = self._err[1] |
|
|
self._find_assistant.set_show_finish(gtk.FALSE) |
|
112 |
else: |
else: |
113 |
title = _("Feed Found") |
title = _("Feed Found") |
|
self._find_assistant.set_show_finish(gtk.TRUE) |
|
114 |
if (len(self._feeds) == 1): |
if (len(self._feeds) == 1): |
115 |
for f in self._feeds: |
for f in self._feeds: |
116 |
feed, ps = self._feeds[f] |
feed, ps = self._feeds[f] |
118 |
text = _("Press the Apply button if you want to subscribe to the feed below.\n\n") |
text = _("Press the Apply button if you want to subscribe to the feed below.\n\n") |
119 |
text += _("Title: %s \n") % feed.title |
text += _("Title: %s \n") % feed.title |
120 |
|
|
121 |
if (len(feed.channel_description)): |
if feed.channel_description != "": |
122 |
text += _("Description: %s \n") % feed.channel_description |
text += _("Description: %s \n") % feed.channel_description |
123 |
else: |
else: |
124 |
text = _("Press the Apply button if you want to subscribe to the following feeds:\n\n") |
text = _("Press the Apply button if you want to subscribe to the following feeds:\n\n") |
128 |
|
|
129 |
self._last_page.set_title(title) |
self._last_page.set_title(title) |
130 |
self._last_page.set_text(text) |
self._last_page.set_text(text) |
131 |
|
self._find_assistant.set_show_finish(gtk.TRUE) |
132 |
|
self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.TRUE, gtk.TRUE, gtk.TRUE) |
133 |
|
|
134 |
def on_last_page_back(self, widget, data): |
def on_last_page_back(self, widget, data): |
135 |
self._find_assistant.set_show_finish(gtk.FALSE) |
self._find_assistant.set_show_finish(gtk.FALSE) |
140 |
return gtk.TRUE |
return gtk.TRUE |
141 |
|
|
142 |
def on_last_page_finish(self, *args): |
def on_last_page_finish(self, *args): |
143 |
|
self._find_assistant.set_show_finish(gtk.FALSE) |
144 |
for feed, ps in self._feeds.itervalues(): |
for feed, ps in self._feeds.itervalues(): |
145 |
straw.config.feeds.append(feed) |
straw.config.feeds.append(feed) |
146 |
feed.router.route_all(None, ps) |
feed.router.route_all(None, ps) |
148 |
self.hide() |
self.hide() |
149 |
|
|
150 |
def on_last_page_cancel(self, *args): |
def on_last_page_cancel(self, *args): |
151 |
|
self._find_assistant.set_show_finish(gtk.FALSE) |
152 |
self.hide() |
self.hide() |
153 |
|
|
154 |
def on_subscribe_site_entry_changed(self, *args): |
def on_subscribe_site_entry_changed(self, *args): |
157 |
def entry_changed(self): |
def entry_changed(self): |
158 |
text = self._subscribe_site_entry.get_text().strip() |
text = self._subscribe_site_entry.get_text().strip() |
159 |
if text == "": |
if text == "": |
160 |
self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.FALSE, gtk.TRUE, gtk.FALSE) |
self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.FALSE, gtk.TRUE, gtk.TRUE) |
161 |
else: |
else: |
162 |
self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.TRUE, gtk.TRUE, gtk.FALSE) |
self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.TRUE, gtk.TRUE, gtk.TRUE) |
163 |
|
|
164 |
def on_subscribe_site_entry_key_press_event(self, widget, event): |
def on_subscribe_site_entry_key_press_event(self, widget, event): |
165 |
if event.keyval == gtk.keysyms.Return: |
if event.keyval == gtk.keysyms.Return: |
166 |
url = self._subscribe_site_entry.get_text().strip() |
gtk.timeout_add(1, self.location_page_forward) |
|
if url != "": |
|
|
self.location_page_forward(url) |
|
|
|
|
167 |
return gtk.TRUE |
return gtk.TRUE |
168 |
|
|
169 |
def location_page_forward(self, url): |
def location_page_forward(self): |
170 |
num_found = len(self._found_feeds) |
url = self._subscribe_site_entry.get_text().strip() |
171 |
if not self._url == url: |
if self._url != url or (len(self._found_feeds) < 1 and not self._err): |
172 |
self._feeds.clear() |
self._find_assistant.set_buttons_sensitive(gtk.FALSE, gtk.FALSE, gtk.FALSE, gtk.FALSE) |
173 |
set_busy_cursor() |
set_busy_cursor() |
174 |
num_found = self.find_site(url) |
self._feeds.clear() |
175 |
set_ready_cursor() |
self._found_feeds = self.find_site(url) |
176 |
self._url = url |
self._url = url |
177 |
|
set_ready_cursor() |
178 |
|
|
179 |
|
num_found = len(self._found_feeds) |
180 |
|
|
181 |
if num_found > 1: |
if num_found > 1: |
182 |
self._find_assistant.set_page(self._multiple_feed_page) |
self._find_assistant.set_page(self._multiple_feed_page) |
192 |
self.hide() |
self.hide() |
193 |
return gtk.TRUE |
return gtk.TRUE |
194 |
|
|
195 |
def show(self, url): |
def show(self, url=""): |
196 |
self._find_assistant.set_page(self._start_page) |
self._url = url |
|
self._find_assistant.set_buttons_sensitive(gtk.FALSE, gtk.TRUE, gtk.TRUE, gtk.TRUE) |
|
197 |
self._start_page.show() |
self._start_page.show() |
198 |
self._last_page.show() |
self._last_page.show() |
199 |
self._window.show() |
self._window.show() |
|
if url: |
|
|
self.location_page_forward(url.strip()) |
|
|
self._subscribe_site_entry.set_text(url.strip()) |
|
200 |
|
|
201 |
def hide(self): |
def hide(self): |
202 |
|
self._find_assistant.set_page(self._start_page) |
203 |
self.reset_fields() |
self.reset_fields() |
204 |
self._window.hide() |
self._window.hide() |
205 |
self._start_page.hide() |
self._start_page.hide() |
210 |
self._feeds.clear() |
self._feeds.clear() |
211 |
self._err = None |
self._err = None |
212 |
self._found_feeds = [] |
self._found_feeds = [] |
|
self._subscribe_site_entry.set_text("") |
|
|
|
|
213 |
|
|
214 |
def create_columns(self, treeview): |
def create_columns(self, treeview): |
215 |
renderer = gtk.CellRendererToggle() |
renderer = gtk.CellRendererToggle() |
230 |
iter = model.get_iter((int(path),)) |
iter = model.get_iter((int(path),)) |
231 |
feed = model.get_value(iter, self.COLUMN_FEED) |
feed = model.get_value(iter, self.COLUMN_FEED) |
232 |
ps = model.get_value(iter, self.COLUMN_PARSEDSUMMARY) |
ps = model.get_value(iter, self.COLUMN_PARSEDSUMMARY) |
233 |
feed.sticky = not feed.sticky |
sticky = not model.get_value(iter, self.COLUMN_STATUS_FLAG) |
234 |
|
model.set(iter, self.COLUMN_STATUS_FLAG, sticky) |
235 |
|
|
236 |
if feed.sticky: |
next = gtk.TRUE |
237 |
self.add_feed(feed, ps) |
if feed.id in self._feeds: |
|
self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.TRUE, gtk.TRUE, gtk.TRUE) |
|
|
else: |
|
238 |
self.remove_feed(feed.id) |
self.remove_feed(feed.id) |
239 |
if (len(self._feeds) < 1): |
if len(self._feeds) < 1: |
240 |
# let's prevent the user from going on without selecting a feed |
next = gtk.FALSE |
241 |
self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.FALSE, gtk.TRUE, gtk.TRUE) |
else: |
242 |
|
self.add_feed(feed, ps) |
243 |
|
|
244 |
model.set(iter, self.COLUMN_STATUS_FLAG, feed.sticky) |
self._find_assistant.set_buttons_sensitive(gtk.TRUE, next, gtk.TRUE, gtk.TRUE) |
245 |
return gtk.TRUE |
return gtk.TRUE |
246 |
|
|
247 |
|
|
263 |
model.set(iter, self.COLUMN_TITLE, feed.title, |
model.set(iter, self.COLUMN_TITLE, feed.title, |
264 |
self.COLUMN_DESCRIPTION, feed.channel_description, |
self.COLUMN_DESCRIPTION, feed.channel_description, |
265 |
self.COLUMN_FEED, feed, self.COLUMN_PARSEDSUMMARY, ps, |
self.COLUMN_FEED, feed, self.COLUMN_PARSEDSUMMARY, ps, |
266 |
self.COLUMN_STATUS_FLAG, feed.sticky, |
self.COLUMN_STATUS_FLAG, feed.id in self._feeds, |
267 |
self.COLUMN_URL, feed.access_info[0]) |
self.COLUMN_URL, feed.access_info[0]) |
268 |
|
|
269 |
def find_site(self, site): |
def find_site(self, site): |
|
self._found_feeds = [] |
|
270 |
self._err = None |
self._err = None |
271 |
|
found = [] |
272 |
|
|
273 |
try: |
try: |
274 |
feeds = straw.rssfinder.getFeeds(site) |
found = straw.rssfinder.getFeeds(site) |
275 |
except IOError, e: |
except IOError, e: |
276 |
self._err = (_("Feed Not Found"), |
self._err = (_("Feed Not Found"), |
277 |
(_("No feed was found in %s. Please make sure you typed the correct location.") % site)) |
(_("No feed was found in %s. Please make sure you typed the correct location.") % site)) |
282 |
self._err = (_("Fatal Error"), |
self._err = (_("Fatal Error"), |
283 |
_("A fatal error occurred while processing this operation. Please report it to the maintainer. Error: %s") % e) |
_("A fatal error occurred while processing this operation. Please report it to the maintainer. Error: %s") % e) |
284 |
|
|
285 |
if not self._err: |
if self._err: return [] |
|
len_feeds = len(feeds) |
|
286 |
|
|
287 |
if len_feeds < 1: |
if len(found) < 1: |
288 |
self._err = (_("Feed Not Found"), |
self._err = (_("Feed Not Found"), |
289 |
(_("No feed was found in %s. Please make sure you typed the correct location.") % site)) |
(_("No feed was found in %s. Please make sure you typed the correct location.") % site)) |
290 |
return 0 |
return [] |
291 |
|
|
292 |
try: |
try: |
293 |
for url, data in feeds: |
feeds = [] |
294 |
feed = straw.create_new_feed("temporary feed", url) |
for url, data in found: |
295 |
ps = self.parse_feed(data, feed) |
feed = straw.create_new_feed("temporary feed", url) |
296 |
feed.title = straw.utils.convert_entities(ps.title) |
ps = self.parse_feed(data, feed) |
297 |
feed.channel_description = straw.utils.convert_entities(ps.description) |
feed.title = straw.utils.convert_entities(ps.title) |
298 |
feed.sticky = 0 |
feed.channel_description = straw.utils.convert_entities(ps.description) |
299 |
self._found_feeds.append((feed, ps)) |
feeds.append((feed, ps)) |
300 |
return len_feeds |
return feeds |
301 |
|
|
302 |
except Exception, e: |
except Exception, e: |
303 |
self._found_feeds = [] |
log("parse_feed: caught exception ", e) |
304 |
log("parse_feed: caught exception ", e) |
traceback.print_exc() |
305 |
traceback.print_exc() |
self._err = (_("Fatal Error"), |
306 |
self._err = (_("Fatal Error"), |
_("A fatal error occurred while processing this operation. Please report it to the maintainer. Error: %s") % e) |
307 |
_("A fatal error occurred while processing this operation. Please report it to the maintainer. Error: %s") % e) |
return [] |
|
return 0 |
|
308 |
|
|