added interface settings with color depth and text encoding

This commit is contained in:
2026-08-04 10:23:41 +02:00
parent 194815fcae
commit 90afbda160
4 changed files with 345 additions and 14 deletions
+41
View File
@@ -12,6 +12,9 @@ userdb = Database("users")
userdb.createTable("NAMES",{"id":"int","name":"string","creation_date":"int","last_login":"int","last_namechange":"int"})
userdb.createTable("PASSWORDS",{"id":"int","sum":"string"})
isetdb = Database("isettings")
isetdb.createTable("BASIC",{"id":"int","color":"int","encoding":"str"})
def makeUserID() -> int:
count = userdb.rowAmount("NAMES")
digits = max(4,1+int(math.log10(10+count)))
@@ -35,6 +38,13 @@ def isValidChecksum(cs) -> bool:
if match==None: return False
return match.start()==0 and match.end()==len(cs)
def isValidSimpleName(name) -> bool:
if len(name)==0: return False
pattern = re.compile("^[a-z][a-z0-9-_]*")
match = pattern.match(name.lower())
if match==None: return False
return match.start()==0 and match.end()==len(name)
def response(msg,**kwargs) -> str:
return json.dumps({"type":"response","response":msg,**kwargs})
@@ -154,6 +164,37 @@ async def handleCommand(ws,cmd):
userdb.updateFromPK("PASSWORDS","id",uid,{"sum":newpass})
return await ws.send(response("success"))
# interface settings
case "getisettings":
if uid == None:
return await ws.send(clientError("You are not logged in."))
intname = cmd["interface"]
intname = intname.upper()
if (not isValidSimpleName(intname)) or (not isetdb.tableExists(intname)):
return await ws.send(clientError(f"The interface '{intname}' is not an existing interface."))
row = isetdb.rowFromPK(intname,"id",uid)
if row == None:
return await ws.send(clientError("This user has no settings for this interface set up."))
del row["id"]
return await ws.send(response(row))
case "setisettings":
if uid == None:
return await ws.send(clientError("You are not logged in."))
intname = cmd["interface"]
intname = intname.upper()
if (not isValidSimpleName(intname)) or (not isetdb.tableExists(intname)):
return await ws.send(clientError(f"The interface '{intname}' is not an existing interface."))
newset = cmd["settings"]
if not isetdb.hasPK(intname,"id",uid):
newset["id"]=uid
isetdb.insertRow(intname,newset)
else:
if "id" in newset:
del newset["id"]
isetdb.updateFromPK(intname,"id",uid,newset)
return await ws.send(response("success"))
case _:
return await ws.send(clientError(f"Command '{cmd["type"]}' does not exist."))