Ensure profile name is treated in a case-insensitive manner (#3372)

This commit is contained in:
Abdo 2024-08-22 13:35:48 +03:00 committed by GitHub
parent 7ea573b004
commit 83f044491b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -213,7 +213,8 @@ class ProfileManager:
if name == "_global": if name == "_global":
raise Exception("_global is not a valid name") raise Exception("_global is not a valid name")
data = self.db.scalar( data = self.db.scalar(
"select cast(data as blob) from profiles where name = ?", name "select cast(data as blob) from profiles where name = ? collate nocase",
name,
) )
self.name = name self.name = name
try: try:
@ -232,22 +233,26 @@ class ProfileManager:
return True return True
def save(self) -> None: def save(self) -> None:
sql = "update profiles set data = ? where name = ?" sql = "update profiles set data = ? where name = ? collate nocase"
self.db.execute(sql, self._pickle(self.profile), self.name) self.db.execute(sql, self._pickle(self.profile), self.name)
self.db.execute(sql, self._pickle(self.meta), "_global") self.db.execute(sql, self._pickle(self.meta), "_global")
self.db.commit() self.db.commit()
def create(self, name: str) -> None: def create(self, name: str) -> None:
prof = profileConf.copy() prof = profileConf.copy()
if self.db.scalar("select 1 from profiles where name = ? collate nocase", name):
return
self.db.execute( self.db.execute(
"insert or ignore into profiles values (?, ?)", name, self._pickle(prof) "insert or ignore into profiles values (?, ?)",
name,
self._pickle(prof),
) )
self.db.commit() self.db.commit()
def remove(self, name: str) -> None: def remove(self, name: str) -> None:
path = self.profileFolder(create=False) path = self.profileFolder(create=False)
send_to_trash(Path(path)) send_to_trash(Path(path))
self.db.execute("delete from profiles where name = ?", name) self.db.execute("delete from profiles where name = ? collate nocase", name)
self.db.commit() self.db.commit()
def trashCollection(self) -> None: def trashCollection(self) -> None:
@ -277,7 +282,9 @@ class ProfileManager:
return return
# update name # update name
self.db.execute("update profiles set name = ? where name = ?", name, oldName) self.db.execute(
"update profiles set name = ? where name = ? collate nocase", name, oldName
)
# rename folder # rename folder
try: try:
os.rename(oldFolder, newFolder) os.rename(oldFolder, newFolder)
@ -403,7 +410,7 @@ class ProfileManager:
self.db.execute( self.db.execute(
""" """
create table if not exists profiles create table if not exists profiles
(name text primary key, data blob not null);""" (name text primary key collate nocase, data blob not null);"""
) )
data = self.db.scalar( data = self.db.scalar(
"select cast(data as blob) from profiles where name = '_global'" "select cast(data as blob) from profiles where name = '_global'"
@ -485,7 +492,7 @@ create table if not exists profiles
def setLang(self, code: str) -> None: def setLang(self, code: str) -> None:
self.meta["defaultLang"] = code self.meta["defaultLang"] = code
sql = "update profiles set data = ? where name = ?" sql = "update profiles set data = ? where name = ? collate nocase"
self.db.execute(sql, self._pickle(self.meta), "_global") self.db.execute(sql, self._pickle(self.meta), "_global")
self.db.commit() self.db.commit()
anki.lang.set_lang(code) anki.lang.set_lang(code)