Beispiel #1
0
 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"))
Beispiel #2
0
    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()
Beispiel #3
0
    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()
Beispiel #4
0
    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"))
Beispiel #5
0
    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()
Beispiel #6
0
 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()
Beispiel #7
0
    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()
Beispiel #8
0
 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()
Beispiel #9
0
    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()
Beispiel #10
0
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()
Beispiel #11
0
 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()
Beispiel #12
0
    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"))
Beispiel #13
0
 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)
Beispiel #14
0
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
Beispiel #15
0
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
Beispiel #16
0
 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()
Beispiel #17
0
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
Beispiel #18
0
 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()
Beispiel #19
0
 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")
Beispiel #20
0
 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")
Beispiel #21
0
    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()
Beispiel #22
0
 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)
Beispiel #23
0
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()
Beispiel #24
0
 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()
Beispiel #25
0
    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()
Beispiel #26
0
    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()
Beispiel #27
0
 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)
Beispiel #28
0
 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"))
Beispiel #29
0
 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)
Beispiel #30
0
    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()
Beispiel #31
0
    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)
Beispiel #32
0
 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)
Beispiel #33
0
    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()
Beispiel #34
0
    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)
Beispiel #35
0
    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"))
Beispiel #36
0
 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()
Beispiel #37
0
 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()
Beispiel #38
0
    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)
Beispiel #39
0
 def reset_defaults(self,obj):
     try: os.remove(os.path.join(get_wdir(),"dats/shortcuts.dat"))
     except: pass
     self.load_list()
Beispiel #40
0
    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)
Beispiel #41
0
 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()
Beispiel #42
0
    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)
Beispiel #43
0
 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()
Beispiel #44
0
    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()
Beispiel #45
0
    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()
Beispiel #46
0
    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"))
Beispiel #47
0
    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)
Beispiel #48
0
 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()
Beispiel #49
0
    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)
Beispiel #50
0
    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)
Beispiel #51
0
 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()
Beispiel #52
0
 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")
Beispiel #53
0
    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"]))
Beispiel #54
0
    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")