From 36c69eb8bb35068faebd396af1375fe5927eec44 Mon Sep 17 00:00:00 2001 From: retoor Date: Mon, 27 Jan 2025 00:56:06 +0100 Subject: [PATCH] Progress. --- src/snek/service/socket.py | 6 +++++- src/snek/static/app.js | 2 +- src/snek/system/mapper.py | 4 ++++ src/snek/system/service.py | 4 ++++ src/snek/templates/web.html | 11 +++++------ src/snek/view/rpc.py | 13 +++++++++++++ 6 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/snek/service/socket.py b/src/snek/service/socket.py index eb4695c..55909ce 100644 --- a/src/snek/service/socket.py +++ b/src/snek/service/socket.py @@ -23,7 +23,11 @@ class SocketService(BaseService): print("BROADCAT!",message) count = 0 for ws in self.subscriptions.get(channel_uid,[]): - await ws.send_json(message) + try: + await ws.send_json(message) + except Exception as ex: + print(ex) + continue count += 1 return count async def delete(self, ws): diff --git a/src/snek/static/app.js b/src/snek/static/app.js index f6490e8..1e98ec5 100644 --- a/src/snek/static/app.js +++ b/src/snek/static/app.js @@ -212,7 +212,7 @@ class Socket extends EventHandler { connectPromises = [] constructor() { super() - this.url = window.location.hostname == 'localhost' ? 'ws://localhost/rpc.ws' : 'wss://' + window.location.hostname +'/rpc.ws' + this.url = window.location.hostname == 'localhost' ? 'ws://localhost:8081/rpc.ws' : 'wss://' + window.location.hostname +'/rpc.ws' this.ensureConnection() } _camelToSnake(str) { diff --git a/src/snek/system/mapper.py b/src/snek/system/mapper.py index 66946d8..9722534 100644 --- a/src/snek/system/mapper.py +++ b/src/snek/system/mapper.py @@ -59,6 +59,10 @@ class BaseMapper: model[key] = value yield model + async def query(self, sql, *args): + for record in self.db.query(sql, *args): + yield dict(record) + async def delete(self, kwargs=None) -> int: if not kwargs or not isinstance(kwargs, dict): raise Exception("Can't execute delete with no filter.") diff --git a/src/snek/system/service.py b/src/snek/system/service.py index 60d27bb..51e4b9f 100644 --- a/src/snek/system/service.py +++ b/src/snek/system/service.py @@ -32,6 +32,10 @@ class BaseService: async def new(self, **kwargs): return await self.mapper.new() + async def query(self, sql, *args): + for record in self.app.db.query(sql, *args): + yield record + async def get(self, uid=None, **kwargs): if uid: if not kwargs: diff --git a/src/snek/templates/web.html b/src/snek/templates/web.html index d56b4f2..f6635d3 100644 --- a/src/snek/templates/web.html +++ b/src/snek/templates/web.html @@ -8,6 +8,7 @@ + @@ -30,12 +31,10 @@
  • Random
  • -
    -
    -

    General

    -
    - -
    +
    + + +
    diff --git a/src/snek/view/rpc.py b/src/snek/view/rpc.py index b3611ec..6936780 100644 --- a/src/snek/view/rpc.py +++ b/src/snek/view/rpc.py @@ -15,6 +15,19 @@ class RPCView(BaseView): self.ws = ws + async def get_messages(self, channel_uid,offset=0): + messages = [] + async for message in self.services.channel_message.query("SELECT channel_uid, user_uid, message, created_at FROM channel_message WHERE channel_uid = :channel_uid ORDER BY created_at DESC LIMIT 30 OFFSET :offset",{"channel_uid":channel_uid,"offset":int(offset)}): + messages.append(dict( + uid=message["uid"], + user_uid=message["user_uid"], + channel_uid=message["channel_uid"], + user_nick=(await self.services.user.get(uid=message["user_uid"]))["nick"], + message=message["message"], + created_at=message["created_at"] + )) + return messages + async def get_channels(self): channels = [] async for subscription in self.services.channel_member.find(user_uid=self.user_uid,is_banned=False):