Merge remote-tracking branch 'refs/remotes/origin/main'

This commit is contained in:
2024-01-08 21:00:27 +01:00
12 changed files with 101 additions and 66 deletions

View File

@ -1,6 +1,5 @@
from channels.generic.websocket import WebsocketConsumer from channels.generic.websocket import WebsocketConsumer
from asgiref.sync import async_to_sync from asgiref.sync import async_to_sync
from .models import ChatMemberModel, ChatMessageModel from .models import ChatMemberModel, ChatMessageModel
from profiles.models import BlockModel from profiles.models import BlockModel
@ -22,6 +21,8 @@ class ChatConsumer(WebsocketConsumer):
if ChatMemberModel.objects.filter(member_id=user.pk, channel_id=int(channel_id)).count() != 1: if ChatMemberModel.objects.filter(member_id=user.pk, channel_id=int(channel_id)).count() != 1:
return return
self.room_group_name = f'chat{channel_id}'
if (self.channel_layer == None): if (self.channel_layer == None):
return return
@ -78,7 +79,12 @@ class ChatConsumer(WebsocketConsumer):
} }
) )
new_message = ChatMessageModel(channel_id = channel_id, author_id = user.pk, content = message, time = message_time).save() new_message = ChatMessageModel(
channel_id = channel_id,
author_id = user.pk,
content = message,
time = message_time
).save()
def chat_message(self, event): def chat_message(self, event):
@ -86,9 +92,9 @@ class ChatConsumer(WebsocketConsumer):
if (user.is_anonymous or not user.is_authenticated): if (user.is_anonymous or not user.is_authenticated):
return return
channel_id : int = int(self.scope['url_route']['kwargs']['chat_id']) channel_id: int = int(self.scope['url_route']['kwargs']['chat_id'])
if ChatMemberModel.objects.filter(member_id = user.pk, channel_id = channel_id).count() != 1: if ChatMemberModel.objects.filter(member_id=user.pk, channel_id=channel_id).count() != 1:
return return
self.send(text_data=json.dumps({ self.send(text_data=json.dumps({

View File

@ -10,6 +10,7 @@ class ChatChannelModel(models.Model):
self.save() self.save()
for user_id in users_id: for user_id in users_id:
ChatMemberModel(channel_id = self.pk, member_id = user_id).save() ChatMemberModel(channel_id = self.pk, member_id = user_id).save()
return self.pk
def get_members_id(self): def get_members_id(self):
return [member_channel.member_id for member_channel in ChatMemberModel.objects.filter(channel_id = self.pk)] return [member_channel.member_id for member_channel in ChatMemberModel.objects.filter(channel_id = self.pk)]

View File

@ -28,6 +28,9 @@ class ChannelView(APIView):
data: dict = serializer.validated_data data: dict = serializer.validated_data
members_id = data.get("members_id") members_id = data.get("members_id")
if members_id == None:
return Response({"detail": "members_id is None."}, status = status.HTTP_400_BAD_REQUEST)
if self.request.user.pk not in members_id: if self.request.user.pk not in members_id:
return Response({"detail": "You are trying to create a chat group without you."}, status = status.HTTP_400_BAD_REQUEST) return Response({"detail": "You are trying to create a chat group without you."}, status = status.HTTP_400_BAD_REQUEST)

View File

@ -74,10 +74,10 @@
width: 100%; width: 100%;
border: none; border: none;
outline: none; outline: none;
border-bottom: 0.2em solid green; border-bottom: 0.15em solid green;
caret-color: green; caret-color: green;
color: green; color: green;
font-size: 16px; font-size: 0.8em;
} }
#app #you { #app #you {
@ -102,3 +102,16 @@
/* permet le retour à la ligne à la place de dépasser*/ /* permet le retour à la ligne à la place de dépasser*/
word-wrap: break-word; word-wrap: break-word;
} }
#app #invite {
position: relative;
background-color: green;
border: none;
color: white;
text-align: center;
text-decoration: none;
font-size: 0.8em;
height: 2em;
width: 4em;
cursor: pointer;
}

View File

@ -37,7 +37,6 @@ class Channel {
updateMessages(messages) updateMessages(messages)
{ {
console.log(messages);
messages = JSON.parse(messages); messages = JSON.parse(messages);
let new_messages = []; let new_messages = [];
@ -75,6 +74,10 @@ class Channel {
return data; return data;
} }
async sendInvite() {
}
} }
export {Channel} export {Channel}

View File

@ -1,9 +1,9 @@
import {Channel} from "./channel.js" import {Channel} from "./channel.js"
import {Message} from "./message.js"
class Channels { class Channels {
constructor(client) { constructor(client) {
this.client = client; this.client = client;
this.channel = undefined;
} }
async createChannel(members_id, reload) { async createChannel(members_id, reload) {
@ -28,7 +28,10 @@ class Channels {
if (exit_code == 200) if (exit_code == 200)
messages = data.messages; messages = data.messages;
return new Channel(this.client, data.channel_id, members_id, messages, reload); console.log(response);
console.log(data);
this.channel = new Channel(this.client, data.channel_id, members_id, messages, reload);
return this.channel;
} }
async deleteChannel(members_id) { async deleteChannel(members_id) {

View File

View File

@ -34,8 +34,8 @@ class Profile
let block_response = await this.client._get("/api/profiles/block"); let block_response = await this.client._get("/api/profiles/block");
if (block_response.status == 404) if (block_response.status != 200)
return; return
let block_data = await block_response.json(); let block_data = await block_response.json();
let block_list = JSON.parse(block_data); let block_list = JSON.parse(block_data);

View File

@ -41,8 +41,6 @@ class Profiles
}); });
let data = await response.json(); let data = await response.json();
console.log(response.status);
console.log(data);
return data; return data;
} }
@ -55,8 +53,6 @@ class Profiles
}); });
let data = await response.json(); let data = await response.json();
console.log(response.status);
console.log(data);
return data; return data;
} }

View File

@ -55,22 +55,22 @@ export default class extends AbstractView {
let add_chat = document.createElement("a"); let add_chat = document.createElement("a");
add_chat.id = "add_chat_off"; add_chat.id = "add_chat_off";
add_chat.onclick = async () => { add_chat.onclick = async () => {
if (client.channel != undefined) { if (client.channels.channel != undefined) {
client.channel.members_id.forEach((member_id) => { client.channels.channel.members_id.forEach((member_id) => {
if (member_id == user.id) if (member_id == user.user_id)
client.channel = undefined; client.channels.channel = undefined;
}); });
if (client.channel == undefined) { if (client.channels.channel == undefined) {
add_chat.id = "add_chat_off"; add_chat.id = "add_chat_off";
this.last_add_chat = undefined; this.last_add_chat = undefined;
return this.hideChat(); return await this.hideChat();
} }
client.channel.disconnect(); await client.channels.channel.disconnect();
} }
client.channel = await client.channels.createChannel([client.me.id , user.id], this.chat); client.channels.channel = await client.channels.createChannel([client.me.user_id , user.user_id], this.chat);
this.chat(); this.chat();
if (this.last_add_chat != undefined) if (this.last_add_chat != undefined)
this.last_add_chat.id = "add_chat_off"; this.last_add_chat.id = "add_chat_off";
@ -99,17 +99,16 @@ export default class extends AbstractView {
} }
async chat(logged, profiles) { async chat(logged, profiles)
{
/*let reload = document.getElementById("messages"); let reloads = ["members"];
if (reload != null) reloads.forEach(reload => {
reload.remove();*/ if (document.getElementById(reload) != undefined)
document.getElementById(reload).remove();
});
let reload = document.getElementById("members"); if (client.channels.channel == undefined || !logged)
if (reload != null)
reload.remove();
if (client.channel == undefined || !logged)
return ; return ;
let chats = document.getElementById("chats"); let chats = document.getElementById("chats");
@ -134,9 +133,11 @@ export default class extends AbstractView {
// les messages, réecriture seulement du dernier // les messages, réecriture seulement du dernier
let i = 0; let i = 0;
client.channel.messages.forEach((message) => { client.channels.channel.messages.forEach((message) => {
if (messages.children[i] == null || message.content != messages.children[i].innerText) { if (messages.children[i] == null || message.content != messages.children[i].innerText) {
let text = document.createElement("p"); let text = document.createElement("p");
let date = new Date(message.time);
text.title = date.toLocaleString("fr-FR");
text.appendChild(document.createTextNode(message.content)); text.appendChild(document.createTextNode(message.content));
if (message.author_id == client.me) if (message.author_id == client.me)
text.id = "you"; text.id = "you";
@ -149,19 +150,18 @@ export default class extends AbstractView {
}); });
// Input pour rentrer un message // Input pour rentrer un message
if (document.getElementById("input_chat") == null) { let chat_input = document.getElementById("input_chat") || document.createElement("input");
let chat_input = document.createElement("input"); chat_input.id="input_chat";
chat_input.id="input_chat"; chat_input.type="text";
chat_input.type="text"; chat_input.name="message";
chat_input.name="message"; chat_input.placeholder="message bozo";
chat_input.placeholder="message bozo"; chat_input.maxLength=255;
chat_input.maxLength=255; chat.appendChild(chat_input);
chat.appendChild(chat_input);
chat_input.onkeydown = async () => { chat_input.onkeydown = async () => {
if (event.keyCode == 13 && client.channel != undefined) { if (event.keyCode == 13 && client.channels.channel != undefined) {
//let chat_input = document.getElementById("input_chat"); //let chat_input = document.getElementById("input_chat");
let chat_text = chat_input.value; let chat_text = chat_input.value;
let receivers_id = []; let receivers_id = [];
client.channel.members_id.forEach((member_id) => { client.channel.members_id.forEach((member_id) => {
@ -170,18 +170,18 @@ export default class extends AbstractView {
}); });
await client.channel.sendMessageChannel(chat_text, receivers_id) await client.channel.sendMessageChannel(chat_text, receivers_id)
// Reset // Reset
chat_input.value = ""; chat_input.value = "";
} }
}; };
} chat_input.focus();
// nom des membres du chat // nom des membres du chat
let members = document.createElement("h2"); let members = document.createElement("h2");
members.id = "members"; members.id = "members";
let usernames = ""; let usernames = "";
client.channel.members_id.forEach((member_id) => { client.channels.channel.members_id.forEach((member_id) => {
if (member_id != client.me) { if (member_id != client.me.user_id) {
if (usernames.length > 0) if (usernames.length > 0)
usernames += ", "; usernames += ", ";
usernames += (profiles.filter(user => user.id == member_id)[0].username); usernames += (profiles.filter(user => user.id == member_id)[0].username);
@ -194,20 +194,31 @@ export default class extends AbstractView {
// Scroll to the bottom of messages // Scroll to the bottom of messages
messages.scrollTop = messages.scrollHeight; messages.scrollTop = messages.scrollHeight;
// Button to send invite to play
let invite = document.getElementById("invite") || document.createElement("button");
invite.id = "invite";
invite.innerText = "invite";
invite.onclick = async () => {
};
chat.appendChild(invite);
} }
async hideChat() { async hideChat() {
let close = document.getElementById("chat"); let closes = ["chat", "invite"]
if (close != null) closes.forEach(close => {
close.remove(); if (document.getElementById(close))
document.getElementById(close).remove();
});
} }
async leavePage() { async leavePage() {
if (client.channel != undefined) if (client.channels.channel != undefined)
client.channel.disconnect(); client.channels.channel.disconnect();
client.channel = undefined client.channels.channel = undefined;
} }
async getHtml() { async getHtml() {

View File

@ -26,8 +26,7 @@ class BlocksView(APIView):
blocks = BlockModel.objects.filter(blocker=request.user.pk) blocks = BlockModel.objects.filter(blocker=request.user.pk)
if (blocks): if (blocks):
return Response(serializers.serialize("json", BlockModel.objects.filter(blocker=request.user.pk)), status=status.HTTP_200_OK) return Response(serializers.serialize("json", BlockModel.objects.filter(blocker=request.user.pk)), status=status.HTTP_200_OK)
else: return Response({}, status=status.HTTP_204_NO_CONTENT)
return Response({}, status=status.HTTP_404_NOT_FOUND)
def post(self, request): def post(self, request):
data: dict = request.data data: dict = request.data