diff --git a/src/calibre/gui2/preferences/server.py b/src/calibre/gui2/preferences/server.py index fb0c647029..6564eaae9e 100644 --- a/src/calibre/gui2/preferences/server.py +++ b/src/calibre/gui2/preferences/server.py @@ -303,6 +303,7 @@ class NewUser(QDialog): self.bb = bb = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) l.addRow(bb) bb.accepted.connect(self.accept), bb.rejected.connect(self.reject) + (self.uw if not username else self.p1).setFocus(Qt.OtherFocusReason) def show_password(self): for p in self.p1, self.p2: @@ -317,7 +318,7 @@ class NewUser(QDialog): return self.p1.text() def accept(self): - if self.uw.isEditable(): + if not self.uw.isReadOnly(): un = self.username if not un: return error_dialog(self, _('Empty username'), _('You must enter a username'), show=True) diff --git a/src/calibre/srv/users.py b/src/calibre/srv/users.py index 8ea5a5334f..04ba9e7ff4 100644 --- a/src/calibre/srv/users.py +++ b/src/calibre/srv/users.py @@ -168,14 +168,18 @@ class UserManager(object): def user_data(self, users): with self.lock, self.conn: c = self.conn.cursor() + remove = self.all_user_names - set(users) + if remove: + c.executemany('DELETE FROM users WHERE name=?', (remove,)) for name, data in users.iteritems(): res = serialize_restriction(data['restriction']) r = 'y' if data['readonly'] else 'n' - c.execute('UPDATE users SET (pw, restriction, readonly) VALUES (?,?,?) WHERE name=?', - data['pw'], res, r, name) + c.execute('UPDATE users SET pw=?, restriction=?, readonly=? WHERE name=?', + (data['pw'], res, r, name)) if self.conn.changes() > 0: continue - c.execute('INSERT INTO USERS (name, pw, restriction, readonly)', name, data['pw'], res, r) + c.execute('INSERT INTO USERS (name, pw, restriction, readonly) VALUES (?, ?, ?, ?)', + (name, data['pw'], res, r)) self.refresh() def refresh(self):