Beispiel #1
0
    def __init__(self, controller):
        super(LoginDialog, self).__init__()
        self.controller = controller
        self.set_border_width(8)
        self.set_title("Connect to Campfire")

        self.domain_entry = gtk.Entry()
        self.user_entry = gtk.Entry()
        self.pass_entry = gtk.Entry()
        self.pass_entry.set_visibility(False)

        self.connect("delete_event", self.controller.on_delete)
        self.connect("destroy", self.controller.exit)

        self.ready = True

        vbox = gtk.VBox(False, 2)
        vbox.pack_start(self.entry_row("Domain", self.domain_entry), False)
        vbox.pack_start(self.entry_row("Username", self.user_entry), False)
        vbox.pack_start(self.entry_row("Password", self.pass_entry), False)

        button_row = gtk.HBox(False, 8)
        self.submit_button = gtk.Button("Login")
        self.submit_button.connect("clicked", self.on_activate)

        self.auto_check = gtk.CheckButton("Autoconnect")

        button_row.pack_start(self.auto_check)
        button_row.pack_start(self.submit_button)

        aligned_buttons = gtk.Alignment(1.0, 0.5, 0,0)
        aligned_buttons.add(button_row)

        vbox.pack_start(aligned_buttons, False)
        vbox.pack_start(gtk.HSeparator(), False, False, 5)

        self.session_picker = SessionList(self.controller)
        vbox.pack_start(self.session_picker, True, True)

        self.add(vbox)

        # attempt to load config
        self.sync = ConfigSynchronizer(controller.config)

        self.sync.associate("server.auto_connect", self.auto_check)
        self.sync.associate("server.host", self.domain_entry)
        self.sync.associate("server.username", self.user_entry)
        self.sync.associate("server.password", self.pass_entry)

        self.sync.fill_widgets()

        self.show_all()
Beispiel #2
0
class LoginDialog(gtk.Window):
    default_label_width = 80
    default_entry_width = 200

    def validate_input(self):
        v = Validator()
        v.not_empty(self.domain_entry)
        v.not_empty(self.user_entry)
        v.not_empty(self.pass_entry)
        return v.errors

    def entry_row(self, label_text, entry):
        hbox = gtk.HBox(False, 8)

        label = gtk.Label(label_text)
        label_align = gtk.Alignment(1.0, 0.5, 0,0)
        label_align.add(label)

        _w, h = label_align.size_request()
        label_align.set_size_request(self.default_label_width, h)

        _w, h = entry.size_request()
        entry.set_size_request(self.default_entry_width, h)


        hbox.pack_start(label_align, False)
        hbox.pack_start(entry, True, True)
        entry.connect("activate", self.on_activate)
        entry.label_text = label_text
        return hbox

    def _error(self, msg):
        md = gtk.MessageDialog(self,
                gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR,
                gtk.BUTTONS_CLOSE, msg)
        md.run()
        md.destroy()

    def on_activate(self, btn):
        if not self.ready: return

        errors = self.validate_input()
        if errors:
            widget, msg = errors[0]
            self._error(msg)
            widget.grab_focus()
        else:
            url = Campfire.url_for_subdomain(self.sync.get_value("server.host"))
            print url
            self.network = Network(url=url)

            username = self.sync.get_value("server.username")
            password = self.sync.get_value("server.password")

            self.ready = False
            self.submit_button.set_sensitive(False)
            self.network.login(self.on_login, username, password, fail=self.on_fail_login)

    def on_login(self, me):
        self.sync.save_widget_values()
        self.controller.on_login(self.network, me["user"])

    def on_fail_login(self, err):
        self.submit_button.set_sensitive(True)
        if isinstance(err, urllib2.HTTPError):
            if err.code == 401:
                self._error("Failed to authenticate")
                self.user_entry.grab_focus()
            else:
                self._error(str(err))
        elif isinstance(err, urllib2.URLError):
            self._error("Failed to connect")
        else:
            raise err

    def __init__(self, controller):
        super(LoginDialog, self).__init__()
        self.controller = controller
        self.set_border_width(8)
        self.set_title("Connect to Campfire")

        self.domain_entry = gtk.Entry()
        self.user_entry = gtk.Entry()
        self.pass_entry = gtk.Entry()
        self.pass_entry.set_visibility(False)

        self.connect("delete_event", self.controller.on_delete)
        self.connect("destroy", self.controller.exit)

        self.ready = True

        vbox = gtk.VBox(False, 2)
        vbox.pack_start(self.entry_row("Domain", self.domain_entry), False)
        vbox.pack_start(self.entry_row("Username", self.user_entry), False)
        vbox.pack_start(self.entry_row("Password", self.pass_entry), False)

        button_row = gtk.HBox(False, 8)
        self.submit_button = gtk.Button("Login")
        self.submit_button.connect("clicked", self.on_activate)

        self.auto_check = gtk.CheckButton("Autoconnect")

        button_row.pack_start(self.auto_check)
        button_row.pack_start(self.submit_button)

        aligned_buttons = gtk.Alignment(1.0, 0.5, 0,0)
        aligned_buttons.add(button_row)

        vbox.pack_start(aligned_buttons, False)
        vbox.pack_start(gtk.HSeparator(), False, False, 5)

        self.session_picker = SessionList(self.controller)
        vbox.pack_start(self.session_picker, True, True)

        self.add(vbox)

        # attempt to load config
        self.sync = ConfigSynchronizer(controller.config)

        self.sync.associate("server.auto_connect", self.auto_check)
        self.sync.associate("server.host", self.domain_entry)
        self.sync.associate("server.username", self.user_entry)
        self.sync.associate("server.password", self.pass_entry)

        self.sync.fill_widgets()

        self.show_all()