def update_success(self, reference):
        assert isinstance(reference, Gtk.TreeRowReference)
        if reference.valid():

            def func():
                path = reference.get_path()
                self._model[path][2] = "emblem-default"

            GtkHelper.invoke(func)
    def update_failed(self, reference, err=None):
        assert isinstance(reference, Gtk.TreeRowReference)
        if reference.valid():

            def func():
                path = reference.get_path()
                self._model[path][2] = "emblem-important"
                if err:
                    if isinstance(err, Exception):
                        self._model[path][3] = "{}: {}".format(type(err).__name__, str(err))
                    else:
                        self._model[path][3] = str(err)

            GtkHelper.invoke(func)
        def func():
            try:
                signature = model.signature
                server = model.database_type.name + ' ' + str(signature.version)

                auth_details = 'Admin Party'
                session = model.session
                user_ctx = session.userCtx
                if user_ctx and user_ctx.name:
                    auth_details = user_ctx.name
                    roles = ''
                    for role in user_ctx.roles:
                        roles += ', ' + role if len(roles) > 0 else role
                    auth_details += ' [' + roles + ']'

                status = server + ' - ' + auth_details

                GtkHelper.invoke(lambda: self._statusbar.push(0, status))
            except:
                self.reset()
    def on_menu_databases_restore(self, *_):
        selected_databases = self._databases.selected
        if len(selected_databases) == 1 and selected_databases[0].db_name.find('backup$') == 0:
            restore_database = True
            source_name = selected_databases[0].db_name
            target_name = source_name[7::]

            try:
                self._model.get_database(target_name)
                response = GtkHelper.run_dialog(self._win, Gtk.MessageType.QUESTION,
                                                Gtk.ButtonsType.YES_NO,
                                                "Target database already exists, continue?")

                restore_database = response is Gtk.ResponseType.YES
            except:
                pass

            if restore_database:
                repl = Replication(self._model, source_name, target_name, drop_first=True, create=True)
                self.queue_replication(repl)
    def on_menu_databases_backup(self, *_):
        for selected_database in self._databases.selected:
            if selected_database.db_name.find('backup$') < 0:
                backup_database = True
                source_name = selected_database.db_name
                target_name = 'backup$' + source_name

                try:
                    self._model.get_database(target_name)
                    response = GtkHelper.run_dialog(
                        self._win,
                        Gtk.MessageType.QUESTION,
                        Gtk.ButtonsType.YES_NO,
                        "Target database '{}' already exists, continue?".format(target_name))

                    backup_database = response is Gtk.ResponseType.YES
                except:
                    pass

                if backup_database:
                    repl = Replication(self._model, source_name, target_name, drop_first=True, create=True)
                    self.queue_replication(repl)
 def on_treeview_new_replication_dialog_targets_select_all(self, widget):
     GtkHelper.idle(self.set_remove_target_button_state)
 def on_target_model_row_deleted(self, path, user_data):
     def func():
         self.set_remove_target_button_state()
         self.set_replicate_button_state()
     GtkHelper.idle(func)
 def on_target_model_row_added(self, mode, path, user_data):
     GtkHelper.idle(self.set_replicate_button_state)