def save_configs(self, button): cp = ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(), "dats", "servers.txt")) server_name = self.server_entry.get_text() if server_name != "": try: cp.add_section(server_name) except: pass cp.set(server_name, "server", server_name) cp.set(server_name, "port", self.port_entry.get_text()) cp.set(server_name, "nntp_use_ssl", str(self.server_use_ssl_checkbutton.get_active())) if self.server_auth_checkbutton.get_active(): cp.set(server_name, "auth", "True") cp.set(server_name, "username", self.server_username.get_text()) cp.set(server_name, "password", self.server_password.get_text()) else: cp.set(server_name, "auth", "False") cp.set(server_name, "username", "") cp.set(server_name, "password", "") cp.write(file(os.path.join(get_wdir(), "dats", "servers.txt"), "w")) self.win.destroy() self.config_win.refresh_server_list() else: d = Dialog_OK(_("Please set the Server Name"))
def __init__(self,newsrc,main_win,configs,server_name): self.main_win=main_win self.configs=configs self.wdir=get_wdir() self.art_db=main_win.art_db #cleaning files #self.delete_files() #opening connection with server cp=ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(),"dats","servers.txt")) self.connectionsPool=dict() for server in cp.sections(): if cp.get(server,"nntp_use_ssl")=="True": self.connectionsPool[server]=SSLConnection(cp.get(server,"server"),cp.get(server,"port"),cp.get(server,"auth"),cp.get(server,"username"),cp.get(server,"password")) else: self.connectionsPool[server]=Connection(cp.get(server,"server"),cp.get(server,"port"),cp.get(server,"auth"),cp.get(server,"username"),cp.get(server,"password")) #subscribing groups self.subscribe_groups(newsrc,server_name) #closing connection with server for connection in self.connectionsPool.itervalues(): connection.closeConnection()
def __init__(self, newsrc, main_win, configs, server_name): self.main_win = main_win self.configs = configs self.wdir = get_wdir() self.art_db = main_win.art_db #cleaning files #self.delete_files() #opening connection with server cp = ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(), "dats", "servers.txt")) self.connectionsPool = dict() for server in cp.sections(): if cp.get(server, "nntp_use_ssl") == "True": self.connectionsPool[server] = SSLConnection( cp.get(server, "server"), cp.get(server, "port"), cp.get(server, "auth"), cp.get(server, "username"), cp.get(server, "password")) else: self.connectionsPool[server] = Connection( cp.get(server, "server"), cp.get(server, "port"), cp.get(server, "auth"), cp.get(server, "username"), cp.get(server, "password")) #subscribing groups self.subscribe_groups(newsrc, server_name) #closing connection with server for connection in self.connectionsPool.itervalues(): connection.closeConnection()
def save_configs(self, obj): cp = ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(), "dats", "id.txt")) id_name = self.id_entry.get_text().decode("utf-8") if id_name != "": try: cp.add_section(id_name) except: pass cp.set(id_name, "nick", self.nick_entry.get_text().decode("utf-8")) cp.set(id_name, "email", self.email_entry.get_text().decode("utf-8")) if self.use_mail_from.get_active(): use_mail_from = "True" mail_nick = self.mail_nick_entry.get_text().decode("utf-8") mail_email = self.mail_email_entry.get_text().decode("utf-8") else: use_mail_from = "False" mail_nick = "" mail_email = "" cp.set(id_name, "use_mail_from", use_mail_from) cp.set(id_name, "mail_nick", mail_nick) cp.set(id_name, "mail_email", mail_email) cp.set(id_name, "sign", self.sign_entry.get_text().decode("utf-8")) cp.set(id_name, "use_tags", str(bool(self.tags_checkbutton.get_active()))) cp.set(id_name, "wrap", repr(self.wrap_spinbutton.get_value_as_int())) cp.set(id_name, "attribution", self.attribution_entry.get_text().decode("utf-8")) cp.set(id_name, "reply-to", self.reply_to_entry.get_text().decode("utf-8")) cp.set(id_name, "organization", self.organization_entry.get_text().decode("utf-8")) cp.set(id_name, "mail-copies-to", self.mail_copies_to_entry.get_text().decode("utf-8")) if self.generate_mid_checkbutton.get_active(): cp.set(id_name, "gen_mid", "True") cp.set(id_name, "fqdn", self.fqdn_entry.get_text().decode("utf-8")) else: cp.set(id_name, "gen_mid", "False") cp.set(id_name, "fqdn", "") cp.write(file(os.path.join(get_wdir(), "dats", "id.txt"), "w")) self.save_custom_headers(id_name) self.win.destroy() self.config_win.refresh_id_list() else: d = Dialog_OK(_("Please set the Identity Name"))
def load_configs(self, id_to_load): pass cp = ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(), "dats", "id.txt")) self.id_entry.set_text(id_to_load) self.nick_entry.set_text(cp.get(id_to_load, "nick").encode("utf-8")) self.email_entry.set_text(cp.get(id_to_load, "email").encode("utf-8")) if cp.get(id_to_load, "use_mail_from") == "True": self.use_mail_from.set_active(True) else: self.use_mail_from.set_active(False) self.mail_nick_entry.set_sensitive(False) self.mail_email_entry.set_sensitive(False) self.mail_nick_label.set_sensitive(False) self.mail_email_label.set_sensitive(False) self.mail_nick_entry.set_text( cp.get(id_to_load, "mail_nick").encode("utf-8")) self.mail_email_entry.set_text( cp.get(id_to_load, "mail_email").encode("utf-8")) self.sign_entry.set_text(cp.get(id_to_load, "sign").encode("utf-8")) self.tags_checkbutton.set_active( cp.get(id_to_load, "use_tags") == "True") self.wrap_spinbutton.set_value(int(cp.get(id_to_load, "wrap"))) self.attribution_entry.set_text( cp.get(id_to_load, "attribution").encode("utf-8")) self.reply_to_entry.set_text( cp.get(id_to_load, "reply-to").encode("utf-8")) self.organization_entry.set_text( cp.get(id_to_load, "organization").encode("utf-8")) self.mail_copies_to_entry.set_text( cp.get(id_to_load, "mail-copies-to").encode("utf-8")) if cp.get(id_to_load, "gen_mid") == "True": self.generate_mid_checkbutton.set_active(True) else: self.generate_mid_checkbutton.set_active(False) self.fqdn_entry.set_sensitive(False) self.fqdn_entry.set_text(cp.get(id_to_load, "fqdn").encode("utf-8")) try: f = open( os.path.join(get_wdir(), "dats", id_to_load + "_custom_headers.txt"), "r") except IOError: pass else: headers = f.read().decode("utf-8") self.custom_headers_buffer.set_text(headers.encode("utf-8")) f.close()
def __init__(self): self.FILENAME = os.path.join(get_wdir(), "tags.txt") self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event", self.delete_event) self.window.connect("destroy", self.destroy) self.window.set_title(_("XPN TagLines Manager")) self.window.set_position(gtk.WIN_POS_CENTER) vbox = gtk.VBox(False, 0) vbox.set_border_width(2) label = gtk.Label(_("\n<b>Insert here a tagline</b>\n")) label.set_use_markup(True) vbox.pack_start(label, True, True, 0) self.entry = gtk.Entry() self.entry.connect("changed", self.show_length) vbox.pack_start(self.entry, False, True, 0) hbox_buttons = gtk.HBox() hbox_buttons.set_border_width(4) self.button_ok = gtk.Button(None, gtk.STOCK_ADD) self.button_ok.connect("clicked", self.append_tag) self.button_close = gtk.Button(None, gtk.STOCK_CLOSE) self.button_close.connect("clicked", self.destroy) hbox_buttons.pack_start(self.button_close, True, True, 2) hbox_buttons.pack_start(self.button_ok, True, True, 2) vbox.pack_start(hbox_buttons, True, True, 0) self.statusbar = gtk.Statusbar() vbox.pack_start(self.statusbar, False, True, 0) self.window.add(vbox) self.window.set_default_size(550, 60) self.window.show_all() self.load_state()
def __init__(self, message, server_name): gtk.Dialog.__init__(self, _("Choose the Server"), None, 0, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK)) self.label = gtk.Label(message) self.label.set_use_markup(True) self.set_position(gtk.WIN_POS_CENTER) self.server_combo = gtk.combo_box_new_text() cp = ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(), "dats", "servers.txt")) positions = dict() i = 0 for server in cp.sections(): self.server_combo.append_text(cp.get(server, "server")) positions[server] = i i = i + 1 if server_name: self.server_combo.set_active(positions.get(server_name, 0)) else: self.server_combo.set_active(0) self.vbox.pack_start(self.label, True, True, 8) self.vbox.pack_start(self.server_combo, False, False, 8) self.server_combo.show() self.label.show() self.label.set_line_wrap(True) if len(positions) == 0: Dialog_OK(_("First you have to configure at least one Server")) self.resp = gtk.RESPONSE_CLOSE self.destroy() else: self.resp = self.run() self.server_name = self.server_combo.get_active_text() self.destroy()
def __init__(self): self.FILENAME=os.path.join(get_wdir(),"tags.txt") self.window=gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event",self.delete_event) self.window.connect("destroy",self.destroy) self.window.set_title(_("XPN TagLines Manager")) self.window.set_position(gtk.WIN_POS_CENTER) vbox=gtk.VBox(False,0) vbox.set_border_width(2) label=gtk.Label(_("\n<b>Insert here a tagline</b>\n")) label.set_use_markup(True) vbox.pack_start(label,True,True,0) self.entry=gtk.Entry() self.entry.connect("changed",self.show_length) vbox.pack_start(self.entry,False,True,0) hbox_buttons=gtk.HBox() hbox_buttons.set_border_width(4) self.button_ok=gtk.Button(None,gtk.STOCK_ADD) self.button_ok.connect("clicked",self.append_tag) self.button_close=gtk.Button(None,gtk.STOCK_CLOSE) self.button_close.connect("clicked",self.destroy) hbox_buttons.pack_start(self.button_close,True,True,2) hbox_buttons.pack_start(self.button_ok,True,True,2) vbox.pack_start(hbox_buttons,True,True,0) self.statusbar=gtk.Statusbar() vbox.pack_start(self.statusbar,False,True,0) self.window.add(vbox) self.window.set_default_size(550,60) self.window.show_all() self.load_state()
def sendQueuedArticles(self,obj): '''Send articles stored in outbox''' ordered_list=load_ordered_list() user_agent=self.VERSION try: articles=os.listdir(os.path.join(self.wdir,"outbox/news")) except: self.statusbar.push(1,_("Problems while opening News OutBox")) else: total=len(articles) news_sent=total cp=ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(),"dats","servers.txt")) self.connectionsPool=dict() for server in cp.sections(): if cp.get(server,"nntp_use_ssl")=="True": self.connectionsPool[server]=SSLConnection(cp.get(server,"server"),cp.get(server,"port"),cp.get(server,"auth"),cp.get(server,"username"),cp.get(server,"password")) else: self.connectionsPool[server]=Connection(cp.get(server,"server"),cp.get(server,"port"),cp.get(server,"auth"),cp.get(server,"username"),cp.get(server,"password")) i=0 for articleName in articles: i=i+1 try: f=open(os.path.join(self.wdir,"outbox/news/",articleName),"rb") except: self.statusbar.push(1,_("Problems while opening article :")+articleName) else: self.statusbar.push(1,_("Sending Article: ")+articleName) while gtk.events_pending(): gtk.main_iteration(False) draftArticle=cPickle.load(f) f.close() newsgroups=draftArticle.get("newsgroups","") from_name=draftArticle.get("from_name","") subject=draftArticle.get("subject","") references=draftArticle.get("references","") output_charset=draftArticle.get("output_charset","") body=draftArticle.get("body","") custom_names=draftArticle.get("custom_names",[]) custom_values=draftArticle.get("custom_values",[]) article_to_send=Article_To_Send(newsgroups,from_name,subject,references,user_agent,output_charset,ordered_list,body,custom_names,custom_values,self.configs["gen_mid"],self.configs["fqdn"]) article=article_to_send.get_article() server_name=draftArticle.get("server_name","") message,articlePosted=self.connectionsPool[server_name].sendArticle(article) self.statusbar.push(1,message) if articlePosted: os.remove(os.path.join(self.wdir,"outbox/news/",articleName)) self.store_article(os.path.join(self.wdir,"sent/news"),draftArticle) else: news_sent=news_sent-1 while gtk.events_pending(): gtk.main_iteration(False) self.statusbar.push(1,_("Sent %d Articles") % (news_sent,)) for connection in self.connectionsPool.itervalues(): connection.closeConnection() self.populateFolderTree()
def load_shortcuts(win): main_actions, edit_actions, outbox_actions = load_actions() main_shortcuts = dict() edit_shortcuts = dict() outbox_shortcuts = dict() try: f = open(os.path.join(get_wdir(), "dats/shortcuts.dat"), "rb") except IOError: file_found = False else: file_found = True shortcuts = cPickle.load(f) f.close() if not shortcuts: file_found = False if win == "main": for action in main_actions: if len(action) > 2: if file_found: try: main_shortcuts[action[0]] = shortcuts["main"][ action[0]] except: main_shortcuts[action[0]] = action[2] else: main_shortcuts[action[0]] = action[2] return main_shortcuts if win == "edit": for action in edit_actions: if len(action) > 2: if file_found: try: edit_shortcuts[action[0]] = shortcuts["edit"][ action[0]] except: edit_shortcuts[action[0]] = action[2] else: edit_shortcuts[action[0]] = action[2] return edit_shortcuts if win == "outbox": for action in outbox_actions: if len(action) > 2: if file_found: try: outbox_shortcuts[action[0]] = shortcuts["outbox"][ action[0]] except: edit_shortcuts[action[0]] = action[2] else: outbox_shortcuts[action[0]] = action[2] return outbox_shortcuts else: return dict()
def save_custom_headers(self,id_name): bounds=self.custom_headers_buffer.get_bounds() if bounds: start,stop=bounds f=open(os.path.join(get_wdir(),"dats",id_name+"_custom_headers.txt"),"w") headers=self.custom_headers_buffer.get_text(start,stop,True).decode("utf-8").split("\n") for header in headers: if ":" in header: f.write(header.encode("utf-8")+"\n") f.close()
def save_configs(self,obj): cp=ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(),"dats","id.txt")) id_name=self.id_entry.get_text().decode("utf-8") if id_name!="": try: cp.add_section(id_name) except: pass cp.set(id_name,"nick",self.nick_entry.get_text().decode("utf-8")) cp.set(id_name,"email",self.email_entry.get_text().decode("utf-8")) if self.use_mail_from.get_active(): use_mail_from="True" mail_nick=self.mail_nick_entry.get_text().decode("utf-8") mail_email=self.mail_email_entry.get_text().decode("utf-8") else: use_mail_from="False" mail_nick="" mail_email="" cp.set(id_name,"use_mail_from",use_mail_from) cp.set(id_name,"mail_nick",mail_nick) cp.set(id_name,"mail_email",mail_email) cp.set(id_name,"sign",self.sign_entry.get_text().decode("utf-8")) cp.set(id_name,"use_tags",str(bool(self.tags_checkbutton.get_active()))) cp.set(id_name,"wrap",repr(self.wrap_spinbutton.get_value_as_int())) cp.set(id_name,"attribution",self.attribution_entry.get_text().decode("utf-8")) cp.set(id_name,"reply-to",self.reply_to_entry.get_text().decode("utf-8")) cp.set(id_name,"organization",self.organization_entry.get_text().decode("utf-8")) cp.set(id_name,"mail-copies-to",self.mail_copies_to_entry.get_text().decode("utf-8")) if self.generate_mid_checkbutton.get_active(): cp.set(id_name,"gen_mid","True") cp.set(id_name,"fqdn",self.fqdn_entry.get_text().decode("utf-8")) else: cp.set(id_name,"gen_mid","False") cp.set(id_name,"fqdn","") cp.write(file(os.path.join(get_wdir(),"dats","id.txt"),"w")) self.save_custom_headers(id_name) self.win.destroy() self.config_win.refresh_id_list() else: d=Dialog_OK(_("Please set the Identity Name"))
def get_sizes(self): try: f=open(os.path.join(get_wdir(),"dats/sizes.dat"),"rb") except IOError: column1_width=145 else: sizes=cPickle.load(f) f.close() column1_width=int(sizes.get("groups_col1",145)) return int(column1_width)
def load_headers_list(): try: f = open(os.path.join(get_wdir(), "dats/headers_list.dat"), "rb") except IOError: list = default_list else: list = cPickle.load(f) f.close() if not list: list = headers_list return list
def load_headers_list(): try: f=open(os.path.join(get_wdir(),"dats/headers_list.dat"),"rb") except IOError: list=default_list else: list=cPickle.load(f) f.close() if not list: list=headers_list return list
def add_log(self,message,is_command): try: f=open(os.path.join(get_wdir(),"server_logs.dat"),"a") except IOError: pass else: if is_command: f.write(time.ctime(time.time())+" :: >> "+message+"\n") else: f.write(time.ctime(time.time())+" :: << "+message+"\n") f.close()
def load_ordered_list(): try: f=open(os.path.join(get_wdir(),"dats/charset_list.dat"),"rb") except IOError: list=ordered_list else: list=cPickle.load(f) f.close() if not list: list=ordered_list return list
def add_log(self, message, is_command): try: f = open(os.path.join(get_wdir(), "server_logs.dat"), "a") except IOError: pass else: if is_command: f.write(time.ctime(time.time()) + " :: >> " + message + "\n") else: f.write(time.ctime(time.time()) + " :: << " + message + "\n") f.close()
def __init__(self, art_db): self.wdir = get_wdir() self.art_db = art_db self.groups_list_db = Groups_DB() self.message = "" self.newsrc = "" self.newsrc = self.build_newsrc() if self.newsrc == None: self.message = "You have to download the newsgroups list first" else: self.message = _("Newsrc successful exported")
def __init__(self,art_db): self.wdir=get_wdir() self.art_db=art_db self.groups_list_db=Groups_DB() self.message="" self.newsrc="" self.newsrc=self.build_newsrc() if self.newsrc==None: self.message="You have to download the newsgroups list first" else: self.message=_("Newsrc successful exported")
def load_configs(self,id_to_load): pass cp=ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(),"dats","id.txt")) self.id_entry.set_text(id_to_load) self.nick_entry.set_text(cp.get(id_to_load,"nick").encode("utf-8")) self.email_entry.set_text(cp.get(id_to_load,"email").encode("utf-8")) if cp.get(id_to_load,"use_mail_from")=="True": self.use_mail_from.set_active(True) else: self.use_mail_from.set_active(False) self.mail_nick_entry.set_sensitive(False) self.mail_email_entry.set_sensitive(False) self.mail_nick_label.set_sensitive(False) self.mail_email_label.set_sensitive(False) self.mail_nick_entry.set_text(cp.get(id_to_load,"mail_nick").encode("utf-8")) self.mail_email_entry.set_text(cp.get(id_to_load,"mail_email").encode("utf-8")) self.sign_entry.set_text(cp.get(id_to_load,"sign").encode("utf-8")) self.tags_checkbutton.set_active(cp.get(id_to_load,"use_tags")=="True") self.wrap_spinbutton.set_value(int(cp.get(id_to_load,"wrap"))) self.attribution_entry.set_text(cp.get(id_to_load,"attribution").encode("utf-8")) self.reply_to_entry.set_text(cp.get(id_to_load,"reply-to").encode("utf-8")) self.organization_entry.set_text(cp.get(id_to_load,"organization").encode("utf-8")) self.mail_copies_to_entry.set_text(cp.get(id_to_load,"mail-copies-to").encode("utf-8")) if cp.get(id_to_load,"gen_mid")=="True": self.generate_mid_checkbutton.set_active(True) else: self.generate_mid_checkbutton.set_active(False) self.fqdn_entry.set_sensitive(False) self.fqdn_entry.set_text(cp.get(id_to_load,"fqdn").encode("utf-8")) try: f=open(os.path.join(get_wdir(),"dats",id_to_load+"_custom_headers.txt"),"r") except IOError: pass else: headers=f.read().decode("utf-8") self.custom_headers_buffer.set_text(headers.encode("utf-8")) f.close()
def __init__(self): self.wdir=get_wdir() self.headers=["from","subject","date","message-id","references","age","xref","xpost","bytes","lines"] self.action_headers=["from","subject","date","message-id","references","age","xref","xpost","bytes","lines","score"] self.actions=["kill","markread","markunread","mark","unmark","retrieve","keep","unkeep","watch","ignore","unsetwatchignore","setcolor"] self.group_scope_list=[] self.group_rules_list=[] self.errors=[] self.raw_file="" self.raw_scopes=[] self.lines=self.load_file() self.load_rules(self.lines)
def load_shortcuts(win): main_actions,edit_actions,outbox_actions=load_actions() main_shortcuts=dict() edit_shortcuts=dict() outbox_shortcuts=dict() try: f=open(os.path.join(get_wdir(),"dats/shortcuts.dat"),"rb") except IOError: file_found=False else: file_found=True shortcuts=cPickle.load(f) f.close() if not shortcuts: file_found=False if win=="main": for action in main_actions: if len(action)>2: if file_found: try: main_shortcuts[action[0]]=shortcuts["main"][action[0]] except: main_shortcuts[action[0]]=action[2] else: main_shortcuts[action[0]]=action[2] return main_shortcuts if win=="edit": for action in edit_actions: if len(action)>2: if file_found: try: edit_shortcuts[action[0]]=shortcuts["edit"][action[0]] except: edit_shortcuts[action[0]]=action[2] else: edit_shortcuts[action[0]]=action[2] return edit_shortcuts if win=="outbox": for action in outbox_actions: if len(action)>2: if file_found: try: outbox_shortcuts[action[0]]=shortcuts["outbox"][action[0]] except: edit_shortcuts[action[0]]=action[2] else: outbox_shortcuts[action[0]]=action[2] return outbox_shortcuts else: return dict()
def save_custom_headers(self, id_name): bounds = self.custom_headers_buffer.get_bounds() if bounds: start, stop = bounds f = open( os.path.join(get_wdir(), "dats", id_name + "_custom_headers.txt"), "w") headers = self.custom_headers_buffer.get_text( start, stop, True).decode("utf-8").split("\n") for header in headers: if ":" in header: f.write(header.encode("utf-8") + "\n") f.close()
def __init__(self, main_win): self.FILENAME = os.path.join(get_wdir(), "server_logs.dat") self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event", self.delete_event) self.window.connect("destroy", self.destroy) self.window.set_title(_("Server Logs Viewer")) self.window.set_position(gtk.WIN_POS_CENTER) if main_win != None: self.window.set_modal(True) self.window.set_transient_for(main_win) vbox = gtk.VBox(False, 0) vbox.set_border_width(2) label = gtk.Label("\n<b>" + _("Server Logs") + "</b>\n") label.set_use_markup(True) vbox.pack_start(label, False, True, 0) self.buffer = gtk.TextBuffer() scrolledwin = gtk.ScrolledWindow() scrolledwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) scrolledwin.set_border_width(4) self.view = gtk.TextView(self.buffer) self.view.set_wrap_mode(gtk.WRAP_WORD) self.view.set_justification(gtk.JUSTIFY_LEFT) self.view.set_cursor_visible(False) self.view.set_editable(False) self.view.set_indent(2) scrolledwin.add(self.view) blue_color = gtk.gdk.color_parse("blue") red_color = gtk.gdk.color_parse("red") black_color = gtk.gdk.color_parse("black") self.tag_table = self.buffer.get_tag_table() self.blue_tag = gtk.TextTag("blue") self.red_tag = gtk.TextTag("red") self.time_tag = gtk.TextTag("time") self.tag_table.add(self.blue_tag) self.tag_table.add(self.red_tag) self.tag_table.add(self.time_tag) self.blue_tag.set_property("foreground-gdk", blue_color) self.red_tag.set_property("foreground-gdk", red_color) self.time_tag.set_property("foreground-gdk", black_color) vbox.pack_start(scrolledwin, True, True, 0) self.button = gtk.Button(None, gtk.STOCK_OK) self.button.set_border_width(4) self.button.connect("clicked", self.destroy) vbox.pack_start(self.button, False, True, 0) self.window.add(vbox) self.window.set_default_size(550, 500) self.window.show_all() self.load_logs()
def __init__(self,main_win): self.FILENAME=os.path.join(get_wdir(),"server_logs.dat") self.window=gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event",self.delete_event) self.window.connect("destroy",self.destroy) self.window.set_title(_("Server Logs Viewer")) self.window.set_position(gtk.WIN_POS_CENTER) if main_win!=None: self.window.set_modal(True) self.window.set_transient_for(main_win) vbox=gtk.VBox(False,0) vbox.set_border_width(2) label=gtk.Label("\n<b>"+_("Server Logs")+"</b>\n") label.set_use_markup(True) vbox.pack_start(label,False,True,0) self.buffer=gtk.TextBuffer() scrolledwin=gtk.ScrolledWindow() scrolledwin.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) scrolledwin.set_border_width(4) self.view=gtk.TextView(self.buffer) self.view.set_wrap_mode(gtk.WRAP_WORD) self.view.set_justification(gtk.JUSTIFY_LEFT) self.view.set_cursor_visible(False) self.view.set_editable(False) self.view.set_indent(2) scrolledwin.add(self.view) blue_color=gtk.gdk.color_parse("blue") red_color=gtk.gdk.color_parse("red") black_color=gtk.gdk.color_parse("black") self.tag_table=self.buffer.get_tag_table() self.blue_tag=gtk.TextTag("blue") self.red_tag=gtk.TextTag("red") self.time_tag=gtk.TextTag("time") self.tag_table.add(self.blue_tag) self.tag_table.add(self.red_tag) self.tag_table.add(self.time_tag) self.blue_tag.set_property("foreground-gdk",blue_color) self.red_tag.set_property("foreground-gdk",red_color) self.time_tag.set_property("foreground-gdk",black_color) vbox.pack_start(scrolledwin,True,True,0) self.button=gtk.Button(None,gtk.STOCK_OK) self.button.set_border_width(4) self.button.connect("clicked",self.destroy) vbox.pack_start(self.button,False,True,0) self.window.add(vbox) self.window.set_default_size(550,500) self.window.show_all() self.load_logs()
def __init__(self, groups=[]): '''Class constructor it performs some initializations, and open all the DB connections Arguments: groups: a list of groups ''' self._wdir = get_wdir() self._base_path = os.path.join(self._wdir, "groups_info/") self._conf = Config_File() self._configs = self._conf.get_configs() self._connections = dict() self._openSubscribed() for group in groups: self._openGroup(group)
def load_configs(self, server_to_load): cp = ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(), "dats", "servers.txt")) self.server_entry.set_text(cp.get(server_to_load, "server")) self.port_entry.set_text(cp.get(server_to_load, "port")) if cp.get(server_to_load, "nntp_use_ssl") == "True": self.server_use_ssl_checkbutton.set_active(True) else: self.server_use_ssl_checkbutton.set_active(False) if cp.get(server_to_load, "auth") == "True": self.server_auth_checkbutton.set_active(True) else: self.server_auth_checkbutton.set_active(False) self.server_username.set_sensitive(False) self.server_password.set_sensitive(False) self.username_label.set_sensitive(False) self.password_label.set_sensitive(False) self.server_username.set_text(cp.get(server_to_load, "username")) self.server_password.set_text(cp.get(server_to_load, "password"))
def subscribe_groups(self,newsrc,server_name): cp=ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(),"dats","id.txt")) try: id_name=cp.sections()[0] except IndexError: Dialog_OK(_("First you have to create at least one Identity")) else: for group in newsrc: if group.find(":")!=-1: #this is a subscribed group group_info=group.split(":") group_name=group_info[0].strip() group_read_ranges=group_info[1].strip() if group_read_ranges.find("/")!=-1: #Xnews extension for kept articles group_read_ranges,group_kept_ranges=group_read_ranges.split("/") #group_read_list=self.extract_ranges(group_read_ranges) group_first_unread=self.find_first_unread(group_read_ranges) self.subscribe_group(group_name,group_first_unread,group_read_ranges,server_name,id_name)
def _addLog(self, message, is_command): ''' Adds an entry in server_logs.dat. Arguments: message : is the entry to add is_command : if it is True we are adding a message sent to the server, else we are adding a message received from the server ''' try: f = open(os.path.join(get_wdir(), "server_logs.dat"), "a") except IOError: pass else: if is_command: f.write(time.ctime(time.time()) + " :: >> " + message + "\n") else: f.write(time.ctime(time.time()) + " :: << " + message + "\n") f.close()
def subscribe_group(self,group_to_subscribe,server_name): articles_number=self.articles_spinbutton.get_value_as_int() cp=ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(),"dats","id.txt")) try: id_name=cp.sections()[0] except IndexError: self.statusbar.push(1,_("First you have to create at least one Identity")) Dialog_OK(_("First you have to create at least one Identity")) else: last,message=self.download_headers(group_to_subscribe,articles_number,server_name) self.art_db.removeSubscribed(group_to_subscribe) self.art_db.addSubscribed(group_to_subscribe,last,server_name,id_name) if message.lower().startswith("server error"): self.unsubscribe_group(group_to_subscribe) self.statusbar.push(1,_("The Group Name seems to be wrong")) if message.lower().startswith("no connection with"): self.unsubscribe_group(group_to_subscribe) self.statusbar.push(1,message)
def subscribe_groups(self, newsrc, server_name): cp = ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(), "dats", "id.txt")) try: id_name = cp.sections()[0] except IndexError: Dialog_OK(_("First you have to create at least one Identity")) else: for group in newsrc: if group.find(":") != -1: #this is a subscribed group group_info = group.split(":") group_name = group_info[0].strip() group_read_ranges = group_info[1].strip() if group_read_ranges.find( "/") != -1: #Xnews extension for kept articles group_read_ranges, group_kept_ranges = group_read_ranges.split( "/") #group_read_list=self.extract_ranges(group_read_ranges) group_first_unread = self.find_first_unread( group_read_ranges) self.subscribe_group(group_name, group_first_unread, group_read_ranges, server_name, id_name)
def __init__(self,mainWin,VERSION): self.configs=mainWin.configs self.VERSION=VERSION self.subscribedGroups=mainWin.subscribed_groups self.win=gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.connect("delete_event",self.delete_event) #self.win.connect("destroy",self.destroy) self.win.set_title(_("Outbox Manager")) self.win.set_icon(gtk.gdk.pixbuf_new_from_file("pixmaps/outbox.xpm")) vbox=gtk.VBox() #MenuBar self.create_ui() menubar=self.ui.get_widget("/OutboxMenuBar") vbox.pack_start(menubar,False,True) menubar.show() #ToolBar toolbar=self.ui.get_widget("/OutboxToolBar") vbox.pack_start(toolbar,False,True) toolbar.show() #toolbar.set_icon_size(gtk.ICON_SIZE_LARGE_TOOLBAR) toolbar.set_orientation(gtk.ORIENTATION_HORIZONTAL) toolbar.set_style(gtk.TOOLBAR_ICONS) toolbar.set_style(gtk.SHADOW_NONE) self.win.add(vbox) #HBox hpaned=gtk.HPaned() vbox.pack_start(hpaned,True,True) #Folder Tree self.folderTree=gtk.TreeView() model=gtk.TreeStore(gobject.TYPE_STRING,gobject.TYPE_STRING,gtk.gdk.Pixbuf) self.folderTree.set_model(model) text_renderer_bold=gtk.CellRendererText() text_renderer_bold.set_property("weight",1000) text_renderer_number=gtk.CellRendererText() text_renderer_number.set_property("xalign",.5) pix_renderer=gtk.CellRendererPixbuf() self.folderTreeColumnFolder=gtk.TreeViewColumn(_("Folder")) self.folderTreeColumnFolder.pack_start(pix_renderer) self.folderTreeColumnFolder.pack_start(text_renderer_bold) self.folderTreeColumnFolder.set_attributes(pix_renderer,pixbuf=2) self.folderTreeColumnFolder.set_attributes(text_renderer_bold,text=0) self.folderTreeColumnNumber=gtk.TreeViewColumn(_("Number"),text_renderer_number,text=1) self.folderTree.append_column(self.folderTreeColumnFolder) self.folderTree.append_column(self.folderTreeColumnNumber) #self.folderTree.set_expander_column(self.folderTreeColumn) hpaned.add(self.folderTree) #Preview Tree scrolledwin=gtk.ScrolledWindow() scrolledwin.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.previewTree=gtk.TreeView() scrolledwin.add(self.previewTree) # 0: Subject, 1: Newsgroups/To, 2: Date, 3: Article, 4: IsMail, 5: PathToArticle, 6: Seconds model=gtk.ListStore(gobject.TYPE_STRING,gobject.TYPE_STRING,gobject.TYPE_STRING,gobject.TYPE_PYOBJECT,gobject.TYPE_BOOLEAN,gobject.TYPE_STRING,gobject.TYPE_INT) self.previewTree.set_model(model) text_renderer=gtk.CellRendererText() self.previewTreeColumnSubject=gtk.TreeViewColumn(_("Subject"),text_renderer,text=0) self.previewTreeColumnSubject.set_resizable(True) self.previewTreeColumnSubject.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) self.previewTreeColumnSubject.set_fixed_width(300) self.previewTreeColumnSubject.set_sort_column_id(0) self.previewTreeColumnTo=gtk.TreeViewColumn(_("Newsgroups/To"),text_renderer,text=1) self.previewTreeColumnTo.set_resizable(True) self.previewTreeColumnTo.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) self.previewTreeColumnTo.set_fixed_width(150) self.previewTreeColumnTo.set_sort_column_id(1) self.previewTreeColumnDate=gtk.TreeViewColumn(_("Date"),text_renderer,text=2) self.previewTreeColumnDate.set_sort_column_id(6) self.previewTree.append_column(self.previewTreeColumnSubject) self.previewTree.append_column(self.previewTreeColumnTo) self.previewTree.append_column(self.previewTreeColumnDate) hpaned.add(scrolledwin) model.set_sort_column_id(6,gtk.SORT_ASCENDING) self.statusbar=gtk.Statusbar() vbox.pack_start(self.statusbar,False,True) #self.win.maximize() self.wdir=get_wdir() #self.folderTree.connect("row_activated",self.openFolder) self.folderTree.get_selection().connect("changed",self.openFolder) self.previewTree.connect("row_activated",self.openArticle) self.set_sizes() self.outboxwin_width=None self.outboxwin_height=None self.populateFolderTree()
def __init__(self, subscribed_groups, main_win): self.main_win = main_win self.art_db = main_win.art_db n_rows = len(subscribed_groups) self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.connect("delete_event", self.delete_event) self.win.set_title(_("Assign Identities to Groups")) self.win.set_icon(gtk.gdk.pixbuf_new_from_file("pixmaps/conf.xpm")) self.win.set_position(gtk.WIN_POS_CENTER) main_vbox = gtk.VBox() main_vbox.set_border_width(4) group_label = gtk.Label("<b>" + _("Group") + "</b>") group_label.set_alignment(0, 0) group_label.set_use_markup(True) id_label = gtk.Label("<b>" + _("Identity") + "</b>") id_label.set_alignment(0, 0) id_label.set_use_markup(True) groups_table = gtk.Table(n_rows, 2, False) groups_table.set_border_width(8) groups_table.attach(group_label, 0, 1, 0, 1, False, False, 4) groups_table.attach(id_label, 1, 2, 0, 1, False, False, 4) self.entries = [] self.combos = [] cp_id = ConfigParser.ConfigParser() cp_id.read(os.path.join(get_wdir(), "dats", "id.txt")) ids = cp_id.sections() j = 0 positions = dict() for id in ids: positions[id.decode("utf-8")] = j j = j + 1 i = 0 self.id_dict = dict() for group in subscribed_groups: entry = gtk.Entry() entry.set_editable(False) entry.set_text(group[0]) combo = gtk.combo_box_new_text() for id in ids: combo.append_text(id) combo.set_active(positions.get(group[2], 0)) self.id_dict[group[0]] = combo groups_table.attach(entry, 0, 1, i + 1, i + 2, gtk.EXPAND | gtk.FILL, gtk.FILL) groups_table.attach(combo, 1, 2, i + 1, i + 2, gtk.FILL, gtk.EXPAND | gtk.SHRINK) self.entries.append(entry) self.combos.append(combo) i = i + 1 viewport = gtk.Viewport() viewport.set_shadow_type(gtk.SHADOW_ETCHED_IN) scrolledwin = gtk.ScrolledWindow() scrolledwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) #buttons hbox buttons_hbox = gtk.HBox() #cancel_button self.cancel_button = gtk.Button(None, gtk.STOCK_CANCEL) self.cancel_button_tooltip = gtk.Tooltips() self.cancel_button_tooltip.set_tip(self.cancel_button, _("Close window. Discard changes")) self.cancel_button.connect("clicked", self.destroy) buttons_hbox.pack_start(self.cancel_button, True, True, 0) #ok_button self.ok_button = gtk.Button(None, gtk.STOCK_OK) self.ok_button.connect("clicked", self.save_configs) self.ok_button_tooltip = gtk.Tooltips() self.ok_button_tooltip.set_tip(self.ok_button, _("Close window and save settings")) buttons_hbox.pack_start(self.ok_button, True, True, 0) self.ok_button.set_border_width(5) self.cancel_button.set_border_width(5) viewport.add(groups_table) scrolledwin.add(viewport) main_vbox.pack_start(scrolledwin, True, True, 4) main_vbox.pack_start(buttons_hbox, False, False, 0) self.win.add(main_vbox) #self.win.set_default_size(300,300) self.win.set_size_request(350, 300)
def __init__(self,configs,newsgroups,article,selected_text,subscribed_groups,mode="Normal",draft_article=None,pathToArticle="",outboxManager=None,isSent=False,server_name="",id_name=""): if article==None or mode=="Supersede" or mode=="Draft": is_fup=False else: is_fup=True print type(id_name),repr(id_name) self.id_name=id_name.encode("utf-8") print type(self.id_name),repr(self.id_name) self.outboxManager=outboxManager self.pathToArticle=pathToArticle self.isSent=isSent self.wdir=get_wdir() self.fallback_charset=configs["fallback_charset"] self.win=gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.connect("delete_event",self.delete_event) #self.win.connect("destroy",self.destroy) self.win.set_title(_("Edit Article")) self.win.set_icon(gtk.gdk.pixbuf_new_from_file("pixmaps/post.xpm")) #self.win.maximize() #main_vbox main_vbox=gtk.VBox() self.win.add(main_vbox) self.create_ui(configs,article) menubar=self.ui.get_widget("/EditMenuBar") main_vbox.pack_start(menubar,False,True,0) menubar.show() toolbar=self.ui.get_widget("/EditToolBar") main_vbox.pack_start(toolbar,False,False,0) toolbar.show() #toolbar.set_icon_size(gtk.ICON_SIZE_LARGE_TOOLBAR) toolbar.set_orientation(gtk.ORIENTATION_HORIZONTAL) toolbar.set_style(gtk.TOOLBAR_ICONS) toolbar.set_style(gtk.SHADOW_NONE) id_label=gtk.Label("<b>"+_("Identity")+"</b>") id_label.set_alignment(0,0.5) id_label.set_use_markup(True) id_hbox=gtk.HBox() self.id_combo=gtk.combo_box_new_text() self.cp_id=ConfigParser.ConfigParser() self.cp_id.read(os.path.join(get_wdir(),"dats","id.txt")) positions=dict() i=0 for id in self.cp_id.sections(): self.id_combo.append_text(id) positions[id]=i i=i+1 if self.id_name: self.id_combo.set_active(positions[self.id_name]) else: self.id_combo.set_active(0) self.id_name=self.id_combo.get_active_text() id_sep=gtk.VSeparator() server_label=gtk.Label("<b>"+_("Server")+"</b>") server_label.set_alignment(0,0.5) server_label.set_use_markup(True) self.server_combo=gtk.combo_box_new_text() cp=ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(),"dats","servers.txt")) positions=dict() i=0 for server in cp.sections(): self.server_combo.append_text(cp.get(server,"server")) positions[server]=i i=i+1 if server_name: self.server_combo.set_active(positions[server_name]) else: self.server_combo.set_active(0) #Connection self.connectionsPool=dict() for server in cp.sections(): if cp.get(server,"nntp_use_ssl")=="True": self.connectionsPool[server]=SSLConnection(cp.get(server,"server"),cp.get(server,"port"),cp.get(server,"auth"),cp.get(server,"username"),cp.get(server,"password")) else: self.connectionsPool[server]=Connection(cp.get(server,"server"),cp.get(server,"port"),cp.get(server,"auth"),cp.get(server,"username"),cp.get(server,"password")) id_hbox.pack_start(id_label,False,True,4) id_hbox.pack_start(self.id_combo,False,True,4) id_hbox.pack_start(id_sep,False,False,4) id_hbox.pack_start(server_label,False,True,4) id_hbox.pack_start(self.server_combo,False,True,4) main_vbox.pack_start(id_hbox,False,False,4) self.headers_notebook=gtk.Notebook() self.headers_label=gtk.Label(_("Article")) self.headers_table=gtk.Table(3,2,False) self.headers_table.set_border_width(2) self.newsgroups_label=gtk.Label("<b>"+_("Newsgroups : ")+"</b>") self.newsgroups_label.set_use_markup(True) self.newsgroups_label.set_alignment(1,0.5) self.from_label=gtk.Label("<b>"+_("From : ")+"</b>") self.from_label.set_use_markup(True) self.from_label.set_alignment(1,0.5) self.subj_label=gtk.Label("<b>"+_("Subject : ")+"</b>") self.subj_label.set_use_markup(True) self.subj_label.set_alignment(1,0.5) #self.newsgroups_entry=gtk.Entry() self.newsgroups_entry=gtk.combo_box_entry_new_text() self.from_entry=gtk.Entry() self.subj_entry=gtk.Entry() self.headers_table.attach(self.newsgroups_label,0,1,0,1,gtk.FILL,gtk.FILL) self.headers_table.attach(self.from_label,0,1,1,2,gtk.FILL,gtk.FILL) self.headers_table.attach(self.subj_label,0,1,2,3,gtk.FILL,gtk.FILL) self.headers_table.attach(self.newsgroups_entry,1,2,0,1) self.headers_table.attach(self.from_entry,1,2,1,2) self.headers_table.attach(self.subj_entry,1,2,2,3) #buffer self.buffer=gtk.TextBuffer() self.quote1_tag=None self.quote2_tag=None self.quote3_tag=None self.sign_tag=None self.text_tag=None color=configs["text_color"] self.set_text_color(color) color=configs["quote1_color"] self.set_quote_color(color,1) color=configs["quote2_color"] self.set_quote_color(color,2) color=configs["quote3_color"] self.set_quote_color(color,3) color=configs["sign_color"] self.set_sign_color(color) #TextView text_scrolledwin=gtk.ScrolledWindow() text_scrolledwin.set_border_width(2) text_scrolledwin.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) text_scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.textview=gtk.TextView(self.buffer) self.textview.set_wrap_mode(gtk.WRAP_WORD) self.textview.set_indent(4) text_scrolledwin.add(self.textview) self.text_vbox=gtk.VBox() self.text_vbox.pack_start(self.headers_table,False,False) self.text_vbox.pack_start(text_scrolledwin,True,True) self.headers_notebook.append_page(self.text_vbox,self.headers_label) self.custom_headers_label=gtk.Label(_("More Headers")) self.custom_headers_table=gtk.Table(8,2,False) self.custom_headers_table.set_border_width(4) self.reply_to_label=gtk.Label("<b>"+_("Reply-To : ")+"</b>") self.reply_to_label.set_use_markup(True) self.reply_to_label.set_alignment(1,0.5) self.sender_label=gtk.Label("<b>"+_("Sender : ")+"</b>") self.sender_label.set_use_markup(True) self.sender_label.set_alignment(1,0.5) self.organization_label=gtk.Label("<b>"+_("Organization : ")+"</b>") self.organization_label.set_use_markup(True) self.organization_label.set_alignment(1,0.5) self.followup_to_label=gtk.Label("<b>"+_("Followup-To : ")+"</b>") self.followup_to_label.set_use_markup(True) self.followup_to_label.set_alignment(1,0.5) self.mail_copies_to_label=gtk.Label("<b>"+_("Mail-Copies-To : ")+"</b>") self.mail_copies_to_label.set_use_markup(True) self.mail_copies_to_label.set_alignment(1,0.5) self.archive_label=gtk.Label("<b>"+_("Archive : ")+"</b>") self.archive_label.set_use_markup(True) self.archive_label.set_alignment(1,0.5) self.supersedes_label=gtk.Label("<b>"+_("Supersedes : ")+"</b>") self.supersedes_label.set_use_markup(True) self.supersedes_label.set_alignment(1,0.5) self.approved_label=gtk.Label("<b>"+_("Approved : ")+"</b>") self.approved_label.set_use_markup(True) self.approved_label.set_alignment(1,0.5) self.charset_label=gtk.Label("<b>"+_("Charset : ")+"</b>") self.charset_label.set_use_markup(True) self.charset_label.set_alignment(1,0.5) self.reply_to_entry=gtk.Entry() self.sender_entry=gtk.Entry() self.organization_entry=gtk.Entry() self.followup_to_entry=gtk.Entry() self.mail_copies_to_entry=gtk.Entry() self.archive_entry=gtk.Entry() self.supersedes_entry=gtk.Entry() self.supersedes_entry.set_sensitive(False) self.approved_entry=gtk.Entry() self.charset_combo=gtk.combo_box_entry_new_text() for encoding in encodings_list: self.charset_combo.append_text(encoding) self.charset_tooltip=gtk.Tooltips() self.charset_tooltip.set_tip(self.charset_combo.child,encodings_tip) self.charset_combo.child.set_editable(False) self.custom_headers_table.attach(self.reply_to_label,0,1,0,1,gtk.FILL,gtk.FILL) self.custom_headers_table.attach(self.sender_label,0,1,1,2,gtk.FILL,gtk.FILL) self.custom_headers_table.attach(self.organization_label,0,1,2,3,gtk.FILL,gtk.FILL) self.custom_headers_table.attach(self.followup_to_label,0,1,3,4,gtk.FILL,gtk.FILL) self.custom_headers_table.attach(self.mail_copies_to_label,0,1,4,5,gtk.FILL,gtk.FILL) self.custom_headers_table.attach(self.archive_label,0,1,5,6,gtk.FILL,gtk.FILL) self.custom_headers_table.attach(self.supersedes_label,0,1,6,7,gtk.FILL,gtk.FILL) self.custom_headers_table.attach(self.approved_label,0,1,7,8,gtk.FILL,gtk.FILL) self.custom_headers_table.attach(self.charset_label,0,1,8,9,gtk.FILL,gtk.FILL) self.custom_headers_table.attach(self.reply_to_entry,1,2,0,1) self.custom_headers_table.attach(self.sender_entry,1,2,1,2) self.custom_headers_table.attach(self.organization_entry,1,2,2,3) self.custom_headers_table.attach(self.followup_to_entry,1,2,3,4) self.custom_headers_table.attach(self.mail_copies_to_entry,1,2,4,5) self.custom_headers_table.attach(self.archive_entry,1,2,5,6) self.custom_headers_table.attach(self.supersedes_entry,1,2,6,7) self.custom_headers_table.attach(self.approved_entry,1,2,7,8) self.custom_headers_table.attach(self.charset_combo,1,2,8,9) self.custom_headers_frame=gtk.Frame(_("Custom Headers (X-Headers)")) self.custom_headers_frame.set_border_width(4) self.custom_headers_scrolledwin=gtk.ScrolledWindow() self.custom_headers_scrolledwin.set_border_width(4) self.custom_headers_scrolledwin.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) self.custom_headers_scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.custom_headers_buffer=gtk.TextBuffer() self.custom_headers_textview=gtk.TextView(self.custom_headers_buffer) self.custom_headers_scrolledwin.add(self.custom_headers_textview) self.custom_headers_frame.add(self.custom_headers_scrolledwin) self.custom_headers_vbox=gtk.VBox() self.custom_headers_vbox.pack_start(self.custom_headers_table,False,False) self.custom_headers_vbox.pack_start(self.custom_headers_frame,True,True) self.headers_notebook.append_page(self.custom_headers_vbox,self.custom_headers_label) main_vbox.pack_start(self.headers_notebook,True,True,0) #statusbar statusbar_hbox=gtk.HBox() statusbar_hbox.set_border_width(2) self.row_col_label=gtk.Label() vsep=gtk.VSeparator() vsep2=gtk.VSeparator() self.best_charset_label=gtk.Label() self.statusbar=gtk.Statusbar() statusbar_hbox.pack_start(self.row_col_label,False,True,2) statusbar_hbox.pack_start(vsep,False,False,2) statusbar_hbox.pack_start(self.best_charset_label,False,True,2) statusbar_hbox.pack_start(vsep2,False,False,2) statusbar_hbox.pack_start(self.statusbar,True,True,2) main_vbox.pack_start(statusbar_hbox,False,False,0) #check for a valid ID if self.cp_id.sections(): #some updates self.ordered_list=load_ordered_list() self.update_newsgroups_entry(newsgroups,subscribed_groups) self.references="" if is_fup: self.update_subject_entry(article.subj) self.references=self.update_references(article.ref+" "+article.msgid) self.add_attribution_line(article) self.update_body(article,selected_text) start,insert_point=self.buffer.get_bounds() self.buffer.create_mark("insert_point_after_text",insert_point,True) else: insert_point,stop=self.buffer.get_bounds() self.buffer.create_mark("insert_point",insert_point,True) self.add_sign() self.buffer.connect("changed",self.wrap_on_change,configs) self.buffer.connect("mark_set",self.update_position_and_cset) if selected_text==None: insert_pos=self.buffer.get_iter_at_mark(self.buffer.get_mark("insert_point")) else: insert_pos=self.buffer.get_iter_at_mark(self.buffer.get_mark("insert_point_after_text")) self.buffer.place_cursor(insert_pos) self.set_background(configs) self.set_foreground(configs) self.update_position_and_cset() self.is_fup=is_fup if mode=="Supersede": self.supersedes_entry.set_text(article.msgid.encode("utf-8")) self.subj_entry.set_text(article.subj.encode("utf-8")) self.references=self.update_references(article.ref) self.clear_pane() self.show_article(article.body) if mode=="Draft": self.load_draft(draft_article) if configs["external_editor"]=="True": self.external_editor(None,configs["editor_launcher"]) self.load_id() self.id_combo.connect("changed",self.id_changed,article,is_fup) self.set_sizes() self.editwin_width=None self.editwin_height=None self.textview.modify_font(pango.FontDescription(configs["font_name"])) self.show() else: self.win.destroy() Dialog_OK(_("First you have to create at least one Identity"))
def write_configs(self): f = open(os.path.join(get_wdir(), "config.txt"), "w") for key in self.configs.keys(): f.write(key + "=" + self.configs[key].encode("utf-8") + "\n") f.close()
def write_configs(self): f=open(os.path.join(get_wdir(),"config.txt"),"w") for key in self.configs.keys(): f.write(key+"="+self.configs[key].encode("utf-8")+"\n") f.close()
def __init__(self,score_rules,main_win): self.score_rules=score_rules self.wdir=get_wdir() self.art_db=main_win.art_db self.window=gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event",self.delete_event) self.window.connect("destroy",self.destroy) self.window.set_title(_("Scoring Rules")) self.window.set_position(gtk.WIN_POS_CENTER) self.window.set_default_size(450,450) self.window.set_icon(gtk.gdk.pixbuf_new_from_file("pixmaps/score.xpm")) main_vbox=gtk.VBox() main_vbox.set_border_width(2) self.notebook=gtk.Notebook() #Rules Page vpaned=gtk.VPaned() vpaned.set_border_width(4) rules_vbox=gtk.VBox() rules_vbox_label=gtk.Label("<b>"+_("Correct Rules")+"</b>") rules_vbox_label.set_alignment(0,0.5) rules_vbox_label.set_use_markup(True) rules_vbox.pack_start(rules_vbox_label,False,False,4) self.rules_tree=Rules_Tree() rules_table=gtk.Table(1,1,False) rules_table.attach(self.rules_tree.get_widget(),0,1,0,1,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,16) rules_vbox.pack_start(rules_table,True,True) file_vbox=gtk.VBox() file_vbox_label=gtk.Label("<b>"+_("Score File Editor")+"</b>") file_vbox_label.set_alignment(0,0.5) file_vbox_label.set_use_markup(True) file_vbox.pack_start(file_vbox_label,False,False,4) file_table=gtk.Table(3,2,False) file_scrolledwin=gtk.ScrolledWindow() file_scrolledwin.set_border_width(4) file_scrolledwin.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) file_scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.file_buffer=gtk.TextBuffer() self.file_view=gtk.TextView(self.file_buffer) self.file_view.set_border_width(4) self.file_view.modify_font(pango.FontDescription("Monospace 8")) self.file_buffer.set_text(self.score_rules.raw_file.encode("utf-8")) file_scrolledwin.add(self.file_view) file_butt_hbox=gtk.HBox() file_butt_hbox.set_border_width(4) self.button_rescan=gtk.Button(_("ReScan Rules")) self.button_rescan.connect("clicked",self.rescan_rules) self.button_show_errors=gtk.Button(_("Show Errors")) self.button_show_errors.connect("clicked",self.show_errors) file_butt_hbox.pack_start(self.button_rescan,True,True,2) file_butt_hbox.pack_start(self.button_show_errors,True,True,2) file_table.attach(file_scrolledwin,0,1,0,1,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,16) file_table.attach(file_butt_hbox,0,1,1,2,gtk.EXPAND|gtk.FILL,gtk.FILL,16) file_vbox.pack_start(file_table,True,True) vpaned.add(file_vbox) vpaned.add(rules_vbox) rules_label=gtk.Label("<b>"+_("Rules")+"</b>") rules_label.set_use_markup(True) self.notebook.append_page(vpaned,rules_label) #New Score Rule Page new_rule_vbox=gtk.VBox() new_rule_vbox.set_border_width(4) scope_vbox=gtk.VBox() scope_vbox.set_border_width(4) scope_label=gtk.Label("<b>"+_("Groups Scope")+"</b>") scope_label.set_alignment(0,0.5) scope_label.set_use_markup(True) scope_vbox.pack_start(scope_label,False,False,4) self.scope_combo=gtk.combo_box_entry_new_text() popdown=self.score_rules.raw_scopes if "[*]" not in popdown: popdown.insert(0,"[*]") subscribed=self.art_db.getSubscribed() subscribed=["["+subscribed[i][0]+"]" for i in range(len(subscribed))] popdown=popdown+subscribed for item in popdown: self.scope_combo.append_text(item) self.scope_combo.set_active(0) self.scope_combo.set_size_request(250,-1) scope_hbox=gtk.HBox() scope_hbox.set_border_width(4) scope_hbox.pack_start(self.scope_combo,True,False,2) scope_vbox.add(scope_hbox) condition_main_vbox=gtk.VBox() condition_label=gtk.Label("<b>"+_("Condition")+"</b>") condition_label.set_alignment(0,0.5) condition_label.set_use_markup(True) condition_main_vbox.pack_start(condition_label,False,False,4) condition_table=gtk.Table(3,1,False) condition_hbox=gtk.HBox() self.header_opt_menu=gtk.combo_box_new_text() self.header_opt_menu.set_size_request(130,-1) for header in self.score_rules.headers: self.header_opt_menu.append_text(header.capitalize()) self.header_opt_menu.set_active(0) condition_hbox.pack_start(self.header_opt_menu,True,False,2) values=[_("Contains String"),_("Doesn't Contain String"),_("Matches RegEx"),_("Doesn't Match RegEx"), _("Greater Than"), _("Not Greater Than"), _("Lower Than"),_("Not Lower Than"), _("Equal To (numbers only)"),_("Different From (numbers only)"), _("In Range"),_("Out Of Range")] self.match_type_opt_menu=gtk.combo_box_new_text() self.match_type_opt_menu.set_size_request(130,-1) for value in values: self.match_type_opt_menu.append_text(value) self.match_type_opt_menu.set_active(0) self.match_type_opt_menu.connect("changed",self.match_type_changed) condition_hbox.pack_start(self.match_type_opt_menu,True,False) self.case_checkbutton=gtk.CheckButton(_("Case Sensitive")) self.match_value_entry=gtk.Entry() self.match_value_entry.set_size_request(200,-1) self.match_value2_entry=gtk.Entry() self.match_value_label=gtk.Label(_("Lower Limit")) self.match_value2_label=gtk.Label(_("Upper Limit")) match_value_hbox=gtk.HBox() match_value_hbox.pack_start(self.match_value_label,True,False,2) match_value_hbox.pack_start(self.match_value_entry,True,True,2) match_value_hbox.pack_start(self.match_value2_label,True,False,2) match_value_hbox.pack_start(self.match_value2_entry,True,True,2) condition_table.attach(condition_hbox,0,1,0,1,gtk.EXPAND|gtk.FILL,gtk.FILL,16,6) condition_table.attach(match_value_hbox,0,1,1,2,gtk.EXPAND|gtk.FILL,gtk.FILL,16,6) condition_table.attach(self.case_checkbutton,0,1,2,3,gtk.EXPAND|gtk.FILL,gtk.FILL,16,6) condition_main_vbox.pack_start(condition_table,True,True) score_mod_vbox=gtk.VBox() score_mod_label=gtk.Label("<b>"+_("Score")+"</b>") score_mod_label.set_use_markup(True) score_mod_label.set_alignment(0,0.5) score_mod_vbox.pack_start(score_mod_label,False,False,4) score_mod_table=gtk.Table(1,1,False) score_mod_hbox=gtk.HBox() values=[_("Raise Score"),_("Lower Score"), _("Set Score")] self.score_mod_opt_menu=gtk.combo_box_new_text() for value in values: self.score_mod_opt_menu.append_text(value) self.score_mod_opt_menu.set_active(0) self.score_mod_opt_menu.set_size_request(130,-1) score_mod_hbox.pack_start(self.score_mod_opt_menu,True,False,2) score_mod_table.attach(score_mod_hbox,0,1,0,1,gtk.EXPAND|gtk.FILL,gtk.FILL,16,2) score_mod_vbox.add(score_mod_table) self.score_mod_spinbutton=gtk.SpinButton(gtk.Adjustment(value=100,lower=-9999,upper=9999,step_incr=100,page_incr=1000)) self.score_mod_spinbutton.set_size_request(130,-1) score_mod_hbox.pack_start(self.score_mod_spinbutton,True,False,2) #add rule button self.add_rule_button=gtk.Button(_("Add Rule")) self.add_rule_button.connect("clicked",self.add_new_rule) new_rule_vbox.pack_start(scope_vbox,False,True,2) new_rule_vbox.pack_start(condition_main_vbox,True,True,2) new_rule_vbox.pack_start(score_mod_vbox,True,True,2) new_rule_vbox.pack_start(self.add_rule_button,True,False,2) new_rule_label=gtk.Label("<b>"+_("New Scoring Rule")+"</b>") new_rule_label.set_use_markup(True) self.notebook.append_page(new_rule_vbox,new_rule_label) #New Action Rule Page new_action_rule_vbox=gtk.VBox() new_action_rule_vbox.set_border_width(4) action_scope_vbox=gtk.VBox() action_scope_vbox.set_border_width(4) action_scope_label=gtk.Label("<b>"+_("Groups Scope")+"</b>") action_scope_label.set_use_markup(True) action_scope_label.set_alignment(0,0.5) action_scope_vbox.pack_start(action_scope_label,False,False,4) self.action_scope_combo=gtk.combo_box_entry_new_text() popdown=self.score_rules.raw_scopes if "[*]" not in popdown: popdown.insert(0,"[*]") subscribed=self.art_db.getSubscribed() subscribed=["["+subscribed[i][0]+"]" for i in range(len(subscribed))] popdown=popdown+subscribed for item in popdown: self.action_scope_combo.append_text(item) self.action_scope_combo.set_active(0) self.action_scope_combo.set_size_request(250,-1) action_scope_hbox=gtk.HBox() action_scope_hbox.set_border_width(4) action_scope_hbox.pack_start(self.action_scope_combo,True,False,2) action_scope_vbox.add(action_scope_hbox) action_condition_main_vbox=gtk.VBox() action_condition_label=gtk.Label("<b>"+_("Condition")+"</b>") action_condition_label.set_alignment(0,0.5) action_condition_label.set_use_markup(True) action_condition_main_vbox.pack_start(action_condition_label,False,False,4) action_condition_table=gtk.Table(3,1,False) action_condition_hbox=gtk.HBox() self.action_header_opt_menu=gtk.combo_box_new_text() self.action_header_opt_menu.set_size_request(130,-1) for header in self.score_rules.action_headers: self.action_header_opt_menu.append_text(header.capitalize()) self.action_header_opt_menu.set_active(0) action_condition_hbox.pack_start(self.action_header_opt_menu,True,False,2) values=[_("Contains String"),_("Doesn't Contain String"),_("Matches RegEx"),_("Doesn't Match RegEx"), _("Greater Than"), _("Not Greater Than"), _("Lower Than"),_("Not Lower Than"), _("Equal To (numbers only)"),_("Different From (numbers only)"), _("In Range"),_("Out Of Range")] self.action_match_type_opt_menu=gtk.combo_box_new_text() self.action_match_type_opt_menu.set_size_request(130,-1) for value in values: self.action_match_type_opt_menu.append_text(value) self.action_match_type_opt_menu.set_active(0) self.action_match_type_opt_menu.connect("changed",self.action_match_type_changed) action_condition_hbox.pack_start(self.action_match_type_opt_menu,True,False) self.action_case_checkbutton=gtk.CheckButton(_("Case Sensitive")) self.action_match_value_entry=gtk.Entry() self.action_match_value_entry.set_size_request(200,-1) self.action_match_value2_entry=gtk.Entry() self.action_match_value_label=gtk.Label(_("Lower Limit")) self.action_match_value2_label=gtk.Label(_("Upper Limit")) action_match_value_hbox=gtk.HBox() action_match_value_hbox.pack_start(self.action_match_value_label,True,False,2) action_match_value_hbox.pack_start(self.action_match_value_entry,True,True,2) action_match_value_hbox.pack_start(self.action_match_value2_label,True,False,2) action_match_value_hbox.pack_start(self.action_match_value2_entry,True,True,2) action_condition_table.attach(action_condition_hbox,0,1,0,1,gtk.EXPAND|gtk.FILL,gtk.FILL,16,6) action_condition_table.attach(action_match_value_hbox,0,1,1,2,gtk.EXPAND|gtk.FILL,gtk.FILL,16,6) action_condition_table.attach(self.action_case_checkbutton,0,1,2,3,gtk.EXPAND|gtk.FILL,gtk.FILL,16,6) action_condition_main_vbox.add(action_condition_table) action_vbox=gtk.VBox() action_label=gtk.Label("<b>"+_("Action")+"</b>") action_label.set_use_markup(True) action_label.set_alignment(0,0.5) action_vbox.pack_start(action_label,False,False,4) action_table=gtk.Table(1,1,False) action_hbox=gtk.HBox() action_setcolor_hbox=gtk.HBox() action_setcolor_color_hbox=gtk.HBox() values=[_("Kill"),_("Mark Read"),_("Mark Unread"),_("Mark for Download"),_("UnMark for Download"),_("Retrieve"),_("Keep"),_("UnKeep"),_("Watch"),_("Ignore"),_("UnSetWatchIgnore"),_("SetColor")] self.action_type_opt_menu=gtk.combo_box_new_text() for value in values: self.action_type_opt_menu.append_text(value) self.action_type_opt_menu.set_active(0) self.action_type_opt_menu.set_size_request(130,-1) self.action_type_opt_menu.connect("changed",self.action_type_changed) action_hbox.pack_start(self.action_type_opt_menu,True,False,2) self.color1_label=gtk.Label(_("Foreground Color")) self.color2_label=gtk.Label(_("Background Color")) self.color1_entry=gtk.Entry() self.color2_entry=gtk.Entry() self.color1_button=gtk.ColorButton() self.color2_button=gtk.ColorButton() self.color1_button.connect("color_set",self.get_color_from_button) self.color2_button.connect("color_set",self.get_color_from_button) action_setcolor_color_hbox.pack_start(self.color1_label,True,False) action_setcolor_color_hbox.pack_start(self.color2_label,True,False) action_setcolor_hbox.pack_start(self.color1_entry,True,False,2) action_setcolor_hbox.pack_start(self.color1_button,True,False,2) action_setcolor_hbox.pack_start(self.color2_entry,True,False,2) action_setcolor_hbox.pack_start(self.color2_button,True,False,2) action_table.attach(action_hbox,0,1,0,1,gtk.EXPAND|gtk.FILL,16,6) action_table.attach(action_setcolor_color_hbox,0,1,1,2,gtk.EXPAND|gtk.FILL,gtk.FILL,16,6) action_table.attach(action_setcolor_hbox,0,1,2,3,gtk.EXPAND|gtk.FILL,gtk.FILL,16,6) action_vbox.pack_start(action_table,True,True) #add action rule button self.add_action_rule_button=gtk.Button(_("Add Rule")) self.add_action_rule_button.connect("clicked",self.add_new_action_rule) new_action_rule_vbox.pack_start(action_scope_vbox,False,True,2) new_action_rule_vbox.pack_start(action_condition_main_vbox,True,True,2) new_action_rule_vbox.pack_start(action_vbox,True,True,2) new_action_rule_vbox.pack_start(self.add_action_rule_button,True,False,2) new_action_rule_label=gtk.Label("<b>"+_("New Action Rule")+"</b>") new_action_rule_label.set_use_markup(True) self.notebook.append_page(new_action_rule_vbox,new_action_rule_label) #RegEx Tester Page re_tester_vbox=gtk.VBox() re_tester_vbox.set_border_width(4) re_vbox=gtk.VBox() re_label=gtk.Label("<b>"+_("Regular Expression")+"</b>") re_label.set_use_markup(True) re_label.set_alignment(0,0.5) re_vbox.pack_start(re_label,False,False,4) re_table=gtk.Table(1,1,False) re_table.set_border_width(2) self.re_entry=gtk.Entry() re_test_button=gtk.Button(_("Test Regular Expression")) re_test_button.connect("clicked",self.test_re) self.test_case_checkbutton=gtk.CheckButton(_("Case Sensitive")) re_table.attach(self.re_entry,0,1,0,1,gtk.EXPAND|gtk.FILL,gtk.FILL,16,6) re_table.attach(self.test_case_checkbutton,0,1,1,2,gtk.EXPAND|gtk.FILL,gtk.FILL,16,6) re_table.attach(re_test_button,0,1,2,3,gtk.EXPAND|gtk.FILL,gtk.FILL,16,6) re_vbox.add(re_table) re_tester_vbox.pack_start(re_vbox,False,True,2) text_vbox=gtk.VBox() text_label=gtk.Label("<b>"+_("Test Text")+"</b>") text_label.set_alignment(0,0.5) text_label.set_use_markup(True) text_vbox.pack_start(text_label,False,False,4) text_table=gtk.Table(1,1,False) text_scrolledwin=gtk.ScrolledWindow() text_scrolledwin.set_border_width(4) text_scrolledwin.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) text_scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.text_buffer=gtk.TextBuffer() self.text_view=gtk.TextView(self.text_buffer) self.text_view.set_border_width(4) text_scrolledwin.add(self.text_view) text_table.attach(text_scrolledwin,0,1,0,1,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,16) text_vbox.pack_start(text_table,True,True) re_tester_vbox.pack_start(text_vbox,True,True,2) re_tester_label=gtk.Label("<b>"+_("RE Tester")+"</b>") re_tester_label.set_use_markup(True) self.notebook.append_page(re_tester_vbox,re_tester_label) #OK CANCEL buttons main_buttons_hbox=gtk.HBox() main_buttons_hbox.set_border_width(4) cancel_button=gtk.Button(None,gtk.STOCK_CANCEL) cancel_button_tooltip=gtk.Tooltips() cancel_button_tooltip.set_tip(cancel_button,_("Close window. Discard changes")) cancel_button.connect("clicked",self.destroy) main_buttons_hbox.pack_start(cancel_button,True,True,0) ok_button=gtk.Button(None,gtk.STOCK_OK) ok_button_tooltip=gtk.Tooltips() ok_button_tooltip.set_tip(ok_button,_("Close window. Save Changes")) ok_button.connect("clicked",self.close_window) main_buttons_hbox.pack_start(ok_button,True,True,2) vpaned.set_position(200) main_vbox.pack_start(self.notebook,True,True,0) main_vbox.pack_start(main_buttons_hbox,False,False,0) self.window.add(main_vbox) #some init self.show_rules() tag_table=self.text_buffer.get_tag_table() tag_match=gtk.TextTag("match") tag_table.add(tag_match) color_bg=gtk.gdk.color_parse("#0000FF") color_fg=gtk.gdk.color_parse("#FFFFFF") tag_match.set_property("weight",1000) tag_match.set_property("background-gdk",color_bg) tag_match.set_property("foreground-gdk",color_fg)
def reset_defaults(self,obj): try: os.remove(os.path.join(get_wdir(),"dats/shortcuts.dat")) except: pass self.load_list()
def __init__(self, main_win): self.wdir = get_wdir() self.art_db = main_win.art_db self.main_win = main_win self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event", self.delete_event) self.window.connect("destroy", self.destroy) self.window.set_title(_("Global Search")) self.window.set_position(gtk.WIN_POS_CENTER) self.window.set_default_size(350, 300) self.window.set_icon( gtk.gdk.pixbuf_new_from_file("pixmaps/global_search.xpm")) vbox = gtk.VBox() vbox.set_border_width(8) label_from = gtk.Label(_("From")) label_from.set_use_markup(True) label_from.set_alignment(0, 0.5) label_subject = gtk.Label(_("Subject")) label_subject.set_use_markup(True) label_subject.set_alignment(0, 0.5) label_msgid = gtk.Label(_("Message-ID")) label_msgid.set_use_markup(True) label_msgid.set_alignment(0, 0.5) label_ref = gtk.Label(_("References")) label_ref.set_use_markup(True) label_ref.set_alignment(0, 0.5) label_body = gtk.Label(_("Body")) label_body.set_use_markup(True) label_body.set_alignment(0, 0.5) self.entry_from = gtk.Entry() self.entry_subject = gtk.Entry() self.entry_msgid = gtk.Entry() self.entry_ref = gtk.Entry() self.entry_body = gtk.Entry() fields_label = gtk.Label("<b>" + _("Fields") + "</b>") fields_label.set_alignment(0, 0.5) fields_label.set_use_markup(True) fields_vbox = gtk.VBox() fields_vbox.set_border_width(4) fields_vbox.pack_start(fields_label, False, False, 4) find_table = gtk.Table(6, 2, False) find_table.set_border_width(4) find_table.attach(label_from, 0, 1, 0, 1, gtk.FILL, gtk.FILL, 16, 4) find_table.attach(label_subject, 0, 1, 1, 2, gtk.FILL, gtk.FILL, 16, 4) find_table.attach(label_msgid, 0, 1, 2, 3, gtk.FILL, gtk.FILL, 16, 4) find_table.attach(label_ref, 0, 1, 4, 5, gtk.FILL, gtk.FILL, 16, 4) find_table.attach(label_body, 0, 1, 5, 6, gtk.FILL, gtk.FILL, 16, 4) find_table.attach(self.entry_from, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 0, 4) find_table.attach(self.entry_subject, 1, 2, 1, 2, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 0, 4) find_table.attach(self.entry_msgid, 1, 2, 2, 3, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 0, 4) find_table.attach(self.entry_ref, 1, 2, 4, 5, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 0, 4) find_table.attach(self.entry_body, 1, 2, 5, 6, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 0, 4) fields_vbox.pack_start(find_table, True, True, 4) vbox.pack_start(fields_vbox, True, False, 2) rule_table = gtk.Table(3, 1, False) rule_table.set_border_width(4) hbox = gtk.HBox() self.checkbutton_regex = gtk.CheckButton(_("Use Regular Expression")) self.checkbutton_case = gtk.CheckButton(_("Case Insensitive")) label = gtk.Label(_("Rule used to combine search results")) self.opt_menu = gtk.combo_box_new_text() self.opt_menu.append_text(_("AND")) self.opt_menu.append_text(_("OR")) self.opt_menu.set_active(0) rule_table.attach(self.checkbutton_regex, 0, 1, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL, 16, 4) rule_table.attach(self.checkbutton_case, 0, 1, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL, 16, 4) hbox.pack_start(self.opt_menu, False, True, 2) hbox.pack_start(label, False, True) rule_table.attach(hbox, 0, 1, 2, 3, gtk.EXPAND | gtk.FILL, gtk.FILL, 16, 4) rule_label = gtk.Label("<b>" + _("Rules") + "</b>") rule_label.set_alignment(0, 0.5) rule_label.set_use_markup(True) rule_vbox = gtk.VBox() rule_vbox.pack_start(rule_label, False, False, 4) rule_vbox.set_border_width(4) rule_vbox.pack_start(rule_table, True, True, 4) vbox.pack_start(rule_vbox, True, True, 4) hbox_buttons = gtk.HBox() hbox_buttons.set_border_width(8) self.button_close = gtk.Button(None, gtk.STOCK_CLOSE) self.button_close.connect("clicked", self.destroy) self.button_next = gtk.Button(None, gtk.STOCK_FIND) self.button_next.connect("clicked", self.next_match) hbox_buttons.pack_start(self.button_close, True, True, 2) hbox_buttons.pack_start(self.button_next, True, True, 2) vbox.pack_start(hbox_buttons, True, False, 6) self.window.add(vbox)
def __init__(self): '''Class constructor''' self._wdir = get_wdir() self._base_path = os.path.join(self._wdir, "groups_info/") self._conf = Config_File() self._configs = self._conf.get_configs()
def __init__(self,subscribed_groups,main_win): self.main_win=main_win self.art_db=main_win.art_db n_rows=len(subscribed_groups) self.win=gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.connect("delete_event",self.delete_event) self.win.set_title(_("Assign Identities to Groups")) self.win.set_icon(gtk.gdk.pixbuf_new_from_file("pixmaps/conf.xpm")) self.win.set_position(gtk.WIN_POS_CENTER) main_vbox=gtk.VBox() main_vbox.set_border_width(4) group_label=gtk.Label("<b>"+_("Group")+"</b>") group_label.set_alignment(0,0) group_label.set_use_markup(True) id_label=gtk.Label("<b>"+_("Identity")+"</b>") id_label.set_alignment(0,0) id_label.set_use_markup(True) groups_table=gtk.Table(n_rows,2,False) groups_table.set_border_width(8) groups_table.attach(group_label,0,1,0,1,False,False,4) groups_table.attach(id_label,1,2,0,1,False,False,4) self.entries=[] self.combos=[] cp_id=ConfigParser.ConfigParser() cp_id.read(os.path.join(get_wdir(),"dats","id.txt")) ids=cp_id.sections() j=0 positions=dict() for id in ids: positions[id.decode("utf-8")]=j j=j+1 i=0 self.id_dict=dict() for group in subscribed_groups: entry=gtk.Entry() entry.set_editable(False) entry.set_text(group[0]) combo=gtk.combo_box_new_text() for id in ids: combo.append_text(id) combo.set_active(positions.get(group[2],0)) self.id_dict[group[0]]=combo groups_table.attach(entry,0,1,i+1,i+2,gtk.EXPAND|gtk.FILL,gtk.FILL) groups_table.attach(combo,1,2,i+1,i+2,gtk.FILL,gtk.EXPAND|gtk.SHRINK) self.entries.append(entry) self.combos.append(combo) i=i+1 viewport=gtk.Viewport() viewport.set_shadow_type(gtk.SHADOW_ETCHED_IN) scrolledwin=gtk.ScrolledWindow() scrolledwin.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) #buttons hbox buttons_hbox=gtk.HBox() #cancel_button self.cancel_button=gtk.Button(None,gtk.STOCK_CANCEL) self.cancel_button_tooltip=gtk.Tooltips() self.cancel_button_tooltip.set_tip(self.cancel_button,_("Close window. Discard changes")) self.cancel_button.connect("clicked",self.destroy) buttons_hbox.pack_start(self.cancel_button,True,True,0) #ok_button self.ok_button=gtk.Button(None,gtk.STOCK_OK) self.ok_button.connect("clicked",self.save_configs) self.ok_button_tooltip=gtk.Tooltips() self.ok_button_tooltip.set_tip(self.ok_button,_("Close window and save settings")) buttons_hbox.pack_start(self.ok_button,True,True,0) self.ok_button.set_border_width(5) self.cancel_button.set_border_width(5) viewport.add(groups_table) scrolledwin.add(viewport) main_vbox.pack_start(scrolledwin,True,True,4) main_vbox.pack_start(buttons_hbox,False,False,0) self.win.add(main_vbox) #self.win.set_default_size(300,300) self.win.set_size_request(350,300)
def dump_tree(self,treeview): list=self.get_headers_list(self.right_list) f=open(os.path.join(get_wdir(),"dats/headers_list.dat"),"wb") cPickle.dump(list,f,1) f.close()
def sendQueuedArticles(self, obj): '''Send articles stored in outbox''' ordered_list = load_ordered_list() user_agent = self.VERSION try: articles = os.listdir(os.path.join(self.wdir, "outbox/news")) except: self.statusbar.push(1, _("Problems while opening News OutBox")) else: total = len(articles) news_sent = total cp = ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(), "dats", "servers.txt")) self.connectionsPool = dict() for server in cp.sections(): if cp.get(server, "nntp_use_ssl") == "True": self.connectionsPool[server] = SSLConnection( cp.get(server, "server"), cp.get(server, "port"), cp.get(server, "auth"), cp.get(server, "username"), cp.get(server, "password")) else: self.connectionsPool[server] = Connection( cp.get(server, "server"), cp.get(server, "port"), cp.get(server, "auth"), cp.get(server, "username"), cp.get(server, "password")) i = 0 for articleName in articles: i = i + 1 try: f = open( os.path.join(self.wdir, "outbox/news/", articleName), "rb") except: self.statusbar.push( 1, _("Problems while opening article :") + articleName) else: self.statusbar.push(1, _("Sending Article: ") + articleName) while gtk.events_pending(): gtk.main_iteration(False) draftArticle = cPickle.load(f) f.close() newsgroups = draftArticle.get("newsgroups", "") from_name = draftArticle.get("from_name", "") subject = draftArticle.get("subject", "") references = draftArticle.get("references", "") output_charset = draftArticle.get("output_charset", "") body = draftArticle.get("body", "") custom_names = draftArticle.get("custom_names", []) custom_values = draftArticle.get("custom_values", []) article_to_send = Article_To_Send( newsgroups, from_name, subject, references, user_agent, output_charset, ordered_list, body, custom_names, custom_values, self.configs["gen_mid"], self.configs["fqdn"]) article = article_to_send.get_article() server_name = draftArticle.get("server_name", "") message, articlePosted = self.connectionsPool[ server_name].sendArticle(article) self.statusbar.push(1, message) if articlePosted: os.remove( os.path.join(self.wdir, "outbox/news/", articleName)) self.store_article( os.path.join(self.wdir, "sent/news"), draftArticle) else: news_sent = news_sent - 1 while gtk.events_pending(): gtk.main_iteration(False) self.statusbar.push(1, _("Sent %d Articles") % (news_sent, )) for connection in self.connectionsPool.itervalues(): connection.closeConnection() self.populateFolderTree()
def __init__(self, mainWin, VERSION): self.configs = mainWin.configs self.VERSION = VERSION self.subscribedGroups = mainWin.subscribed_groups self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.connect("delete_event", self.delete_event) #self.win.connect("destroy",self.destroy) self.win.set_title(_("Outbox Manager")) self.win.set_icon(gtk.gdk.pixbuf_new_from_file("pixmaps/outbox.xpm")) vbox = gtk.VBox() #MenuBar self.create_ui() menubar = self.ui.get_widget("/OutboxMenuBar") vbox.pack_start(menubar, False, True) menubar.show() #ToolBar toolbar = self.ui.get_widget("/OutboxToolBar") vbox.pack_start(toolbar, False, True) toolbar.show() #toolbar.set_icon_size(gtk.ICON_SIZE_LARGE_TOOLBAR) toolbar.set_orientation(gtk.ORIENTATION_HORIZONTAL) toolbar.set_style(gtk.TOOLBAR_ICONS) toolbar.set_style(gtk.SHADOW_NONE) self.win.add(vbox) #HBox hpaned = gtk.HPaned() vbox.pack_start(hpaned, True, True) #Folder Tree self.folderTree = gtk.TreeView() model = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gtk.gdk.Pixbuf) self.folderTree.set_model(model) text_renderer_bold = gtk.CellRendererText() text_renderer_bold.set_property("weight", 1000) text_renderer_number = gtk.CellRendererText() text_renderer_number.set_property("xalign", .5) pix_renderer = gtk.CellRendererPixbuf() self.folderTreeColumnFolder = gtk.TreeViewColumn(_("Folder")) self.folderTreeColumnFolder.pack_start(pix_renderer) self.folderTreeColumnFolder.pack_start(text_renderer_bold) self.folderTreeColumnFolder.set_attributes(pix_renderer, pixbuf=2) self.folderTreeColumnFolder.set_attributes(text_renderer_bold, text=0) self.folderTreeColumnNumber = gtk.TreeViewColumn(_("Number"), text_renderer_number, text=1) self.folderTree.append_column(self.folderTreeColumnFolder) self.folderTree.append_column(self.folderTreeColumnNumber) #self.folderTree.set_expander_column(self.folderTreeColumn) hpaned.add(self.folderTree) #Preview Tree scrolledwin = gtk.ScrolledWindow() scrolledwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.previewTree = gtk.TreeView() scrolledwin.add(self.previewTree) # 0: Subject, 1: Newsgroups/To, 2: Date, 3: Article, 4: IsMail, 5: PathToArticle, 6: Seconds model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_INT) self.previewTree.set_model(model) text_renderer = gtk.CellRendererText() self.previewTreeColumnSubject = gtk.TreeViewColumn(_("Subject"), text_renderer, text=0) self.previewTreeColumnSubject.set_resizable(True) self.previewTreeColumnSubject.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) self.previewTreeColumnSubject.set_fixed_width(300) self.previewTreeColumnSubject.set_sort_column_id(0) self.previewTreeColumnTo = gtk.TreeViewColumn(_("Newsgroups/To"), text_renderer, text=1) self.previewTreeColumnTo.set_resizable(True) self.previewTreeColumnTo.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) self.previewTreeColumnTo.set_fixed_width(150) self.previewTreeColumnTo.set_sort_column_id(1) self.previewTreeColumnDate = gtk.TreeViewColumn(_("Date"), text_renderer, text=2) self.previewTreeColumnDate.set_sort_column_id(6) self.previewTree.append_column(self.previewTreeColumnSubject) self.previewTree.append_column(self.previewTreeColumnTo) self.previewTree.append_column(self.previewTreeColumnDate) hpaned.add(scrolledwin) model.set_sort_column_id(6, gtk.SORT_ASCENDING) self.statusbar = gtk.Statusbar() vbox.pack_start(self.statusbar, False, True) #self.win.maximize() self.wdir = get_wdir() #self.folderTree.connect("row_activated",self.openFolder) self.folderTree.get_selection().connect("changed", self.openFolder) self.previewTree.connect("row_activated", self.openArticle) self.set_sizes() self.outboxwin_width = None self.outboxwin_height = None self.populateFolderTree()
def __init__(self,main_win): self.wdir=get_wdir() self.conf=Config_File() self.configs=self.conf.get_configs() cp=ConfigParser.ConfigParser() cp.read(os.path.join(get_wdir(),"dats","servers.txt")) self.connectionsPool=dict() for server in cp.sections(): if cp.get(server,"nntp_use_ssl")=="True": self.connectionsPool[server]=SSLConnection(cp.get(server,"server"),cp.get(server,"port"),cp.get(server,"auth"),cp.get(server,"username"),cp.get(server,"password")) else: self.connectionsPool[server]=Connection(cp.get(server,"server"),cp.get(server,"port"),cp.get(server,"auth"),cp.get(server,"username"),cp.get(server,"password")) self.art_db=main_win.art_db self.groups_list_db=Groups_DB() self.main_win=main_win self.win=gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.set_modal(True) self.win.set_transient_for(main_win.window) self.win.connect("delete_event",self.delete_event) self.win.set_title(_("NewsGroups")) self.win.set_icon(gtk.gdk.pixbuf_new_from_file("pixmaps/groups.xpm")) self.win.set_default_size(700,480) self.win.set_position(gtk.WIN_POS_CENTER) #main vbox self.vbox1 = gtk.VBox(False,0) self.vbox1.set_border_width(2) self.win.add(self.vbox1) #hpaned self.hpaned =gtk.HPaned() self.hpaned.set_position(310) self.vbox1.pack_start(self.hpaned,True,True,0) #FrameList self.frame_list=gtk.Frame(_("List")) self.hpaned.add(self.frame_list) #VBoxList self.vbox_list=gtk.VBox() self.vbox_list.set_border_width(2) self.frame_list.add(self.vbox_list) #HBoxList self.hbox_list=gtk.HBox() self.vbox_list.pack_start(self.hbox_list,False,True,2) #group_entry self.group_entry=gtk.Entry() self.hbox_list.pack_start(self.group_entry,True,True,2) #search_button self.search_button=gtk.Button(_("Search Group")) self.search_button.connect("clicked",self.search_group) self.hbox_list.pack_start(self.search_button,False,True,2) self.search_button_tooltip=gtk.Tooltips() self.search_button_tooltip.set_tip(self.search_button,_("Start searching")) #live search check_button self.live_search_checkbutton=gtk.CheckButton(_("Perform Live Search")) self.vbox_list.pack_start(self.live_search_checkbutton,False,True,2) self.live_search_checkbutton.connect("clicked",self.change_live_search_status) #regex check_button self.regex_checkbutton=gtk.CheckButton(_("Use Regular Expression")) self.vbox_list.pack_start(self.regex_checkbutton,False,True,2) #full list button self.full_button=gtk.Button(_("Show Full List")) self.full_button.connect("clicked",self.show_full_list) self.vbox_list.pack_start(self.full_button,False,True,2) #GroupsList self.server_list=Groups_List(_("NewsGroups"),_("Mode"),_("Server")) self.server_list.groups_list.set_rules_hint(1) self.server_list.groups_list.connect("row-activated", lambda *w: self.subscribe_selected_groups(None)) self.vbox_list.pack_start(self.server_list.get_widget(),True,True,2) #right_vbox self.right_vbox =gtk.VBox() self.hpaned.add(self.right_vbox) #right_hbox self.right_hbox=gtk.HBox() self.right_vbox.pack_start(self.right_hbox,False,True,0) #Server Frame self.server_frame =gtk.Frame(_("Server")) self.right_hbox.pack_start(self.server_frame,True,True,0) #Server HBox self.server_hbox=gtk.HBox() self.server_frame.add(self.server_hbox) self.server_hbox.set_border_width(5) #Server Button self.server_button=gtk.Button(_("Get Newsgroups List")) self.server_button.connect("clicked",self.get_list) self.server_hbox.pack_start(self.server_button,False,True,5) self.server_button_tooltip=gtk.Tooltips() self.server_button_tooltip.set_tip(self.server_button,_("This could take several minutes")) #Server Label self.server_combo= gtk.combo_box_new_text() for server in cp.sections(): self.server_combo.append_text(cp.get(server,"server")) self.server_combo.set_active(0) if len(cp.sections())==0: self.server_button.set_sensitive(False) self.server_hbox.pack_start(self.server_combo,False,True,5) #Article Frame self.articles_frame =gtk.Frame(_("Articles Number")) self.right_hbox.pack_start(self.articles_frame,False,True,0) #Articles SpinButton self.articles_spinbutton =gtk.SpinButton(gtk.Adjustment(value=500,lower=0,upper=10000,step_incr=1,page_incr=50)) self.articles_spinbutton_tooltip=gtk.Tooltips() self.articles_spinbutton_tooltip.set_tip(self.articles_spinbutton,_("Download this number of articles (headers only)")) self.articles_frame.add(self.articles_spinbutton) #Subscribed Frame self.subscribed_frame= gtk.Frame(_("Subscribed Groups")) self.right_vbox.pack_start(self.subscribed_frame,True,True,2) #Subscribed_hbox self.subscribed_hbox = gtk.HBox() self.subscribed_frame.add(self.subscribed_hbox) #button_box self.vbutton_box=gtk.VButtonBox() self.subscribed_hbox.pack_start(self.vbutton_box,False,False,0) self.vbutton_box.set_layout(gtk.BUTTONBOX_SPREAD) #button_subscribe self.button_subscribe=gtk.Button() self.button_subscribe.connect("clicked",self.subscribe_selected_groups) button_subscribe_image=gtk.Image() button_subscribe_image.set_from_stock(gtk.STOCK_GO_FORWARD,gtk.ICON_SIZE_MENU) self.button_subscribe.add(button_subscribe_image) self.vbutton_box.pack_start(self.button_subscribe,False,False,0) self.subscribe_button_tooltip=gtk.Tooltips() self.subscribe_button_tooltip.set_tip(self.button_subscribe,_("Subscribe selected groups")) #button_unsubscribe self.button_unsubscribe=gtk.Button() self.button_unsubscribe.connect("clicked",self.unsubscribe_selected_groups) button_unsubscribe_image=gtk.Image() button_unsubscribe_image.set_from_stock(gtk.STOCK_GO_BACK,gtk.ICON_SIZE_MENU) self.button_unsubscribe.add(button_unsubscribe_image) self.vbutton_box.pack_start(self.button_unsubscribe,False,False,0) self.unsubscribe_button_tooltip=gtk.Tooltips() self.unsubscribe_button_tooltip.set_tip(self.button_unsubscribe,_("UnSubscribe selected groups")) #subscribed_groups self.subscribed_list=Groups_Pane(_("NewsGroups"),_("Articles"),False,self.configs) self.subscribed_list.groups_list.connect("row-activated", lambda *w: self.unsubscribe_selected_groups(None)) #Subscribed_vbox self.subscribed_vbox= gtk.VBox() self.subscribed_vbox.pack_start(self.subscribed_list.get_widget(),True,True,5) #subscribe manually self.subscribe_manually_entry=gtk.Entry() self.subscribe_manually_button=gtk.Button(_("Subscribe Manually")) subscribe_manually_hbox=gtk.HBox() subscribe_manually_hbox.add(self.subscribe_manually_entry) subscribe_manually_hbox.add(self.subscribe_manually_button) self.subscribe_manually_button.connect("clicked",self.subscribe_manually) self.subscribed_vbox.pack_start(subscribe_manually_hbox,False,False) self.subscribed_hbox.pack_start(self.subscribed_vbox,True,True) #button_close self.button_close= gtk.Button(None,gtk.STOCK_OK) self.vbox1.pack_start(self.button_close,False,True,4) self.button_close.connect("clicked",self.destroy) self.button_close_tooltip=gtk.Tooltips() self.button_close_tooltip.set_tip(self.button_close,_("Close this window")) #hbox_bottom self.hbox_bottom=gtk.HBox() self.vbox1.pack_start(self.hbox_bottom,False,False,0) #progressbar self.progressbar=gtk.ProgressBar() self.hbox_bottom.pack_start(self.progressbar,False,False,0) #statusbar self.statusbar=gtk.Statusbar() self.hbox_bottom.pack_start(self.statusbar,True,True,0) #some inits self.show_subscribed() self.show() self.statusbar.push(1,_("Building Newsgroups list")) self.total_list=[] while gtk.events_pending(): gtk.main_iteration(False) try: f=open(os.path.join(self.wdir,"groups_info/groups.sqlitedb"),"rb") except IOError: self.statusbar.push(1,_("You have to download newsgroups list")) else: groups_list=self.groups_list_db.getList("groups.sqlitedb") self.total_list=groups_list self.server_list.show_list(groups_list) self.statusbar.push(1,_("Newsgroups list loaded"))
def __init__(self,configs,to_name,article,selected_text,mode="Normal",draft_article=None,pathToArticle="",outboxManager=None,isSent=False,id_name=""): self.pathToArticle=pathToArticle self.mode=mode self.outboxManager=outboxManager self.isSent=isSent self.id_name=id_name.encode("utf-8") self.wdir=get_wdir() self.fallback_charset=configs["fallback_charset"] self.win=gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.connect("delete_event",self.delete_event) self.win.set_title(_("Edit Mail")) self.win.set_icon(gtk.gdk.pixbuf_new_from_file("pixmaps/reply.xpm")) #main_vbox main_vbox=gtk.VBox() self.win.add(main_vbox) self.create_ui(configs) menubar=self.ui.get_widget("/EditMenuBar") main_vbox.pack_start(menubar,False,True,0) menubar.show() toolbar=self.ui.get_widget("/EditToolBar") main_vbox.pack_start(toolbar,False,True,0) toolbar.show() #toolbar.set_icon_size(gtk.ICON_SIZE_LARGE_TOOLBAR) toolbar.set_orientation(gtk.ORIENTATION_HORIZONTAL) toolbar.set_style(gtk.TOOLBAR_ICONS) toolbar.set_style(gtk.SHADOW_NONE) id_label=gtk.Label("<b>"+_("Identity")+"</b>") id_label.set_alignment(0,0.5) id_label.set_use_markup(True) id_hbox=gtk.HBox() self.id_combo=gtk.combo_box_new_text() self.cp_id=ConfigParser.ConfigParser() self.cp_id.read(os.path.join(get_wdir(),"dats","id.txt")) positions=dict() i=0 for id in self.cp_id.sections(): self.id_combo.append_text(id) positions[id]=i i=i+1 if self.id_name: self.id_combo.set_active(positions[self.id_name]) else: self.id_combo.set_active(0) self.id_name=self.id_combo.get_active_text() id_sep=gtk.VSeparator() id_hbox.pack_start(id_label,False,True,4) id_hbox.pack_start(self.id_combo,False,True,4) id_hbox.pack_start(id_sep,False,False,4) main_vbox.pack_start(id_hbox,False,True,2) self.headers_table=gtk.Table(3,2,False) self.headers_table.set_border_width(2) self.to_name_label=gtk.Label("<b>"+_("To : ")+"</b>") self.to_name_label.set_use_markup(True) self.to_name_label.set_alignment(1,0.5) self.from_label=gtk.Label("<b>"+_("From : ")+"</b>") self.from_label.set_use_markup(True) self.from_label.set_alignment(1,0.5) self.subj_label=gtk.Label("<b>"+_("Subject : ")+"</b>") self.subj_label.set_use_markup(True) self.subj_label.set_alignment(1,0.5) self.charset_label=gtk.Label("<b>"+_("Charset : ")+"</b>") self.charset_label.set_use_markup(True) self.charset_label.set_alignment(1,0.5) self.to_name_entry=gtk.Entry() self.from_entry=gtk.Entry() self.subj_entry=gtk.Entry() self.charset_combo=gtk.combo_box_entry_new_text() for encoding in encodings_list: self.charset_combo.append_text(encoding) self.charset_tooltip=gtk.Tooltips() self.charset_tooltip.set_tip(self.charset_combo.child,encodings_tip) self.charset_combo.child.set_editable(False) self.headers_table.attach(self.to_name_label,0,1,0,1,gtk.FILL,gtk.FILL) self.headers_table.attach(self.from_label,0,1,1,2,gtk.FILL,gtk.FILL) self.headers_table.attach(self.subj_label,0,1,2,3,gtk.FILL,gtk.FILL) self.headers_table.attach(self.to_name_entry,1,2,0,1) self.headers_table.attach(self.from_entry,1,2,1,2) self.headers_table.attach(self.subj_entry,1,2,2,3) self.headers_table.attach(self.charset_label,0,1,3,4,gtk.FILL,gtk.FILL) self.headers_table.attach(self.charset_combo,1,2,3,4) #buffer self.buffer=gtk.TextBuffer() self.quote1_tag=None self.quote2_tag=None self.quote3_tag=None self.sign_tag=None self.text_tag=None color=configs["text_color"] self.set_text_color(color) color=configs["quote1_color"] self.set_quote_color(color,1) color=configs["quote2_color"] self.set_quote_color(color,2) color=configs["quote3_color"] self.set_quote_color(color,3) color=configs["sign_color"] self.set_sign_color(color) #TextView text_scrolledwin=gtk.ScrolledWindow() text_scrolledwin.set_border_width(2) text_scrolledwin.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) text_scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.textview=gtk.TextView(self.buffer) self.textview.set_wrap_mode(gtk.WRAP_WORD) self.textview.set_indent(4) text_scrolledwin.add(self.textview) self.text_vbox=gtk.VBox() self.text_vbox.pack_start(self.headers_table,False,False) self.text_vbox.pack_start(text_scrolledwin,True,True) main_vbox.pack_start(self.text_vbox,True,True,0) #statusbar statusbar_hbox=gtk.HBox() statusbar_hbox.set_border_width(2) self.row_col_label=gtk.Label() vsep=gtk.VSeparator() vsep2=gtk.VSeparator() self.best_charset_label=gtk.Label() self.statusbar=gtk.Statusbar() statusbar_hbox.pack_start(self.row_col_label,False,True,2) statusbar_hbox.pack_start(vsep,False,False,2) statusbar_hbox.pack_start(self.best_charset_label,False,True,2) statusbar_hbox.pack_start(vsep2,False,False,2) statusbar_hbox.pack_start(self.statusbar,True,True,2) main_vbox.pack_start(statusbar_hbox,False,False,0) #some updates self.ordered_list=load_ordered_list() self.references="" self.update_to_name_entry(to_name) self.mark_set_handler=self.buffer.connect("mark_set",self.update_position_and_cset) if mode=="Normal": self.update_subject_entry(article.subj) self.references=self.update_references(article.ref+" "+article.msgid) self.add_attribution_line(article) self.update_body(article,selected_text) start,insert_point=self.buffer.get_bounds() self.buffer.create_mark("insert_point_after_text",insert_point,True) self.add_sign() self.buffer.connect("changed",self.wrap_on_change) if selected_text==None: insert_pos=self.buffer.get_iter_at_mark(self.buffer.get_mark("insert_point")) else: insert_pos=self.buffer.get_iter_at_mark(self.buffer.get_mark("insert_point_after_text")) self.buffer.place_cursor(insert_pos) if mode=="Draft": self.from_entry.set_text(draft_article.get("from_name","").encode("utf-8")) self.subj_entry.set_text(draft_article.get("subject","").encode("utf-8")) self.clear_pane() self.show_article([line.encode("utf-8") for line in draft_article.get("body","")]) self.references=self.update_references(draft_article.get("references","")) self.set_background(configs) self.set_foreground(configs) self.update_position_and_cset() if configs["external_editor"]=="True": self.external_editor(None,configs["editor_launcher"]) self.set_sizes() self.editwin_width=None self.editwin_height=None self.textview.modify_font(pango.FontDescription(configs["font_name"])) self.load_id() self.id_combo.connect("changed",self.id_changed,article)
def dump_tree(self, treeview): list = self.get_headers_list(self.right_list) f = open(os.path.join(get_wdir(), "dats/headers_list.dat"), "wb") cPickle.dump(list, f, 1) f.close()
def __init__(self, configs, to_name, article, selected_text, mode="Normal", draft_article=None, pathToArticle="", outboxManager=None, isSent=False, id_name=""): self.pathToArticle = pathToArticle self.mode = mode self.outboxManager = outboxManager self.isSent = isSent self.id_name = id_name.encode("utf-8") self.wdir = get_wdir() self.fallback_charset = configs["fallback_charset"] self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.connect("delete_event", self.delete_event) self.win.set_title(_("Edit Mail")) self.win.set_icon(gtk.gdk.pixbuf_new_from_file("pixmaps/reply.xpm")) #main_vbox main_vbox = gtk.VBox() self.win.add(main_vbox) self.create_ui(configs) menubar = self.ui.get_widget("/EditMenuBar") main_vbox.pack_start(menubar, False, True, 0) menubar.show() toolbar = self.ui.get_widget("/EditToolBar") main_vbox.pack_start(toolbar, False, True, 0) toolbar.show() #toolbar.set_icon_size(gtk.ICON_SIZE_LARGE_TOOLBAR) toolbar.set_orientation(gtk.ORIENTATION_HORIZONTAL) toolbar.set_style(gtk.TOOLBAR_ICONS) toolbar.set_style(gtk.SHADOW_NONE) id_label = gtk.Label("<b>" + _("Identity") + "</b>") id_label.set_alignment(0, 0.5) id_label.set_use_markup(True) id_hbox = gtk.HBox() self.id_combo = gtk.combo_box_new_text() self.cp_id = ConfigParser.ConfigParser() self.cp_id.read(os.path.join(get_wdir(), "dats", "id.txt")) positions = dict() i = 0 for id in self.cp_id.sections(): self.id_combo.append_text(id) positions[id] = i i = i + 1 if self.id_name: self.id_combo.set_active(positions[self.id_name]) else: self.id_combo.set_active(0) self.id_name = self.id_combo.get_active_text() id_sep = gtk.VSeparator() id_hbox.pack_start(id_label, False, True, 4) id_hbox.pack_start(self.id_combo, False, True, 4) id_hbox.pack_start(id_sep, False, False, 4) main_vbox.pack_start(id_hbox, False, True, 2) self.headers_table = gtk.Table(3, 2, False) self.headers_table.set_border_width(2) self.to_name_label = gtk.Label("<b>" + _("To : ") + "</b>") self.to_name_label.set_use_markup(True) self.to_name_label.set_alignment(1, 0.5) self.from_label = gtk.Label("<b>" + _("From : ") + "</b>") self.from_label.set_use_markup(True) self.from_label.set_alignment(1, 0.5) self.subj_label = gtk.Label("<b>" + _("Subject : ") + "</b>") self.subj_label.set_use_markup(True) self.subj_label.set_alignment(1, 0.5) self.charset_label = gtk.Label("<b>" + _("Charset : ") + "</b>") self.charset_label.set_use_markup(True) self.charset_label.set_alignment(1, 0.5) self.to_name_entry = gtk.Entry() self.from_entry = gtk.Entry() self.subj_entry = gtk.Entry() self.charset_combo = gtk.combo_box_entry_new_text() for encoding in encodings_list: self.charset_combo.append_text(encoding) self.charset_tooltip = gtk.Tooltips() self.charset_tooltip.set_tip(self.charset_combo.child, encodings_tip) self.charset_combo.child.set_editable(False) self.headers_table.attach(self.to_name_label, 0, 1, 0, 1, gtk.FILL, gtk.FILL) self.headers_table.attach(self.from_label, 0, 1, 1, 2, gtk.FILL, gtk.FILL) self.headers_table.attach(self.subj_label, 0, 1, 2, 3, gtk.FILL, gtk.FILL) self.headers_table.attach(self.to_name_entry, 1, 2, 0, 1) self.headers_table.attach(self.from_entry, 1, 2, 1, 2) self.headers_table.attach(self.subj_entry, 1, 2, 2, 3) self.headers_table.attach(self.charset_label, 0, 1, 3, 4, gtk.FILL, gtk.FILL) self.headers_table.attach(self.charset_combo, 1, 2, 3, 4) #buffer self.buffer = gtk.TextBuffer() self.quote1_tag = None self.quote2_tag = None self.quote3_tag = None self.sign_tag = None self.text_tag = None color = configs["text_color"] self.set_text_color(color) color = configs["quote1_color"] self.set_quote_color(color, 1) color = configs["quote2_color"] self.set_quote_color(color, 2) color = configs["quote3_color"] self.set_quote_color(color, 3) color = configs["sign_color"] self.set_sign_color(color) #TextView text_scrolledwin = gtk.ScrolledWindow() text_scrolledwin.set_border_width(2) text_scrolledwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) text_scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.textview = gtk.TextView(self.buffer) self.textview.set_wrap_mode(gtk.WRAP_WORD) self.textview.set_indent(4) text_scrolledwin.add(self.textview) self.text_vbox = gtk.VBox() self.text_vbox.pack_start(self.headers_table, False, False) self.text_vbox.pack_start(text_scrolledwin, True, True) main_vbox.pack_start(self.text_vbox, True, True, 0) #statusbar statusbar_hbox = gtk.HBox() statusbar_hbox.set_border_width(2) self.row_col_label = gtk.Label() vsep = gtk.VSeparator() vsep2 = gtk.VSeparator() self.best_charset_label = gtk.Label() self.statusbar = gtk.Statusbar() statusbar_hbox.pack_start(self.row_col_label, False, True, 2) statusbar_hbox.pack_start(vsep, False, False, 2) statusbar_hbox.pack_start(self.best_charset_label, False, True, 2) statusbar_hbox.pack_start(vsep2, False, False, 2) statusbar_hbox.pack_start(self.statusbar, True, True, 2) main_vbox.pack_start(statusbar_hbox, False, False, 0) #some updates self.ordered_list = load_ordered_list() self.references = "" self.update_to_name_entry(to_name) self.mark_set_handler = self.buffer.connect( "mark_set", self.update_position_and_cset) if mode == "Normal": self.update_subject_entry(article.subj) self.references = self.update_references(article.ref + " " + article.msgid) self.add_attribution_line(article) self.update_body(article, selected_text) start, insert_point = self.buffer.get_bounds() self.buffer.create_mark("insert_point_after_text", insert_point, True) self.add_sign() self.buffer.connect("changed", self.wrap_on_change) if selected_text == None: insert_pos = self.buffer.get_iter_at_mark( self.buffer.get_mark("insert_point")) else: insert_pos = self.buffer.get_iter_at_mark( self.buffer.get_mark("insert_point_after_text")) self.buffer.place_cursor(insert_pos) if mode == "Draft": self.from_entry.set_text( draft_article.get("from_name", "").encode("utf-8")) self.subj_entry.set_text( draft_article.get("subject", "").encode("utf-8")) self.clear_pane() self.show_article([ line.encode("utf-8") for line in draft_article.get("body", "") ]) self.references = self.update_references( draft_article.get("references", "")) self.set_background(configs) self.set_foreground(configs) self.update_position_and_cset() if configs["external_editor"] == "True": self.external_editor(None, configs["editor_launcher"]) self.set_sizes() self.editwin_width = None self.editwin_height = None self.textview.modify_font(pango.FontDescription(configs["font_name"])) self.load_id() self.id_combo.connect("changed", self.id_changed, article)
def __init__(self,main_win): self.wdir=get_wdir() self.art_db=main_win.art_db self.main_win=main_win self.window=gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event",self.delete_event) self.window.connect("destroy",self.destroy) self.window.set_title(_("Global Search")) self.window.set_position(gtk.WIN_POS_CENTER) self.window.set_default_size(350,300) self.window.set_icon(gtk.gdk.pixbuf_new_from_file("pixmaps/global_search.xpm")) vbox=gtk.VBox() vbox.set_border_width(8) label_from=gtk.Label(_("From")) label_from.set_use_markup(True) label_from.set_alignment(0,0.5) label_subject=gtk.Label(_("Subject")) label_subject.set_use_markup(True) label_subject.set_alignment(0,0.5) label_msgid=gtk.Label(_("Message-ID")) label_msgid.set_use_markup(True) label_msgid.set_alignment(0,0.5) label_ref=gtk.Label(_("References")) label_ref.set_use_markup(True) label_ref.set_alignment(0,0.5) label_body=gtk.Label(_("Body")) label_body.set_use_markup(True) label_body.set_alignment(0,0.5) self.entry_from=gtk.Entry() self.entry_subject=gtk.Entry() self.entry_msgid=gtk.Entry() self.entry_ref=gtk.Entry() self.entry_body=gtk.Entry() fields_label=gtk.Label("<b>"+_("Fields")+"</b>") fields_label.set_alignment(0,0.5) fields_label.set_use_markup(True) fields_vbox=gtk.VBox() fields_vbox.set_border_width(4) fields_vbox.pack_start(fields_label,False,False,4) find_table=gtk.Table(6,2,False) find_table.set_border_width(4) find_table.attach(label_from,0,1,0,1,gtk.FILL,gtk.FILL,16,4) find_table.attach(label_subject,0,1,1,2,gtk.FILL,gtk.FILL,16,4) find_table.attach(label_msgid,0,1,2,3,gtk.FILL,gtk.FILL,16,4) find_table.attach(label_ref,0,1,4,5,gtk.FILL,gtk.FILL,16,4) find_table.attach(label_body,0,1,5,6,gtk.FILL,gtk.FILL,16,4) find_table.attach(self.entry_from,1,2,0,1,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,4) find_table.attach(self.entry_subject,1,2,1,2,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,4) find_table.attach(self.entry_msgid,1,2,2,3,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,4) find_table.attach(self.entry_ref,1,2,4,5,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,4) find_table.attach(self.entry_body,1,2,5,6,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,4) fields_vbox.pack_start(find_table,True,True,4) vbox.pack_start(fields_vbox,True,False,2) rule_table=gtk.Table(3,1,False) rule_table.set_border_width(4) hbox=gtk.HBox() self.checkbutton_regex=gtk.CheckButton(_("Use Regular Expression")) self.checkbutton_case=gtk.CheckButton(_("Case Insensitive")) label=gtk.Label(_("Rule used to combine search results")) self.opt_menu=gtk.combo_box_new_text() self.opt_menu.append_text(_("AND")) self.opt_menu.append_text(_("OR")) self.opt_menu.set_active(0) rule_table.attach(self.checkbutton_regex,0,1,0,1,gtk.EXPAND|gtk.FILL,gtk.FILL,16,4) rule_table.attach(self.checkbutton_case,0,1,1,2,gtk.EXPAND|gtk.FILL,gtk.FILL,16,4) hbox.pack_start(self.opt_menu,False,True,2) hbox.pack_start(label,False,True) rule_table.attach(hbox,0,1,2,3,gtk.EXPAND|gtk.FILL,gtk.FILL,16,4) rule_label=gtk.Label("<b>"+_("Rules")+"</b>") rule_label.set_alignment(0,0.5) rule_label.set_use_markup(True) rule_vbox=gtk.VBox() rule_vbox.pack_start(rule_label,False,False,4) rule_vbox.set_border_width(4) rule_vbox.pack_start(rule_table,True,True,4) vbox.pack_start(rule_vbox,True,True,4) hbox_buttons=gtk.HBox() hbox_buttons.set_border_width(8) self.button_close=gtk.Button(None,gtk.STOCK_CLOSE) self.button_close.connect("clicked",self.destroy) self.button_next=gtk.Button(None,gtk.STOCK_FIND) self.button_next.connect("clicked",self.next_match) hbox_buttons.pack_start(self.button_close,True,True,2) hbox_buttons.pack_start(self.button_next,True,True,2) vbox.pack_start(hbox_buttons,True,False,6) self.window.add(vbox)
def dump_tree(self): shortcuts=self.get_shortcuts_from_tree() f=open(os.path.join(get_wdir(),"dats/shortcuts.dat"),"wb") cPickle.dump(shortcuts,f,1) f.close()
def __init__(self): self.configs={} self.configs["server"]="" self.configs["port"]="119" self.configs["auth"]="False" self.configs["username"]="" self.configs["password"]="" self.configs["nntp_use_ssl"]="False" self.configs["smtp_server"]="" self.configs["smtp_port"]="25" self.configs["smtp_auth"]="False" self.configs["smtp_username"]="" self.configs["smtp_password"]="" self.configs["use_mail_from"]="False" self.configs["quote1_color"]="#0000FF" self.configs["quote2_color"]="#00AAFF" self.configs["quote3_color"]="#AAAAFF" self.configs["sign_color"]="#FF0000" self.configs["text_color"]="#000000" self.configs["background_color"]="#FFFFFF" self.configs["url_color"]="#1D921C" self.configs["headers_bg_color"]="#F7EDB5" self.configs["headers_fg_color"]="#000000" self.configs["font_name"]="Sans 9" self.configs["font_threads_name"]="Sans 9" self.configs["font_groups_name"]="Sans 9" self.configs["use_system_fonts"]="True" self.configs["fixed"]="False" self.configs["layout"]="1" self.configs["show_headers"]="True" self.configs["oneclick"]="False" self.configs["oneclick_article"]="False" self.configs["expand_group"]="False" self.configs["charset"]="ISO-8859-1" self.configs["fallback_charset"]="ISO-8859-1" self.configs["custom_browser"]="False" self.configs["browser_launcher"]="" self.configs["purge_read"]="5" self.configs["purge_unread"]="10" self.configs["limit_articles"]="False" self.configs["limit_articles_number"]="500" self.configs["download_timeout"]="30" self.configs["automatic_download"]="False" self.configs["threading_method"]="2" self.configs["external_editor"]="False" self.configs["editor_launcher"]="" self.configs["show_read_articles"]="True" self.configs["show_unread_articles"]="True" self.configs["show_threads_without_watched"]="True" self.configs["show_all_read_threads"]="True" self.configs["show_unkept_articles"]="True" self.configs["show_kept_articles"]="True" self.configs["show_watched_articles"]="True" self.configs["show_ignored_articles"]="True" self.configs["show_unwatchedignored_articles"]="True" self.configs["show_score_neg_articles"]="True" self.configs["show_score_zero_articles"]="True" self.configs["show_score_pos_articles"]="True" self.configs["raw"]="False" self.configs["show_quote"]="True" self.configs["show_sign"]="True" self.configs["show_spoiler"]="False" self.configs["download_bodies"]="False" self.configs["scroll_fraction"]="50" self.configs["lang"]="en" self.configs["ascend_order"]="True" self.configs["sort_col"]="Date" self.configs["show_threads"]="True" self.configs["advance_on_mark"]="False" self.configs["exp_column"]="Subject" try: f=open(os.path.join(get_wdir(),"config.txt"),"r") except IOError: self.found_config_file=False else: #parsing config file to a dict self.found_config_file=True lista=f.readlines() for i in range(len(lista)): ind=lista[i].find("=") if ind>0: left=lista[i][0:ind].strip() right=lista[i].strip("\r\n")[ind+1:].strip(" ") self.configs[left]=right.decode("utf-8")
def __init__(self, configs): self.art_unread = gtk.gdk.pixbuf_new_from_file( "pixmaps/art_unread.xpm") self.art_read = gtk.gdk.pixbuf_new_from_file("pixmaps/art_read.xpm") self.art_fup = gtk.gdk.pixbuf_new_from_file("pixmaps/art_fup.xpm") self.art_mark = gtk.gdk.pixbuf_new_from_file("pixmaps/art_mark.xpm") self.art_body = gtk.gdk.pixbuf_new_from_file("pixmaps/art_body.xpm") self.art_keep = gtk.gdk.pixbuf_new_from_file("pixmaps/art_keep.xpm") self.art_unkeep = gtk.gdk.pixbuf_new_from_file( "pixmaps/art_unkeep.xpm") self.art_watch = gtk.gdk.pixbuf_new_from_file("pixmaps/art_watch.xpm") self.art_unwatchignore = gtk.gdk.pixbuf_new_from_file( "pixmaps/art_unwatchignore.xpm") self.art_ignore = gtk.gdk.pixbuf_new_from_file( "pixmaps/art_ignore.xpm") #ThreadsScrolledWin self.scrolledwin = gtk.ScrolledWindow() self.scrolledwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.scrolledwin.set_shadow_type(gtk.SHADOW_ETCHED_IN) try: f = open(os.path.join(get_wdir(), "dats/sizes.dat"), "rb") except IOError: column1_width = 41 column2_width = 415 column3_width = 201 column4_width = 95 column5_width = 60 else: sizes = cPickle.load(f) f.close() column1_width = sizes.get("threads_col_status", 41) column2_width = sizes.get("threads_col_subject", 415) column3_width = sizes.get("threads_col_from", 201) column4_width = sizes.get("threads_col_date", 95) column5_width = sizes.get("threads_col_score", 60) #ThreadsTree self.threads_tree = gtk.TreeView() model = self.new_model() self.set_model(model) pix_renderer = gtk.CellRendererPixbuf() pix_renderer2 = gtk.CellRendererPixbuf() pix_renderer3 = gtk.CellRendererPixbuf() text_renderer = gtk.CellRendererText() text_renderer_unread = gtk.CellRendererText() text_renderer_unread.set_property("xalign", 1) #text_renderer.set_property("weight",1000) text_renderer_score = gtk.CellRendererText() text_renderer_score.set_property("xalign", .5) self.column1 = gtk.TreeViewColumn("Status") self.column1.pack_start(pix_renderer, False) self.column1.pack_start(pix_renderer2, False) self.column1.pack_start(pix_renderer3, False) self.column1.pack_start(text_renderer_unread, False) self.column1.set_attributes(pix_renderer, pixbuf=0) self.column1.set_attributes(pix_renderer2, pixbuf=10) self.column1.set_attributes(pix_renderer3, pixbuf=11) self.column1.set_attributes(text_renderer_unread, text=12, visible=13) self.column2 = gtk.TreeViewColumn(_("Subject"), text_renderer, text=1, weight=5, foreground_set=14, foreground=15, background_set=16, background=17, underline=18) self.column3 = gtk.TreeViewColumn(_("From"), text_renderer, text=2, weight=5, foreground_set=14, foreground=15, background_set=16, background=17) self.column4 = gtk.TreeViewColumn(_("Date"), text_renderer, text=3, weight=5, foreground_set=14, foreground=15, background_set=16, background=17) self.column5 = gtk.TreeViewColumn(_("Score"), text_renderer_score, text=7, foreground=8, visible=9) self.column2.set_resizable(True) self.column2.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) self.column2.set_fixed_width(column2_width) self.column2.set_sort_column_id(1) self.column3.set_resizable(True) self.column3.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) self.column3.set_fixed_width(column3_width) self.column3.set_sort_column_id(2) self.column4.set_resizable(True) self.column4.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) self.column4.set_fixed_width(column4_width) self.column4.set_sort_column_id(6) self.column5.set_sort_column_id(7) self.threads_tree.append_column(self.column1) if configs["exp_column"] == "From": self.threads_tree.append_column(self.column3) self.threads_tree.append_column(self.column2) self.threads_tree.set_expander_column(self.column3) else: self.threads_tree.append_column(self.column2) self.threads_tree.append_column(self.column3) self.threads_tree.set_expander_column(self.column2) self.threads_tree.append_column(self.column4) self.threads_tree.append_column(self.column5) try: self.threads_tree.set_enable_tree_lines(True) except: pass self.scrolledwin.add(self.threads_tree) color = configs["background_color"] self.set_background(color) color = configs["text_color"] self.set_foreground(color) if configs["use_system_fonts"] == "True": self.threads_tree.modify_font(pango.FontDescription("")) else: self.threads_tree.modify_font( pango.FontDescription(configs["font_threads_name"]))
def __init__(self): self.configs = {} self.configs["server"] = "" self.configs["port"] = "119" self.configs["auth"] = "False" self.configs["username"] = "" self.configs["password"] = "" self.configs["nntp_use_ssl"] = "False" self.configs["smtp_server"] = "" self.configs["smtp_port"] = "25" self.configs["smtp_auth"] = "False" self.configs["smtp_username"] = "" self.configs["smtp_password"] = "" self.configs["use_mail_from"] = "False" self.configs["quote1_color"] = "#0000FF" self.configs["quote2_color"] = "#00AAFF" self.configs["quote3_color"] = "#AAAAFF" self.configs["sign_color"] = "#FF0000" self.configs["text_color"] = "#000000" self.configs["background_color"] = "#FFFFFF" self.configs["url_color"] = "#1D921C" self.configs["headers_bg_color"] = "#F7EDB5" self.configs["headers_fg_color"] = "#000000" self.configs["font_name"] = "Sans 9" self.configs["font_threads_name"] = "Sans 9" self.configs["font_groups_name"] = "Sans 9" self.configs["use_system_fonts"] = "True" self.configs["fixed"] = "False" self.configs["layout"] = "1" self.configs["show_headers"] = "True" self.configs["oneclick"] = "False" self.configs["oneclick_article"] = "False" self.configs["expand_group"] = "False" self.configs["charset"] = "ISO-8859-1" self.configs["fallback_charset"] = "ISO-8859-1" self.configs["custom_browser"] = "False" self.configs["browser_launcher"] = "" self.configs["purge_read"] = "5" self.configs["purge_unread"] = "10" self.configs["limit_articles"] = "False" self.configs["limit_articles_number"] = "500" self.configs["download_timeout"] = "30" self.configs["automatic_download"] = "False" self.configs["threading_method"] = "2" self.configs["external_editor"] = "False" self.configs["editor_launcher"] = "" self.configs["show_read_articles"] = "True" self.configs["show_unread_articles"] = "True" self.configs["show_threads_without_watched"] = "True" self.configs["show_all_read_threads"] = "True" self.configs["show_unkept_articles"] = "True" self.configs["show_kept_articles"] = "True" self.configs["show_watched_articles"] = "True" self.configs["show_ignored_articles"] = "True" self.configs["show_unwatchedignored_articles"] = "True" self.configs["show_score_neg_articles"] = "True" self.configs["show_score_zero_articles"] = "True" self.configs["show_score_pos_articles"] = "True" self.configs["raw"] = "False" self.configs["show_quote"] = "True" self.configs["show_sign"] = "True" self.configs["show_spoiler"] = "False" self.configs["download_bodies"] = "False" self.configs["scroll_fraction"] = "50" self.configs["lang"] = "en" self.configs["ascend_order"] = "True" self.configs["sort_col"] = "Date" self.configs["show_threads"] = "True" self.configs["advance_on_mark"] = "False" self.configs["exp_column"] = "Subject" try: f = open(os.path.join(get_wdir(), "config.txt"), "r") except IOError: self.found_config_file = False else: #parsing config file to a dict self.found_config_file = True lista = f.readlines() for i in range(len(lista)): ind = lista[i].find("=") if ind > 0: left = lista[i][0:ind].strip() right = lista[i].strip("\r\n")[ind + 1:].strip(" ") self.configs[left] = right.decode("utf-8")