示例#1
0
    def init_window(self, parent):
        if os.path.exists("gm-config.ui"):
            builder_file = "gm-config.ui"
        elif os.path.exists("/usr/local/share/gm-notify/gm-config.ui"):
            builder_file = "/usr/local/share/gm-notify/gm-config.ui"
        elif os.path.exists("/usr/share/gm-notify/gm-config.ui"):
            builder_file = "/usr/share/gm-notify/gm-config.ui"

        self.wTree = Gtk.Builder.new()
        self.wTree.add_from_file(builder_file)
        self.wTree.set_translation_domain("gm-notify")
        self.window = self.wTree.get_object("gmnotify_add_account")

        self.window.set_transient_for(parent)
        self.window.set_modal(True)
        self.window.set_destroy_with_parent(True)

        self.window.show_all()

        self.wTree.get_object("notebook_main").set_current_page(0)

        self.input_user = self.wTree.get_object("input_user")
        self.input_password = self.wTree.get_object("input_password")
        self.image_credentials = self.wTree.get_object("image_credentials")
        self.label_credentials = self.wTree.get_object("label_credentials")
        self.button_apply = self.wTree.get_object("button_apply")

        self.window.connect("delete_event", self.close)
        self.wTree.get_object("button_close").connect("clicked", self.close)
        self.button_apply.connect("clicked", self.apply)
        self.input_password.connect("focus-out-event", self.check_credentials)
        self.input_user.connect("focus-out-event", self.check_user)
        self.wTree.get_object("checkbutton_sound").connect(
            "toggled", self.on_checkbutton_sound_toggled)

        #####
        # Init with stored values
        #####

        # Credentials

        settings_provider = account_settings_provider.create_settings_provider(
            self.creds.username)

        if self.creds.username:
            self.input_user.set_text(self.creds.username)
            self.input_user.set_sensitive(False)

        self.input_password.set_text(self.creds.password)

        self.api = MailChecker("", "", settings_provider)
        self.api.setOnAuthSucceeded(self.credentials_valid)
        self.api.setOnAuthFailed(self.credentials_invalid)
        self.api.setOnConnectionErrorCB(self.connection_error)

        self.check_credentials(None, None)

        # Sound
        self.wTree.get_object("checkbutton_sound").set_active(
            settings_provider.retrieve_sound_enabled())
        sound_file = settings_provider.retrieve_sound_file()
        if sound_file:
            self.wTree.get_object("fcbutton_sound").set_filename(sound_file)
        self.on_checkbutton_sound_toggled(
            self.wTree.get_object("checkbutton_sound"))

        # ClickAction
        if settings_provider.retrieve_use_mail_client():
            self.wTree.get_object("radiobutton_openclient").set_active(True)
        else:
            self.wTree.get_object("radiobutton_openweb").set_active(True)

        # Mailboxes
        self.wTree.get_object("checkbutton_inbox").set_active(
            settings_provider.retrieve_ignore_inbox())
        labels = settings_provider.retrieve_labels()
        self.wTree.get_object("entry_labels").set_text(", ".join(labels))

        return self.window
示例#2
0
    def init_window(self, parent):
        if os.path.exists("gm-config.ui"):
            builder_file = "gm-config.ui"
        elif os.path.exists("/usr/local/share/gm-notify/gm-config.ui"):
            builder_file = "/usr/local/share/gm-notify/gm-config.ui"
        elif os.path.exists("/usr/share/gm-notify/gm-config.ui"):
            builder_file = "/usr/share/gm-notify/gm-config.ui"

        self.wTree = Gtk.Builder.new()
        self.wTree.add_from_file(builder_file)
        self.wTree.set_translation_domain("gm-notify")
        self.window = self.wTree.get_object("gmnotify_add_account")

        self.window.set_transient_for(parent)
        self.window.set_modal(True)
        self.window.set_destroy_with_parent(True)
        
        self.window.show_all()

        self.wTree.get_object("notebook_main").set_current_page(0)
        
        self.input_user = self.wTree.get_object("input_user")
        self.input_password = self.wTree.get_object("input_password")
        self.image_credentials = self.wTree.get_object("image_credentials")
        self.label_credentials = self.wTree.get_object("label_credentials")
        self.button_apply = self.wTree.get_object("button_apply")

        self.window.connect("delete_event", self.close)
        self.wTree.get_object("button_close").connect("clicked", self.close)
        self.button_apply.connect("clicked", self.apply)
        self.input_password.connect("focus-out-event", self.check_credentials)
        self.input_user.connect("focus-out-event", self.check_user)
        self.wTree.get_object("checkbutton_sound").connect("toggled", self.on_checkbutton_sound_toggled)

        #####
        # Init with stored values
        #####
        
        # Credentials

        settings_provider = account_settings_provider.create_settings_provider(self.creds.username)

        if self.creds.username:
            self.input_user.set_text(self.creds.username)
            self.input_user.set_sensitive(False)
            
        self.input_password.set_text(self.creds.password)
         
        self.api = MailChecker("", "", settings_provider)
        self.api.setOnAuthSucceeded(self.credentials_valid)
        self.api.setOnAuthFailed(self.credentials_invalid)
        self.api.setOnConnectionErrorCB(self.connection_error)

        self.check_credentials(None, None)

        # Sound
        self.wTree.get_object("checkbutton_sound").set_active(settings_provider.retrieve_sound_enabled())
        sound_file = settings_provider.retrieve_sound_file()
        if sound_file:
            self.wTree.get_object("fcbutton_sound").set_filename(sound_file)
        self.on_checkbutton_sound_toggled(self.wTree.get_object("checkbutton_sound"))
         
        # ClickAction
        if settings_provider.retrieve_use_mail_client():
            self.wTree.get_object("radiobutton_openclient").set_active(True)
        else:
            self.wTree.get_object("radiobutton_openweb").set_active(True)
         
        # Mailboxes
        self.wTree.get_object("checkbutton_inbox").set_active(settings_provider.retrieve_ignore_inbox())
        labels = settings_provider.retrieve_labels()
        self.wTree.get_object("entry_labels").set_text(", ".join(labels))

        return self.window
示例#3
0
class AccountConfig:
    def __init__(self, keys, creds):
        self.keys = keys
        self.creds = creds

    def init_window(self, parent):
        if os.path.exists("gm-config.ui"):
            builder_file = "gm-config.ui"
        elif os.path.exists("/usr/local/share/gm-notify/gm-config.ui"):
            builder_file = "/usr/local/share/gm-notify/gm-config.ui"
        elif os.path.exists("/usr/share/gm-notify/gm-config.ui"):
            builder_file = "/usr/share/gm-notify/gm-config.ui"

        self.wTree = Gtk.Builder.new()
        self.wTree.add_from_file(builder_file)
        self.wTree.set_translation_domain("gm-notify")
        self.window = self.wTree.get_object("gmnotify_add_account")

        self.window.set_transient_for(parent)
        self.window.set_modal(True)
        self.window.set_destroy_with_parent(True)

        self.window.show_all()

        self.wTree.get_object("notebook_main").set_current_page(0)

        self.input_user = self.wTree.get_object("input_user")
        self.input_password = self.wTree.get_object("input_password")
        self.image_credentials = self.wTree.get_object("image_credentials")
        self.label_credentials = self.wTree.get_object("label_credentials")
        self.button_apply = self.wTree.get_object("button_apply")

        self.window.connect("delete_event", self.close)
        self.wTree.get_object("button_close").connect("clicked", self.close)
        self.button_apply.connect("clicked", self.apply)
        self.input_password.connect("focus-out-event", self.check_credentials)
        self.input_user.connect("focus-out-event", self.check_user)
        self.wTree.get_object("checkbutton_sound").connect(
            "toggled", self.on_checkbutton_sound_toggled)

        #####
        # Init with stored values
        #####

        # Credentials

        settings_provider = account_settings_provider.create_settings_provider(
            self.creds.username)

        if self.creds.username:
            self.input_user.set_text(self.creds.username)
            self.input_user.set_sensitive(False)

        self.input_password.set_text(self.creds.password)

        self.api = MailChecker("", "", settings_provider)
        self.api.setOnAuthSucceeded(self.credentials_valid)
        self.api.setOnAuthFailed(self.credentials_invalid)
        self.api.setOnConnectionErrorCB(self.connection_error)

        self.check_credentials(None, None)

        # Sound
        self.wTree.get_object("checkbutton_sound").set_active(
            settings_provider.retrieve_sound_enabled())
        sound_file = settings_provider.retrieve_sound_file()
        if sound_file:
            self.wTree.get_object("fcbutton_sound").set_filename(sound_file)
        self.on_checkbutton_sound_toggled(
            self.wTree.get_object("checkbutton_sound"))

        # ClickAction
        if settings_provider.retrieve_use_mail_client():
            self.wTree.get_object("radiobutton_openclient").set_active(True)
        else:
            self.wTree.get_object("radiobutton_openweb").set_active(True)

        # Mailboxes
        self.wTree.get_object("checkbutton_inbox").set_active(
            settings_provider.retrieve_ignore_inbox())
        labels = settings_provider.retrieve_labels()
        self.wTree.get_object("entry_labels").set_text(", ".join(labels))

        return self.window

    def close(self, widget=None, event=None):
        if self.api.is_running():
            self.api.die()
        self.window.close()

    def apply(self, widget):
        self.save()
        self.close()

    def save(self):
        '''saves the entered data and closes the app'''
        # Credentials
        self.keys.delete_credentials(self.creds.username)

        user = self.input_user.get_text()
        self.keys.set_credentials(user, self.input_password.get_text())

        settings_provider = account_settings_provider.create_settings_provider(
            user)
        # Mailboxes
        labels = []
        for label in self.wTree.get_object("entry_labels").get_text().split(
                ","):
            labels.append(label.strip())
        settings_provider.save_labels(labels)
        settings_provider.save_ignore_inbox(
            self.wTree.get_object("checkbutton_inbox").get_active())

        # ClickAction
        settings_provider.save_use_mail_client(
            self.wTree.get_object("radiobutton_openclient").get_active())

        # Port
        settings_provider.save_preferred_port(
            settings_provider.retrieve_preferred_port())

        # Soundfile
        if self.wTree.get_object("checkbutton_sound").get_active(
        ) and self.wTree.get_object("fcbutton_sound").get_filename():
            settings_provider.save_sound_enabled(True)
            settings_provider.save_sound_file(
                str(self.wTree.get_object("fcbutton_sound").get_filename()))
        else:
            settings_provider.save_sound_enabled(False)

    def on_checkbutton_sound_toggled(self, widget):
        self.wTree.get_object("fcbutton_sound").set_sensitive(
            self.wTree.get_object("checkbutton_sound").get_active())

    def check_user(self, widget, event):
        user = self.input_user.get_text()
        if not self.has_mail_postfix(user):
            self.input_user.set_text(user + "@gmail.com")

    def has_mail_postfix(self, user):
        return len(user) == 0 or "@" in user

    def check_credentials(self, widget, event, data=None):
        '''check if the given credentials are valid'''

        self.button_apply.set_sensitive(False)

        # Change status text and disable input fields
        if self.input_user.get_text() and self.input_password.get_text():
            self.image_credentials.set_from_file(
                "/usr/share/gm-notify/checking.gif")
            self.label_credentials.set_text(_("checking..."))
            self.input_user.set_sensitive(False)
            self.input_password.set_sensitive(False)

            self.api.jid = jid.JID(self.input_user.get_text())
            self.api.password = self.input_password.get_text()
            self.api.connect()
        return False

    def credentials_valid(self, username):
        self.on_credentials_checked("gtk-yes", "Valid credentials", True)

    def credentials_invalid(self, username, reason):
        self.on_credentials_checked("gtk-stop", "Invalid credentials")

    def connection_error(self, username, reason):
        self.on_credentials_checked("gtk-stop", "Connection error")

    def on_credentials_checked(self, icon_name, text, valid=False):
        self.image_credentials.set_from_icon_name(icon_name, Gtk.IconSize.MENU)
        self.label_credentials.set_text(_(text))
        self.input_user.set_sensitive(not bool(self.creds.username))
        self.input_password.set_sensitive(True)
        self.button_apply.set_sensitive(valid)

        self.api.die()
示例#4
0
class AccountConfig:
    def __init__(self, keys, creds):
        self.keys = keys
        self.creds = creds
    
    def init_window(self, parent):
        if os.path.exists("gm-config.ui"):
            builder_file = "gm-config.ui"
        elif os.path.exists("/usr/local/share/gm-notify/gm-config.ui"):
            builder_file = "/usr/local/share/gm-notify/gm-config.ui"
        elif os.path.exists("/usr/share/gm-notify/gm-config.ui"):
            builder_file = "/usr/share/gm-notify/gm-config.ui"

        self.wTree = Gtk.Builder.new()
        self.wTree.add_from_file(builder_file)
        self.wTree.set_translation_domain("gm-notify")
        self.window = self.wTree.get_object("gmnotify_add_account")

        self.window.set_transient_for(parent)
        self.window.set_modal(True)
        self.window.set_destroy_with_parent(True)
        
        self.window.show_all()

        self.wTree.get_object("notebook_main").set_current_page(0)
        
        self.input_user = self.wTree.get_object("input_user")
        self.input_password = self.wTree.get_object("input_password")
        self.image_credentials = self.wTree.get_object("image_credentials")
        self.label_credentials = self.wTree.get_object("label_credentials")
        self.button_apply = self.wTree.get_object("button_apply")

        self.window.connect("delete_event", self.close)
        self.wTree.get_object("button_close").connect("clicked", self.close)
        self.button_apply.connect("clicked", self.apply)
        self.input_password.connect("focus-out-event", self.check_credentials)
        self.input_user.connect("focus-out-event", self.check_user)
        self.wTree.get_object("checkbutton_sound").connect("toggled", self.on_checkbutton_sound_toggled)

        #####
        # Init with stored values
        #####
        
        # Credentials

        settings_provider = account_settings_provider.create_settings_provider(self.creds.username)

        if self.creds.username:
            self.input_user.set_text(self.creds.username)
            self.input_user.set_sensitive(False)
            
        self.input_password.set_text(self.creds.password)
         
        self.api = MailChecker("", "", settings_provider)
        self.api.setOnAuthSucceeded(self.credentials_valid)
        self.api.setOnAuthFailed(self.credentials_invalid)
        self.api.setOnConnectionErrorCB(self.connection_error)

        self.check_credentials(None, None)

        # Sound
        self.wTree.get_object("checkbutton_sound").set_active(settings_provider.retrieve_sound_enabled())
        sound_file = settings_provider.retrieve_sound_file()
        if sound_file:
            self.wTree.get_object("fcbutton_sound").set_filename(sound_file)
        self.on_checkbutton_sound_toggled(self.wTree.get_object("checkbutton_sound"))
         
        # ClickAction
        if settings_provider.retrieve_use_mail_client():
            self.wTree.get_object("radiobutton_openclient").set_active(True)
        else:
            self.wTree.get_object("radiobutton_openweb").set_active(True)
         
        # Mailboxes
        self.wTree.get_object("checkbutton_inbox").set_active(settings_provider.retrieve_ignore_inbox())
        labels = settings_provider.retrieve_labels()
        self.wTree.get_object("entry_labels").set_text(", ".join(labels))

        return self.window
    
    def close(self, widget = None, event = None):
        if self.api.is_running():
            self.api.die()
        self.window.close()
    
    def apply(self, widget):
        self.save()
        self.close()
    
    def save(self):
        '''saves the entered data and closes the app'''
        # Credentials
        self.keys.delete_credentials(self.creds.username)
        
        user = self.input_user.get_text()
        self.keys.set_credentials(user,
                                  self.input_password.get_text())
        
        settings_provider = account_settings_provider.create_settings_provider(user)
        # Mailboxes
        labels = []
        for label in self.wTree.get_object("entry_labels").get_text().split(","):
            labels.append(label.strip())
        settings_provider.save_labels(labels)
        settings_provider.save_ignore_inbox(self.wTree.get_object("checkbutton_inbox").get_active())
        
        # ClickAction
        settings_provider.save_use_mail_client(self.wTree.get_object("radiobutton_openclient").get_active())
        
        # Port
        settings_provider.save_preferred_port(settings_provider.retrieve_preferred_port())
        
        # Soundfile
        if self.wTree.get_object("checkbutton_sound").get_active() and self.wTree.get_object("fcbutton_sound").get_filename():
            settings_provider.save_sound_enabled(True)
            settings_provider.save_sound_file(str(self.wTree.get_object("fcbutton_sound").get_filename()))
        else:
            settings_provider.save_sound_enabled(False)

    def on_checkbutton_sound_toggled(self, widget):
        self.wTree.get_object("fcbutton_sound").set_sensitive(self.wTree.get_object("checkbutton_sound").get_active())
    
    def check_user(self, widget, event):
        user = self.input_user.get_text()
        if not self.has_mail_postfix(user):
            self.input_user.set_text(user + "@gmail.com")
    
    def has_mail_postfix(self, user):
        return len(user) == 0 or "@" in user
    
    def check_credentials(self, widget, event, data=None):
        '''check if the given credentials are valid'''
        
        self.button_apply.set_sensitive(False)
        
        # Change status text and disable input fields
        if self.input_user.get_text() and self.input_password.get_text():
            self.image_credentials.set_from_file("/usr/share/gm-notify/checking.gif")
            self.label_credentials.set_text(_("checking..."))
            self.input_user.set_sensitive(False)
            self.input_password.set_sensitive(False)
            
            self.api.jid = jid.JID(self.input_user.get_text())
            self.api.password = self.input_password.get_text()
            self.api.connect()
        return False
    
    def credentials_valid(self, username):
        self.on_credentials_checked("gtk-yes", "Valid credentials", True)

    def credentials_invalid(self, username, reason):
        self.on_credentials_checked("gtk-stop", "Invalid credentials")
        
    def connection_error(self, username, reason):
        self.on_credentials_checked("gtk-stop", "Connection error")
        
    def on_credentials_checked(self, icon_name, text, valid = False):
        self.image_credentials.set_from_icon_name(icon_name, Gtk.IconSize.MENU)
        self.label_credentials.set_text(_(text))
        self.input_user.set_sensitive(not bool(self.creds.username))
        self.input_password.set_sensitive(True)
        self.button_apply.set_sensitive(valid)

        self.api.die()