Added private chat.
This commit is contained in:
		
							parent
							
								
									3f75c8d5f9
								
							
						
					
					
						commit
						8a59ddd210
					
				| @ -6,6 +6,27 @@ from snek.system.model import now | ||||
| class ChannelService(BaseService): | ||||
|     mapper_name = "channel" | ||||
| 
 | ||||
|     async def get( | ||||
|         self, | ||||
|         uid=None, | ||||
|         **kwargs): | ||||
|         if uid: | ||||
|             kwargs['uid'] = uid  | ||||
|             result = await super().get(**kwargs) | ||||
|             if result: | ||||
|                 return result  | ||||
|             del kwargs['uid'] | ||||
|             kwargs['name'] = uid  | ||||
|             result = await super().get(**kwargs) | ||||
|             if result: | ||||
|                 return result | ||||
|             kwargs['name'] = '#' + uid  | ||||
|             result = await super().get(**kwargs) | ||||
|             if result: | ||||
|                 return result | ||||
|             return None  | ||||
|         return await super().get(**kwargs) | ||||
| 
 | ||||
|     async def create( | ||||
|         self, | ||||
|         label, | ||||
| @ -31,6 +52,20 @@ class ChannelService(BaseService): | ||||
|             return model | ||||
|         raise Exception(f"Failed to create channel: {model.errors}.") | ||||
| 
 | ||||
|     async def get_dm(self, user1, user2): | ||||
|         channel_member = await self.services.channel_member.get_dm( | ||||
|             user1, user2  | ||||
|         ) | ||||
|         if channel_member: | ||||
|             return await self.get(uid=channel_member["channel_uid"]) | ||||
|         channel = await self.create( | ||||
|             "DM", user1, tag="DM"             | ||||
|         ) | ||||
|         await self.services.channel_member.create_dm( | ||||
|             channel["uid"], user1, user2             | ||||
|         ) | ||||
|         return channel  | ||||
| 
 | ||||
|     async def get_users(self, channel_uid): | ||||
|         users = [] | ||||
|         async for channel_member in self.services.channel_member.find( | ||||
|  | ||||
| @ -16,7 +16,7 @@ class ChannelMemberService(BaseService): | ||||
|     ): | ||||
|         model = await self.get(channel_uid=channel_uid, user_uid=user_uid) | ||||
|         if model: | ||||
|             if model.is_banned.value: | ||||
|             if model['is_banned']: | ||||
|                 return False | ||||
|             return model | ||||
|         model = await self.new() | ||||
| @ -32,3 +32,17 @@ class ChannelMemberService(BaseService): | ||||
|         if await self.save(model): | ||||
|             return model | ||||
|         raise Exception(f"Failed to create channel member: {model.errors}.") | ||||
|      | ||||
|     async def get_dm(self,from_user, to_user): | ||||
|         async for model in self.query("SELECT channel_member.* FROM channel_member INNER JOIN channel ON (channel.uid = channel_member.channel_uid and channel.tag = 'dm') INNER JOIN channel_member AS channel_member2 ON(channel_member2.channel_uid = channel.uid AND channel_member2.user_uid = :to_user)   WHERE channel_member.user_uid=:from_user " ,dict(from_user=from_user, to_user=to_user)): | ||||
|             return model | ||||
|         return None  | ||||
| 
 | ||||
|     async def create_dm(self,channel_uid, from_user_uid, to_user_uid): | ||||
|         result = await self.create(channel_uid, from_user_uid,tag="dm") | ||||
|         await self.create(channel_uid, to_user_uid,tag="dm") | ||||
|         return result  | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -40,7 +40,7 @@ class BaseService: | ||||
|         if uid: | ||||
|             if not kwargs: | ||||
|                 result = await self.cache.get(uid) | ||||
|                 if result: | ||||
|                 if False and result and result.__class__ == self.mapper.model_class: | ||||
|                     return result | ||||
|             kwargs["uid"] = uid | ||||
| 
 | ||||
|  | ||||
| @ -14,7 +14,7 @@ | ||||
|         <ul> | ||||
|         {% for user in users %} | ||||
|     <li> | ||||
|         <a href="/user/{{user.username.value}}">{{user.username.value}}</a> | ||||
|         <a href="/channel/{{user.uid.value}}.html">{{user.username.value}}</a> | ||||
|     </li> | ||||
|      | ||||
|     {% endfor %} | ||||
|  | ||||
| @ -15,12 +15,12 @@ | ||||
|     <chat-window style="display:none" class="chat-area"></chat-window> | ||||
|     <div class="chat-input"> | ||||
|         <textarea placeholder="Type a message..." rows="2"></textarea> | ||||
|         <upload-button channel="{{ channel.channel_uid.value }}"></upload-button> | ||||
|         <upload-button channel="{{ channel.uid.value }}"></upload-button> | ||||
|     </div> | ||||
| </section> | ||||
| 
 | ||||
| <script> | ||||
|     const channelUid = "{{ channel.channel_uid.value }}"; | ||||
|     const channelUid = "{{ channel.uid.value }}"; | ||||
| 
 | ||||
|     function initInputField(textBox) { | ||||
|         textBox.addEventListener('change', (e) => { | ||||
|  | ||||
| @ -31,22 +31,44 @@ class WebView(BaseView): | ||||
|     login_required = True | ||||
| 
 | ||||
|     async def get(self): | ||||
|         if self.login_required and not self.session.get("logged_in"): | ||||
|             return web.HTTPFound("/") | ||||
|         channel = await self.services.channel.get(uid=self.request.match_info.get("channel")) | ||||
|         if not channel: | ||||
|             user = await self.services.user.get(uid=self.request.match_info.get("channel")) | ||||
|             if user: | ||||
|                 channel = await self.services.channel.get_dm(self.session.get("uid"), user["uid"]) | ||||
|         if not channel: | ||||
|             return web.HTTPNotFound() | ||||
|         user = await self.services.user.get(uid=self.session.get("uid")) | ||||
|         messages = [await self.app.services.channel_message.to_extended_dict(message) for message in await self.app.services.channel_message.offset( | ||||
|             channel["uid"] | ||||
|         )] | ||||
|         return await self.render_template("web.html", {"channel": channel,"user": user,"messages": messages}) | ||||
| 
 | ||||
|          | ||||
| 
 | ||||
| 
 | ||||
|     async def get2(self): | ||||
| 
 | ||||
|         if self.login_required and not self.session.get("logged_in"): | ||||
|             return web.HTTPFound("/") | ||||
| 
 | ||||
|         channel = None | ||||
| 
 | ||||
|         if not self.request.match_info.get("channel"): | ||||
|             channel = await self.app.services.channel.get( | ||||
|                     tag="public",deleted_at=None | ||||
|             ) | ||||
|             if not channel: | ||||
|                 return web.HTTPNotFound() | ||||
|             return web.HTTPFound("/channel/{}.html".format(channel["uid"])) | ||||
|         else: | ||||
|             if channel: | ||||
|                 return web.HTTPFound("/channel/{}.html".format(channel["uid"])) | ||||
|         if not channel: | ||||
|             print(self.request.match_info.get("channel"), flush=True) | ||||
|             channel = await self.app.services.channel.get( | ||||
|                 uid=str(self.request.match_info.get("channel")),deleted_at=None | ||||
|                 uid=str(self.request.match_info.get("channel")) | ||||
|             ) | ||||
|             if channel: | ||||
|                 print(f'found {channel["uid"]} {channel["name"]}', flush=True) | ||||
|             if not channel: | ||||
| 
 | ||||
|                 name = "#" + str(self.request.match_info.get("channel")).lstrip("#") | ||||
| @ -56,16 +78,77 @@ class WebView(BaseView): | ||||
|                 channel = await self.app.services.channel.get( | ||||
|                     label=name,deleted_at=None | ||||
|                 ) | ||||
|             if not channel: | ||||
|                 user = await self.app.services.user.get(uid=self.request.match_info.get("channel")) | ||||
|                 if not user: | ||||
|                     print("HIERRR EXIT\n",flush=True) | ||||
|                     return web.HTTPNotFound() | ||||
|                  | ||||
|                 print("FOUND USer: ",user['username'],flush=True) | ||||
|                 own_channels = self.app.services.channel_member.find( | ||||
|                     user_uid=self.session.get("uid"),deleted_at=None | ||||
|                 ) | ||||
|                 user_channels = self.app.services.channel_member.find( | ||||
|                     user_uid=user['uid'],deleted_at=None | ||||
|                 ) | ||||
|                 found_channel = False | ||||
|                 async for user_channel in user_channels: | ||||
|                     if found_channel: | ||||
|                         break | ||||
|                     async for own_channel in own_channels: | ||||
|                         if user_channel["channel_uid"] == own_channel["channel_uid"]: | ||||
|                             channel = await self.app.services.channel.get(uid=user_channel["channel_uid"]) | ||||
|                             if channel['tag'] == 'dm': | ||||
|                                 found_channel = True  | ||||
|                                 print("FOUND DM\n",flush=True) | ||||
|                                 break | ||||
|                             channel = None  | ||||
|                         else: | ||||
|                             print("Channel mistmatch!\n",flush=True) | ||||
|                 if found_channel: | ||||
|                     print(f"FOUND CHANNEL; {channel['uid']}\n",flush=True) | ||||
|                     return web.HTTPFound("/channel/{}.html".format(channel["uid"])) | ||||
|   | ||||
|                 channel = await self.app.services.channel.create( | ||||
|                     label="Direct Message", | ||||
|                     created_by_uid=self.session.get("uid"), | ||||
|                     tag="dm", | ||||
|                     description="Direct Chat", | ||||
|                     is_private=True, | ||||
|                     is_listed=True | ||||
|                 ) | ||||
|                 print(f"UID NEW CHANNELr: {channel['uid']}\n",flush=True) | ||||
|                 channel_member_self = await self.app.services.channel_member.create( | ||||
|                     channel_uid=channel['uid'], | ||||
|                     user_uid=self.session.get("uid"), | ||||
|                     is_moderator=True | ||||
|                 ) | ||||
|                 print(f"UID NEW CHANNEL_MEMBER SELF: {channel_member_self['uid']}\n",flush=True) | ||||
|                 channel_member_user = await self.app.services.channel_member.create( | ||||
|                     channel_uid=channel['uid'], | ||||
|                     user_uid=user["uid"], | ||||
|                     is_moderator=True | ||||
|                 )      | ||||
|                 print(f"UID NEW CHANNEL_MEMBER USER: {channel_member_user['uid']}\n",flush=True) | ||||
|                 self.app.db.commit() | ||||
|                 print(f"REDIRECT NAAR GOEDE: {channel['uid']}\n",flush=True) | ||||
|                 return web.HTTPFound("/channel/{}.html".format(channel["uid"])) | ||||
|              | ||||
|             if not channel: | ||||
|                 print("NOT found!\n",flush=True) | ||||
|                 return web.HTTPNotFound() | ||||
|             print(channel['uid'],":",self.session.get('uid'),flush=True) | ||||
|             from pprint import pprint as pp  | ||||
|             pp(channel) | ||||
|             channel_member = await self.app.services.channel_member.get( | ||||
|                 channel_uid=channel["uid"], user_uid=self.session.get("uid"),deleted_at=None,is_banned=False | ||||
|                 channel_uid=channel["uid"], user_uid=self.session.get("uid"),deleted_at=None | ||||
|             ) | ||||
|             if not channel_member: | ||||
|                 print("NO CHANNEL_MEMBER") | ||||
|                 return web.HTTPNotFound() | ||||
|             | ||||
|         print("HIER\n",flush=True) | ||||
|         print("UUID=",self.session.get("uid"),flush=True) | ||||
|         user = await self.app.services.user.get(uid=self.session.get("uid")) | ||||
|         if not user: | ||||
|             return web.HTTPNotFound() | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user