New stuff.
This commit is contained in:
		
							parent
							
								
									5b78165fb7
								
							
						
					
					
						commit
						a1afaacb2e
					
				| @ -3,6 +3,8 @@ import asyncio | |||||||
| 
 | 
 | ||||||
| import logging | import logging | ||||||
| 
 | 
 | ||||||
|  | from snek.view.threads import ThreadsView  | ||||||
|  | 
 | ||||||
| logging.basicConfig(level=logging.DEBUG) | logging.basicConfig(level=logging.DEBUG) | ||||||
| 
 | 
 | ||||||
| from aiohttp import web | from aiohttp import web | ||||||
| @ -112,6 +114,7 @@ class Application(BaseApplication): | |||||||
|         self.router.add_get("/http-photo", self.handle_http_photo) |         self.router.add_get("/http-photo", self.handle_http_photo) | ||||||
|         self.router.add_get("/rpc.ws", RPCView) |         self.router.add_get("/rpc.ws", RPCView) | ||||||
|         self.router.add_view("/channel/{channel}.html", WebView) |         self.router.add_view("/channel/{channel}.html", WebView) | ||||||
|  |         self.router.add_view("/threads.html", ThreadsView) | ||||||
| 
 | 
 | ||||||
|         self.add_subapp( |         self.add_subapp( | ||||||
|             "/docs", |             "/docs", | ||||||
|  | |||||||
| @ -1,3 +1,4 @@ | |||||||
|  | from snek.model.channel_message import ChannelMessageModel | ||||||
| from snek.system.model import BaseModel, ModelField | from snek.system.model import BaseModel, ModelField | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -10,3 +11,11 @@ class ChannelModel(BaseModel): | |||||||
|     is_listed = ModelField(name="is_listed", required=True, kind=bool, value=True) |     is_listed = ModelField(name="is_listed", required=True, kind=bool, value=True) | ||||||
|     index = ModelField(name="index", required=True, kind=int, value=1000) |     index = ModelField(name="index", required=True, kind=int, value=1000) | ||||||
|     last_message_on = ModelField(name="last_message_on", required=False, kind=str) |     last_message_on = ModelField(name="last_message_on", required=False, kind=str) | ||||||
|  | 
 | ||||||
|  |     async def get_last_message(self)->ChannelMessageModel: | ||||||
|  |         async for model in self.app.services.channel_message.query("SELECT * FROM channel_message WHERE channel_uid=:channel_uid ORDER BY created_at DESC LIMIT 1",dict(channel_uid=self['uid'])): | ||||||
|  |             return model  | ||||||
|  |         return None | ||||||
|  | 
 | ||||||
|  |     async def get_members(self): | ||||||
|  |         return await self.app.services.channel_member.find(channel_uid=self['uid'],deleted_at=None,is_banned=False) | ||||||
| @ -14,3 +14,27 @@ class ChannelMemberModel(BaseModel): | |||||||
|     is_muted = ModelField(name="is_muted", required=True, kind=bool, value=False) |     is_muted = ModelField(name="is_muted", required=True, kind=bool, value=False) | ||||||
|     is_banned = ModelField(name="is_banned", required=True, kind=bool, value=False) |     is_banned = ModelField(name="is_banned", required=True, kind=bool, value=False) | ||||||
|     new_count = ModelField(name="new_count", required=False, kind=int, value=0) |     new_count = ModelField(name="new_count", required=False, kind=int, value=0) | ||||||
|  | 
 | ||||||
|  |     async def get_user(self): | ||||||
|  |         return await self.app.services.user.get(uid=self['user_uid']) | ||||||
|  |      | ||||||
|  |     async def get_channel(self): | ||||||
|  |         return await self.app.services.channel.get(uid=self['channel_uid']) | ||||||
|  | 
 | ||||||
|  |     async def get_name(self): | ||||||
|  |         if self["channel_uid"] == "dm": | ||||||
|  |             user = await self.get_other_dm_user() | ||||||
|  |             return user['nick'] | ||||||
|  |         channel = await self.get_channel() | ||||||
|  |         return channel['name'] | ||||||
|  | 
 | ||||||
|  |     async def get_other_dm_user(self): | ||||||
|  |         channel = await self.get_channel() | ||||||
|  |         if channel["tag"] != "dm": | ||||||
|  |             return None | ||||||
|  |          | ||||||
|  |         async for model in self.app.services.channel_member.find(channel_uid=channel['uid']): | ||||||
|  |             if model["uid"] != self['uid']: | ||||||
|  |                 return await self.app.services.user.get(uid=model["user_uid"]) | ||||||
|  |         return await self.get_user() | ||||||
|  |          | ||||||
| @ -1,3 +1,4 @@ | |||||||
|  | from snek.model.user import UserModel | ||||||
| from snek.system.model import BaseModel, ModelField | from snek.system.model import BaseModel, ModelField | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -6,3 +7,9 @@ class ChannelMessageModel(BaseModel): | |||||||
|     user_uid = ModelField(name="user_uid", required=True, kind=str) |     user_uid = ModelField(name="user_uid", required=True, kind=str) | ||||||
|     message = ModelField(name="message", required=True, kind=str) |     message = ModelField(name="message", required=True, kind=str) | ||||||
|     html = ModelField(name="html", required=False, kind=str) |     html = ModelField(name="html", required=False, kind=str) | ||||||
|  | 
 | ||||||
|  |     async def get_user(self)->UserModel: | ||||||
|  |         return await self.app.services.user.get(uid=self["user_uid"]) | ||||||
|  |      | ||||||
|  |     async def get_channel(self): | ||||||
|  |         return await self.app.services.channel.get(uid=self["channel_uid"]) | ||||||
| @ -31,3 +31,7 @@ class UserModel(BaseModel): | |||||||
|     password = ModelField(name="password", required=True, min_length=1) |     password = ModelField(name="password", required=True, min_length=1) | ||||||
| 
 | 
 | ||||||
|     last_ping = ModelField(name="last_ping", required=False, kind=str) |     last_ping = ModelField(name="last_ping", required=False, kind=str) | ||||||
|  | 
 | ||||||
|  |     async def get_channel_members(self): | ||||||
|  |         async for channel_member in self.app.services.channel_member.find(user_uid=self['uid'],is_banned=False,deleted_at=None): | ||||||
|  |             yield channel_member | ||||||
|  | |||||||
| @ -32,9 +32,9 @@ class NotificationService(BaseService): | |||||||
|         user = await self.services.user.get(uid=channel_message["user_uid"]) |         user = await self.services.user.get(uid=channel_message["user_uid"]) | ||||||
|         async for channel_member in self.services.channel_member.find( |         async for channel_member in self.services.channel_member.find( | ||||||
|             channel_uid=channel_message["channel_uid"], |             channel_uid=channel_message["channel_uid"], | ||||||
|             #is_banned=False, |             is_banned=False, | ||||||
|             #is_muted=False, |             is_muted=False, | ||||||
|             #deleted_at=None, |             deleted_at=None, | ||||||
|         ): |         ): | ||||||
|             if not channel_member['new_count']: |             if not channel_member['new_count']: | ||||||
|                 channel_member['new_count'] = 0 |                 channel_member['new_count'] = 0 | ||||||
|  | |||||||
| @ -20,7 +20,7 @@ class BaseMapper: | |||||||
|         return self.app.db |         return self.app.db | ||||||
| 
 | 
 | ||||||
|     async def new(self): |     async def new(self): | ||||||
|         return self.model_class(mapper=self) |         return self.model_class(mapper=self, app=self.app) | ||||||
| 
 | 
 | ||||||
|     @property |     @property | ||||||
|     def table(self): |     def table(self): | ||||||
|  | |||||||
| @ -270,7 +270,8 @@ class BaseModel: | |||||||
|         return self |         return self | ||||||
| 
 | 
 | ||||||
|     def __init__(self, *args, **kwargs): |     def __init__(self, *args, **kwargs): | ||||||
|         self._mapper = None |         self._mapper = kwargs.get("mapper") | ||||||
|  |         self.app = kwargs.get("app") | ||||||
|         self.fields = {} |         self.fields = {} | ||||||
|         for key in dir(self.__class__): |         for key in dir(self.__class__): | ||||||
|             obj = getattr(self.__class__, key) |             obj = getattr(self.__class__, key) | ||||||
|  | |||||||
| @ -26,7 +26,7 @@ | |||||||
|       <a class="no-select" href="/web.html">π </a> |       <a class="no-select" href="/web.html">π </a> | ||||||
|       <a class="no-select" href="/search-user.html">π</a> |       <a class="no-select" href="/search-user.html">π</a> | ||||||
|       <a class="no-select" style="display:none" id="install-button" href="#">π₯</a> |       <a class="no-select" style="display:none" id="install-button" href="#">π₯</a> | ||||||
|       <a class="no-select" href="/web.html">π₯</a> |       <a class="no-select" href="/threads.html">π₯</a> | ||||||
|       <a class="no-select" href="#">βοΈ</a> |       <a class="no-select" href="#">βοΈ</a> | ||||||
|       <a class="no-select" href="/logout.html">π</a> |       <a class="no-select" href="/logout.html">π</a> | ||||||
|     </nav> |     </nav> | ||||||
|  | |||||||
		Loadingβ¦
	
		Reference in New Issue
	
	Block a user