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