#!/usr/bin/python3
# very basic GUI for rsstube
# TODO: some things that would be good...
# - make it better in general
# - probably rewrite rsstube interface so it can be called as a proper function
# - support inputting multiple URLs
# - support output as OPML
# - copy to clipboard button
import gi,subprocess,sys,pycurl
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class RsstubeGtk(Gtk.Window):
def __init__(self):
super(RsstubeGtk, self).__init__()
self.set_title("rsstube-gtk")
self.set_size_request(600,250)
self.input_label = Gtk.Label()
self.input_label.set_text("Enter URL")
self.entry = Gtk.Entry()
self.entry.set_width_chars(60)
self.btn = Gtk.Button()
self.btn.set_label("Get Feed")
self.btn.connect("clicked",self.get_feed)
self.output_label = Gtk.Label()
self.output_label.set_text("")
self.output_label.set_selectable(True)
self.output_label.set_width_chars(60)
fixed = Gtk.Fixed()
fixed.put(self.input_label,25,25)
fixed.put(self.entry,25,50)
fixed.put(self.btn,25,100)
fixed.put(self.output_label,25,150)
self.add(fixed)
self.show_all()
self.connect("destroy", Gtk.main_quit)
# runs rsstube
def get_feed(self,widget):
error_color = "#B3589A"
url = self.entry.get_text()
feed = str(subprocess.check_output([sys.executable, "scripts/rsstube.py", url]))
feed = feed[:feed.rindex("\\n")]
feed = feed[feed.rindex("\\n")+2:]
# this color is used for error output
if "\\x1b[1;31m[" in feed:
errmsg = feed[feed.index(']')+2:]
errmsg = errmsg[:errmsg.rindex("\\x1b[0m")]
self.output_label.set_markup('' + errmsg + '')
else:
self.output_label.set_markup('' + feed + '')
RsstubeGtk()
Gtk.main()