Update socket communicaton and removed prints.
This commit is contained in:
		
							parent
							
								
									37da903936
								
							
						
					
					
						commit
						1f8ebf71d0
					
				| @ -28,7 +28,6 @@ class ChannelMemberService(BaseService): | |||||||
|         model["is_read_only"] = is_read_only |         model["is_read_only"] = is_read_only | ||||||
|         model["is_muted"] = is_muted |         model["is_muted"] = is_muted | ||||||
|         model["is_banned"] = is_banned |         model["is_banned"] = is_banned | ||||||
|         print(model.record, flush=True) |  | ||||||
|         if await self.save(model): |         if await self.save(model): | ||||||
|             return model |             return model | ||||||
|         raise Exception(f"Failed to create channel member: {model.errors}.") |         raise Exception(f"Failed to create channel member: {model.errors}.") | ||||||
| @ -42,13 +41,9 @@ class ChannelMemberService(BaseService): | |||||||
|         channel_member = await self.get(channel_uid=channel_uid, user_uid=user_uid) |         channel_member = await self.get(channel_uid=channel_uid, user_uid=user_uid) | ||||||
|         channel = await self.services.channel.get(uid=channel_member['channel_uid']) |         channel = await self.services.channel.get(uid=channel_member['channel_uid']) | ||||||
|         if channel["tag"] != "dm": |         if channel["tag"] != "dm": | ||||||
|             print("NONT!\n", flush=True) |  | ||||||
|             return None |             return None | ||||||
|         print("YEAHH",flush=True) |  | ||||||
|         async for model in self.services.channel_member.find(channel_uid=channel_uid): |         async for model in self.services.channel_member.find(channel_uid=channel_uid): | ||||||
|             print("huh!!!",model['uid'],flush=True) |  | ||||||
|             if model["uid"] != channel_member['uid']: |             if model["uid"] != channel_member['uid']: | ||||||
|                 print("GOOOD!!",flush=True) |  | ||||||
|                 return await self.services.user.get(uid=model["user_uid"]) |                 return await self.services.user.get(uid=model["user_uid"]) | ||||||
| 
 | 
 | ||||||
|     async def create_dm(self,channel_uid, from_user_uid, to_user_uid): |     async def create_dm(self,channel_uid, from_user_uid, to_user_uid): | ||||||
|  | |||||||
| @ -38,7 +38,6 @@ class ChannelMessageService(BaseService): | |||||||
|     async def to_extended_dict(self, message): |     async def to_extended_dict(self, message): | ||||||
|         user = await self.services.user.get(uid=message["user_uid"]) |         user = await self.services.user.get(uid=message["user_uid"]) | ||||||
|         if not user: |         if not user: | ||||||
|             print("User not found!", flush=True) |  | ||||||
|             return {} |             return {} | ||||||
|         return { |         return { | ||||||
|             "uid": message["uid"], |             "uid": message["uid"], | ||||||
| @ -52,10 +51,11 @@ class ChannelMessageService(BaseService): | |||||||
|             "username": user['username']  |             "username": user['username']  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|     async def offset(self, channel_uid, offset=0): |     async def offset(self, channel_uid, page=0, page_size=30): | ||||||
|         results = [] |         results = [] | ||||||
|  |         offset = page * page_size  | ||||||
|         try: |         try: | ||||||
|             async for model in self.query("SELECT * FROM channel_message WHERE channel_uid=:channel_uid ORDER BY created_at DESC LIMIT 60 OFFSET :offset",dict(channel_uid=channel_uid, offset=offset)): |             async for model in self.query("SELECT * FROM channel_message WHERE channel_uid=:channel_uid ORDER BY created_at DESC LIMIT :page_size OFFSET :offset",dict(channel_uid=channel_uid, page_size=page_size, offset=offset)): | ||||||
|                 results.append(model) |                 results.append(model) | ||||||
|         except:  |         except:  | ||||||
|             pass |             pass | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| 
 | from snek.model.user import UserModel | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| from snek.system.service import BaseService | from snek.system.service import BaseService | ||||||
| @ -6,35 +6,58 @@ from snek.system.service import BaseService | |||||||
| 
 | 
 | ||||||
| class SocketService(BaseService): | class SocketService(BaseService): | ||||||
| 
 | 
 | ||||||
|     def __init__(self, app): |     class Socket: | ||||||
|         super().__init__(app) |         def __init__(self, ws, user: UserModel): | ||||||
|         self.sockets = set() |             self.ws = ws | ||||||
|         self.subscriptions = {} |             self.is_connected = True  | ||||||
|  |             self.user = user  | ||||||
| 
 | 
 | ||||||
|     async def add(self, ws): |         async def send_json(self, data): | ||||||
|         self.sockets.add(ws) |             if not self.is_connected: | ||||||
| 
 |                 return False  | ||||||
|     async def subscribe(self, ws, channel_uid): |  | ||||||
|         if not channel_uid in self.subscriptions: |  | ||||||
|             self.subscriptions[channel_uid] = set() |  | ||||||
|         self.subscriptions[channel_uid].add(ws) |  | ||||||
| 
 |  | ||||||
|     async def broadcast(self, channel_uid, message): |  | ||||||
|         print("BROADCAT!",message) |  | ||||||
|         count = 0 |  | ||||||
|         subscriptions = set(self.subscriptions.get(channel_uid,[])) |  | ||||||
|         for ws in subscriptions: |  | ||||||
|             try: |             try: | ||||||
|                 await ws.send_json(message) |                 await self.ws.send_json(data) | ||||||
|             except Exception as ex: |             except Exception as ex: | ||||||
|                 print(ex,flush=True) |                 print(ex,flush=True) | ||||||
|                 print("Deleting socket.",flush=True) |                 self.is_connected = False | ||||||
|                 self.subscriptions[channel_uid].remove(ws) |             return True  | ||||||
|  | 
 | ||||||
|  |         async def close(self): | ||||||
|  |             if not self.is_connected: | ||||||
|  |                 return True  | ||||||
|  |              | ||||||
|  |             await self.ws.close() | ||||||
|  |             self.is_connected = False | ||||||
|  |              | ||||||
|  |             return True   | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     def __init__(self, app): | ||||||
|  |         super().__init__(app) | ||||||
|  |         self.sockets = [] | ||||||
|  |         self.subscriptions = {} | ||||||
|  | 
 | ||||||
|  |     async def add(self, ws, user_uid): | ||||||
|  |         self.sockets.append(self.Socket(ws, await self.app.services.user.get(uid=user_uid))) | ||||||
|  | 
 | ||||||
|  |     async def subscribe(self, ws,channel_uid, user_uid): | ||||||
|  |         if not channel_uid in self.subscriptions: | ||||||
|  |             self.subscriptions[channel_uid] = set() | ||||||
|  |         s = self.Socket(ws,await self.app.services.user.get(uid=user_uid)) | ||||||
|  |         self.subscriptions[channel_uid].add(s) | ||||||
|  | 
 | ||||||
|  |     async def broadcast(self, channel_uid, message): | ||||||
|  |         count = 0 | ||||||
|  |         subscriptions = set(self.subscriptions.get(channel_uid,[])) | ||||||
|  |         for s in subscriptions: | ||||||
|  |             if not await s.send_json(message): | ||||||
|  |                 self.subscriptions[channel_uid].remove(s) | ||||||
|                 continue  |                 continue  | ||||||
|             count += 1 |             count += 1 | ||||||
|         return count |         return count | ||||||
|     async def delete(self, ws): |     async def delete(self, ws): | ||||||
|         try: |         for s in self.sockets: | ||||||
|             self.sockets.remove(ws)  |             if s.ws == ws: | ||||||
|         except : |                 await s.close() | ||||||
|             pass  |                 self.sockets.remove(s) | ||||||
|  |          | ||||||
| @ -86,18 +86,17 @@ async def repair_links(base_url, html_content): | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| async def is_html_content(content: bytes): | async def is_html_content(content: bytes): | ||||||
|  |     if not content: | ||||||
|  |         return False | ||||||
|     try: |     try: | ||||||
|         content = content.decode(errors="ignore") |         content = content.decode(errors="ignore") | ||||||
|     except: |     except: | ||||||
|         pass |         pass | ||||||
|     marks = ["<html", "<img", "<p", "<span", "<div"] |     marks = ["<html", "<img", "<p", "<span", "<div"] | ||||||
|     try: |     content = content.lower() | ||||||
|         content = content.lower() |     for mark in marks: | ||||||
|         for mark in marks: |         if mark in content: | ||||||
|             if mark in content: |             return True | ||||||
|                 return True |  | ||||||
|     except Exception as ex: |  | ||||||
|         print(ex) |  | ||||||
|     return False |     return False | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -50,9 +50,9 @@ class RPCView(BaseView): | |||||||
|             record = user.record |             record = user.record | ||||||
|             del record['password'] |             del record['password'] | ||||||
|             del record['deleted_at'] |             del record['deleted_at'] | ||||||
|             await self.services.socket.add(self.ws) |             await self.services.socket.add(self.ws,self.view.request.session.get('uid')) | ||||||
|             async for subscription in self.services.channel_member.find(user_uid=self.view.request.session.get("uid"), deleted_at=None, is_banned=False): |             async for subscription in self.services.channel_member.find(user_uid=self.view.request.session.get("uid"), deleted_at=None, is_banned=False): | ||||||
|                 await self.services.socket.subscribe(self.ws, subscription["channel_uid"]) |                 await self.services.socket.subscribe(self.ws, subscription["channel_uid"], self.view.request.session.get("uid")) | ||||||
|             return record  |             return record  | ||||||
| 
 | 
 | ||||||
|         async def search_user(self, query):  |         async def search_user(self, query):  | ||||||
| @ -74,9 +74,7 @@ class RPCView(BaseView): | |||||||
|         async def get_messages(self, channel_uid, offset=0): |         async def get_messages(self, channel_uid, offset=0): | ||||||
|             self._require_login() |             self._require_login() | ||||||
|             messages = [] |             messages = [] | ||||||
|             print("Channel uid:", channel_uid, flush=True) |  | ||||||
|             for message in await self.services.channel_message.offset(channel_uid, offset): |             for message in await self.services.channel_message.offset(channel_uid, offset): | ||||||
|                 print(message, flush=True) |  | ||||||
|                 extended_dict = await self.services.channel_message.to_extended_dict(message) |                 extended_dict = await self.services.channel_message.to_extended_dict(message) | ||||||
|                 messages.append(extended_dict) |                 messages.append(extended_dict) | ||||||
|             return messages |             return messages | ||||||
| @ -162,9 +160,9 @@ class RPCView(BaseView): | |||||||
|         ws = web.WebSocketResponse() |         ws = web.WebSocketResponse() | ||||||
|         await ws.prepare(self.request) |         await ws.prepare(self.request) | ||||||
|         if self.request.session.get("logged_in"): |         if self.request.session.get("logged_in"): | ||||||
|             await self.services.socket.add(ws) |             await self.services.socket.add(ws, self.request.session.get("uid")) | ||||||
|             async for subscription in self.services.channel_member.find(user_uid=self.request.session.get("uid"), deleted_at=None, is_banned=False): |             async for subscription in self.services.channel_member.find(user_uid=self.request.session.get("uid"), deleted_at=None, is_banned=False): | ||||||
|                 await self.services.socket.subscribe(ws, subscription["channel_uid"]) |                 await self.services.socket.subscribe(ws, subscription["channel_uid"], self.request.session.get("uid")) | ||||||
|         rpc = RPCView.RPCApi(self, ws) |         rpc = RPCView.RPCApi(self, ws) | ||||||
|         async for msg in ws: |         async for msg in ws: | ||||||
|             if msg.type == web.WSMsgType.TEXT: |             if msg.type == web.WSMsgType.TEXT: | ||||||
|  | |||||||
| @ -41,7 +41,6 @@ class SearchUserView(BaseFormView): | |||||||
|         query = self.request.query.get("query") |         query = self.request.query.get("query") | ||||||
|         if query: |         if query: | ||||||
|             users = await self.app.services.user.search(query) |             users = await self.app.services.user.search(query) | ||||||
|             print(users, flush=True) |  | ||||||
| 
 | 
 | ||||||
|         if self.request.path.endswith(".json"): |         if self.request.path.endswith(".json"): | ||||||
|             return await super().get() |             return await super().get() | ||||||
| @ -50,6 +49,5 @@ class SearchUserView(BaseFormView): | |||||||
| 
 | 
 | ||||||
|     async def submit(self, form): |     async def submit(self, form): | ||||||
|         if await form.is_valid: |         if await form.is_valid: | ||||||
|             print("YES\n") |  | ||||||
|             return {"redirect_url": "/search-user.html?query=" + form['username']} |             return {"redirect_url": "/search-user.html?query=" + form['username']} | ||||||
|         return {"is_valid": False} |         return {"is_valid": False} | ||||||
| @ -23,8 +23,6 @@ class UploadView(BaseView): | |||||||
|     async def get(self): |     async def get(self): | ||||||
|         uid = self.request.match_info.get("uid") |         uid = self.request.match_info.get("uid") | ||||||
|         drive_item = await self.services.drive_item.get(uid) |         drive_item = await self.services.drive_item.get(uid) | ||||||
| 
 |  | ||||||
|         print(await drive_item.to_json(), flush=True) |  | ||||||
|         return web.FileResponse(drive_item["path"]) |         return web.FileResponse(drive_item["path"]) | ||||||
| 
 | 
 | ||||||
|     async def post(self): |     async def post(self): | ||||||
| @ -37,7 +35,6 @@ class UploadView(BaseView): | |||||||
| 
 | 
 | ||||||
|         drive = await self.services.drive.get_or_create(user_uid=self.request.session.get("uid")) |         drive = await self.services.drive.get_or_create(user_uid=self.request.session.get("uid")) | ||||||
| 
 | 
 | ||||||
|         print(str(drive), flush=True) |  | ||||||
|         extension_types = { |         extension_types = { | ||||||
|             ".jpg": "image", |             ".jpg": "image", | ||||||
|             ".gif": "image", |             ".gif": "image", | ||||||
| @ -84,6 +81,5 @@ class UploadView(BaseView): | |||||||
|             await self.services.chat.send( |             await self.services.chat.send( | ||||||
|                 self.request.session.get("uid"), channel_uid, response |                 self.request.session.get("uid"), channel_uid, response | ||||||
|             ) |             ) | ||||||
|             print(drive_item, flush=True) |  | ||||||
| 
 | 
 | ||||||
|         return web.json_response({"message": "Files uploaded successfully", "files": [str(file) for file in files], "channel_uid": channel_uid}) |         return web.json_response({"message": "Files uploaded successfully", "files": [str(file) for file in files], "channel_uid": channel_uid}) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user