diff --git a/aqt/main.py b/aqt/main.py index 7f35ea979..f8d82b196 100755 --- a/aqt/main.py +++ b/aqt/main.py @@ -104,6 +104,7 @@ class AnkiQt(QMainWindow): d.connect(f.login, SIGNAL("clicked()"), self.onOpenProfile) d.connect(f.quit, SIGNAL("clicked()"), lambda: sys.exit(0)) d.connect(f.add, SIGNAL("clicked()"), self.onAddProfile) + d.connect(f.rename, SIGNAL("clicked()"), self.onRenameProfile) d.connect(f.delete_2, SIGNAL("clicked()"), self.onRemProfile) d.connect(d, SIGNAL("rejected()"), lambda: d.close()) d.connect(f.profiles, SIGNAL("currentRowChanged(int)"), @@ -155,6 +156,22 @@ class AnkiQt(QMainWindow): self.pm.create(name) self.refreshProfilesList() + def onRenameProfile(self): + name = getOnlyText("New name:", default=self.pm.name) + if not self.openProfile(): + return showWarning(_("Invalid password.")) + if not name: + return + if name == self.pm.name: + return + if name in self.pm.profiles(): + return showWarning("Name exists.") + if not re.match("^[A-Za-z0-9 ]+$", name): + return showWarning( + "Only numbers, letters and spaces can be used.") + self.pm.rename(name) + self.refreshProfilesList() + def onRemProfile(self): profs = self.pm.profiles() if len(profs) < 2: diff --git a/aqt/profiles.py b/aqt/profiles.py index 2086bcaec..8bf1764cd 100644 --- a/aqt/profiles.py +++ b/aqt/profiles.py @@ -152,6 +152,16 @@ computer.""") self.db.execute("delete from profiles where name = ?", name) self.db.commit() + def rename(self, name): + oldFolder = self.profileFolder() + # update name + self.db.execute("update profiles set name = ? where name = ?", + name, self.name) + # rename folder + self.name = name + os.rename(oldFolder, self.profileFolder()) + self.db.commit() + # Folder handling ###################################################################### diff --git a/designer/profiles.ui b/designer/profiles.ui index 59c68f1ee..ad50960d8 100644 --- a/designer/profiles.ui +++ b/designer/profiles.ui @@ -60,6 +60,13 @@ + + + + Rename + + + @@ -93,6 +100,15 @@ + + profiles + passEdit + login + add + rename + delete_2 + quit +