Merge remote-tracking branch 'refs/remotes/origin/main'
This commit is contained in:
@ -1,6 +1,5 @@
|
||||
from channels.generic.websocket import WebsocketConsumer
|
||||
from asgiref.sync import async_to_sync
|
||||
|
||||
from .models import ChatMemberModel, ChatMessageModel
|
||||
from profiles.models import BlockModel
|
||||
|
||||
@ -10,7 +9,7 @@ import json
|
||||
class ChatConsumer(WebsocketConsumer):
|
||||
|
||||
def connect(self):
|
||||
|
||||
|
||||
user = self.scope["user"]
|
||||
if (user.is_anonymous or not user.is_authenticated):
|
||||
return
|
||||
@ -22,6 +21,8 @@ class ChatConsumer(WebsocketConsumer):
|
||||
if ChatMemberModel.objects.filter(member_id=user.pk, channel_id=int(channel_id)).count() != 1:
|
||||
return
|
||||
|
||||
self.room_group_name = f'chat{channel_id}'
|
||||
|
||||
if (self.channel_layer == None):
|
||||
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):
|
||||
|
||||
@ -86,9 +92,9 @@ class ChatConsumer(WebsocketConsumer):
|
||||
if (user.is_anonymous or not user.is_authenticated):
|
||||
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
|
||||
|
||||
self.send(text_data=json.dumps({
|
||||
|
@ -10,6 +10,7 @@ class ChatChannelModel(models.Model):
|
||||
self.save()
|
||||
for user_id in users_id:
|
||||
ChatMemberModel(channel_id = self.pk, member_id = user_id).save()
|
||||
return self.pk
|
||||
|
||||
def get_members_id(self):
|
||||
return [member_channel.member_id for member_channel in ChatMemberModel.objects.filter(channel_id = self.pk)]
|
||||
@ -28,4 +29,4 @@ class ChatMessageModel(models.Model):
|
||||
time = IntegerField(primary_key=False)
|
||||
|
||||
def __str__(self):
|
||||
return "author_id: " + str(self.author_id) + ", channel_id: " + str(self.channel_id) + ", content: " + self.content
|
||||
return "author_id: " + str(self.author_id) + ", channel_id: " + str(self.channel_id) + ", content: " + self.content
|
||||
|
@ -27,4 +27,4 @@ class ChatMessageSerializer(serializers.Serializer):
|
||||
|
||||
class Meta:
|
||||
model = ChatMessageModel
|
||||
fields = ["channel_id", "author_id", "content", "time"]
|
||||
fields = ["channel_id", "author_id", "content", "time"]
|
||||
|
@ -28,6 +28,9 @@ class ChannelView(APIView):
|
||||
data: dict = serializer.validated_data
|
||||
|
||||
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:
|
||||
return Response({"detail": "You are trying to create a chat group without you."}, status = status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
@ -42,4 +45,4 @@ class ChannelView(APIView):
|
||||
return Response({'channel_id': channel_id, 'messages': messages}, status=status.HTTP_200_OK)
|
||||
|
||||
new_channel_id = ChatChannelModel().create(members_id)
|
||||
return Response({'channel_id': new_channel_id}, status=status.HTTP_201_CREATED)
|
||||
return Response({'channel_id': new_channel_id}, status=status.HTTP_201_CREATED)
|
||||
|
@ -74,10 +74,10 @@
|
||||
width: 100%;
|
||||
border: none;
|
||||
outline: none;
|
||||
border-bottom: 0.2em solid green;
|
||||
border-bottom: 0.15em solid green;
|
||||
caret-color: green;
|
||||
color: green;
|
||||
font-size: 16px;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
#app #you {
|
||||
@ -102,3 +102,16 @@
|
||||
/* permet le retour à la ligne à la place de dépasser*/
|
||||
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;
|
||||
}
|
||||
|
@ -37,7 +37,6 @@ class Channel {
|
||||
|
||||
updateMessages(messages)
|
||||
{
|
||||
console.log(messages);
|
||||
messages = JSON.parse(messages);
|
||||
let new_messages = [];
|
||||
|
||||
@ -75,6 +74,10 @@ class Channel {
|
||||
return data;
|
||||
}
|
||||
|
||||
async sendInvite() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export {Channel}
|
||||
|
@ -1,9 +1,9 @@
|
||||
import {Channel} from "./channel.js"
|
||||
import {Message} from "./message.js"
|
||||
|
||||
class Channels {
|
||||
constructor(client) {
|
||||
this.client = client;
|
||||
this.channel = undefined;
|
||||
}
|
||||
|
||||
async createChannel(members_id, reload) {
|
||||
@ -28,7 +28,10 @@ class Channels {
|
||||
if (exit_code == 200)
|
||||
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) {
|
||||
|
0
frontend/static/js/api/chat/notice.js
Normal file
0
frontend/static/js/api/chat/notice.js
Normal file
@ -34,8 +34,8 @@ class Profile
|
||||
|
||||
let block_response = await this.client._get("/api/profiles/block");
|
||||
|
||||
if (block_response.status == 404)
|
||||
return;
|
||||
if (block_response.status != 200)
|
||||
return
|
||||
|
||||
let block_data = await block_response.json();
|
||||
let block_list = JSON.parse(block_data);
|
||||
|
@ -41,8 +41,6 @@ class Profiles
|
||||
});
|
||||
|
||||
let data = await response.json();
|
||||
console.log(response.status);
|
||||
console.log(data);
|
||||
return data;
|
||||
|
||||
}
|
||||
@ -55,8 +53,6 @@ class Profiles
|
||||
});
|
||||
|
||||
let data = await response.json();
|
||||
console.log(response.status);
|
||||
console.log(data);
|
||||
return data;
|
||||
|
||||
}
|
||||
|
@ -55,22 +55,22 @@ export default class extends AbstractView {
|
||||
let add_chat = document.createElement("a");
|
||||
add_chat.id = "add_chat_off";
|
||||
add_chat.onclick = async () => {
|
||||
if (client.channel != undefined) {
|
||||
client.channel.members_id.forEach((member_id) => {
|
||||
if (member_id == user.id)
|
||||
client.channel = undefined;
|
||||
if (client.channels.channel != undefined) {
|
||||
client.channels.channel.members_id.forEach((member_id) => {
|
||||
if (member_id == user.user_id)
|
||||
client.channels.channel = undefined;
|
||||
});
|
||||
|
||||
if (client.channel == undefined) {
|
||||
if (client.channels.channel == undefined) {
|
||||
add_chat.id = "add_chat_off";
|
||||
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();
|
||||
if (this.last_add_chat != undefined)
|
||||
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");
|
||||
if (reload != null)
|
||||
reload.remove();*/
|
||||
let reloads = ["members"];
|
||||
reloads.forEach(reload => {
|
||||
if (document.getElementById(reload) != undefined)
|
||||
document.getElementById(reload).remove();
|
||||
});
|
||||
|
||||
let reload = document.getElementById("members");
|
||||
if (reload != null)
|
||||
reload.remove();
|
||||
|
||||
if (client.channel == undefined || !logged)
|
||||
if (client.channels.channel == undefined || !logged)
|
||||
return ;
|
||||
|
||||
let chats = document.getElementById("chats");
|
||||
@ -134,9 +133,11 @@ export default class extends AbstractView {
|
||||
|
||||
// les messages, réecriture seulement du dernier
|
||||
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) {
|
||||
let text = document.createElement("p");
|
||||
let date = new Date(message.time);
|
||||
text.title = date.toLocaleString("fr-FR");
|
||||
text.appendChild(document.createTextNode(message.content));
|
||||
if (message.author_id == client.me)
|
||||
text.id = "you";
|
||||
@ -149,19 +150,18 @@ export default class extends AbstractView {
|
||||
});
|
||||
|
||||
// Input pour rentrer un message
|
||||
if (document.getElementById("input_chat") == null) {
|
||||
let chat_input = document.createElement("input");
|
||||
chat_input.id="input_chat";
|
||||
chat_input.type="text";
|
||||
chat_input.name="message";
|
||||
chat_input.placeholder="message bozo";
|
||||
chat_input.maxLength=255;
|
||||
chat.appendChild(chat_input);
|
||||
|
||||
chat_input.onkeydown = async () => {
|
||||
if (event.keyCode == 13 && client.channel != undefined) {
|
||||
//let chat_input = document.getElementById("input_chat");
|
||||
let chat_text = chat_input.value;
|
||||
let chat_input = document.getElementById("input_chat") || document.createElement("input");
|
||||
chat_input.id="input_chat";
|
||||
chat_input.type="text";
|
||||
chat_input.name="message";
|
||||
chat_input.placeholder="message bozo";
|
||||
chat_input.maxLength=255;
|
||||
chat.appendChild(chat_input);
|
||||
|
||||
chat_input.onkeydown = async () => {
|
||||
if (event.keyCode == 13 && client.channels.channel != undefined) {
|
||||
//let chat_input = document.getElementById("input_chat");
|
||||
let chat_text = chat_input.value;
|
||||
|
||||
let receivers_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)
|
||||
|
||||
// Reset
|
||||
chat_input.value = "";
|
||||
}
|
||||
};
|
||||
}
|
||||
// Reset
|
||||
chat_input.value = "";
|
||||
}
|
||||
};
|
||||
chat_input.focus();
|
||||
|
||||
// nom des membres du chat
|
||||
let members = document.createElement("h2");
|
||||
members.id = "members";
|
||||
let usernames = "";
|
||||
client.channel.members_id.forEach((member_id) => {
|
||||
if (member_id != client.me) {
|
||||
client.channels.channel.members_id.forEach((member_id) => {
|
||||
if (member_id != client.me.user_id) {
|
||||
if (usernames.length > 0)
|
||||
usernames += ", ";
|
||||
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
|
||||
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() {
|
||||
|
||||
let close = document.getElementById("chat");
|
||||
if (close != null)
|
||||
close.remove();
|
||||
|
||||
let closes = ["chat", "invite"]
|
||||
closes.forEach(close => {
|
||||
if (document.getElementById(close))
|
||||
document.getElementById(close).remove();
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
async leavePage() {
|
||||
if (client.channel != undefined)
|
||||
client.channel.disconnect();
|
||||
client.channel = undefined
|
||||
if (client.channels.channel != undefined)
|
||||
client.channels.channel.disconnect();
|
||||
client.channels.channel = undefined;
|
||||
}
|
||||
|
||||
async getHtml() {
|
||||
|
@ -26,8 +26,7 @@ class BlocksView(APIView):
|
||||
blocks = BlockModel.objects.filter(blocker=request.user.pk)
|
||||
if (blocks):
|
||||
return Response(serializers.serialize("json", BlockModel.objects.filter(blocker=request.user.pk)), status=status.HTTP_200_OK)
|
||||
else:
|
||||
return Response({}, status=status.HTTP_404_NOT_FOUND)
|
||||
return Response({}, status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
def post(self, request):
|
||||
data: dict = request.data
|
||||
|
Reference in New Issue
Block a user