allow non-latin chars in profile names

This commit is contained in:
Damien Elmes 2012-04-24 05:05:23 +09:00
parent 35b366872b
commit c3c9156fdb
3 changed files with 24 additions and 13 deletions

View file

@ -39,7 +39,7 @@ _html = """
.fname { font-size: 10px; vertical-align: middle; padding: 0; .fname { font-size: 10px; vertical-align: middle; padding: 0;
font-family: "%s"; } font-family: "%s"; }
#dupes { font-size: 12px; } #dupes { font-size: 12px; }
img { max-width: 100%%; max-height: 90%%; } img { max-width: 100%%; }
body { margin: 5px; } body { margin: 5px; }
</style><script> </style><script>
%s %s

View file

@ -138,14 +138,22 @@ class AnkiQt(QMainWindow):
self.loadProfile() self.loadProfile()
return True return True
def profileNameOk(self, str):
from anki.utils import invalidFilename, invalidFilenameChars
if invalidFilename(str):
showWarning(
_("A profile name cannot contain these characters: %s") %
" ".join(invalidFilenameChars))
return
return True
def onAddProfile(self): def onAddProfile(self):
name = getOnlyText(_("Name:")) name = getOnlyText(_("Name:"))
if name: if name:
if name in self.pm.profiles(): if name in self.pm.profiles():
return showWarning(_("Name exists.")) return showWarning(_("Name exists."))
if not re.match("^[A-Za-z0-9 ]+$", name): if not self.profileNameOk(name):
return showWarning( return
_("Only numbers, letters and spaces can be used."))
self.pm.create(name) self.pm.create(name)
self.refreshProfilesList() self.refreshProfilesList()
@ -159,9 +167,8 @@ class AnkiQt(QMainWindow):
return return
if name in self.pm.profiles(): if name in self.pm.profiles():
return showWarning(_("Name exists.")) return showWarning(_("Name exists."))
if not re.match("^[A-Za-z0-9 ]+$", name): if not self.profileNameOk(name):
return showWarning( return
_("Only numbers, letters and spaces can be used."))
self.pm.rename(name) self.pm.rename(name)
self.refreshProfilesList() self.refreshProfilesList()

View file

@ -119,12 +119,14 @@ computer."""))
def profiles(self): def profiles(self):
return sorted( return sorted(
x for x in self.db.list("select name from profiles") unicode(x, "utf8") for x in
self.db.list("select name from profiles")
if x != "_global") if x != "_global")
def load(self, name, passwd=None): def load(self, name, passwd=None):
prof = cPickle.loads( prof = cPickle.loads(
self.db.scalar("select data from profiles where name = ?", name)) self.db.scalar("select data from profiles where name = ?",
name.encode("utf8")))
if prof['key'] and prof['key'] != self._pwhash(passwd): if prof['key'] and prof['key'] != self._pwhash(passwd):
self.name = None self.name = None
return False return False
@ -135,26 +137,28 @@ computer."""))
def save(self): def save(self):
sql = "update profiles set data = ? where name = ?" sql = "update profiles set data = ? where name = ?"
self.db.execute(sql, cPickle.dumps(self.profile), self.name) self.db.execute(sql, cPickle.dumps(self.profile),
self.name.encode("utf8"))
self.db.execute(sql, cPickle.dumps(self.meta), "_global") self.db.execute(sql, cPickle.dumps(self.meta), "_global")
self.db.commit() self.db.commit()
def create(self, name): def create(self, name):
prof = profileConf.copy() prof = profileConf.copy()
self.db.execute("insert into profiles values (?, ?)", self.db.execute("insert into profiles values (?, ?)",
name, cPickle.dumps(prof)) name.encode("utf8"), cPickle.dumps(prof))
self.db.commit() self.db.commit()
def remove(self, name): def remove(self, name):
shutil.rmtree(self.profileFolder()) shutil.rmtree(self.profileFolder())
self.db.execute("delete from profiles where name = ?", name) self.db.execute("delete from profiles where name = ?",
name.encode("utf8"))
self.db.commit() self.db.commit()
def rename(self, name): def rename(self, name):
oldFolder = self.profileFolder() oldFolder = self.profileFolder()
# update name # update name
self.db.execute("update profiles set name = ? where name = ?", self.db.execute("update profiles set name = ? where name = ?",
name, self.name) name.encode("utf8"), self.name.encode("utf-8"))
# rename folder # rename folder
self.name = name self.name = name
newFolder = self.profileFolder() newFolder = self.profileFolder()