This commit is contained in:
Xamora 2024-02-01 12:57:32 +01:00 committed by AdrienLSH
parent 910a8861e5
commit 22dd4a0299
14 changed files with 67 additions and 40 deletions

View File

@ -288,12 +288,15 @@ class ChatNoticeConsumer(WebsocketConsumer):
asked = AskFriendModel().getAsked(user.pk)
asker = AskFriendModel().getAsker(user.pk)
online_friends = self.get_online_friend(user)
self.send(text_data=json.dumps({
'type':event['type'],
'author_id':event['author_id'],
'targets':event['targets'],
'asker': asker,
'asked': asked,
'online': online_friends,
'time': event['time'],
'status':event['status'],
}))
@ -351,23 +354,27 @@ class ChatNoticeConsumer(WebsocketConsumer):
self.send_ask_friend(event)
def online_users(self, event):
user = self.scope["user"]
if (user.is_anonymous or not user.is_authenticated):
return
def get_online_friend(self, user):
online_friends = {}
for friend in FriendModel().getFriends(user.pk):
if (friend in self.channel_layer.users_channels):
online_friends[friend] = "green"
else:
online_friends[friend] = "red"
return online_friends
def online_users(self, event):
user = self.scope["user"]
if (user.is_anonymous or not user.is_authenticated):
return
online_friends = self.get_online_friend(user)
self.send(text_data=json.dumps({
'type':event['type'],
'author_id':event['author_id'],
'content':online_friends,
'online':online_friends,
'time': event['time'],
'status':event['status'],
}))

View File

@ -1,12 +1,3 @@
*{
color: #cccccc;
font-size: 35px;
background-color: #1a1a1a;
}
body {
}
#app #avatar {
max-height: 10em;
max-width: 10em;

View File

@ -1,17 +1,11 @@
#app #main .account
{
color: #1a1a1a;
#app * {
font-size: 30px;
}
#app #main
{
width: 60%;
display: flex;
flex-direction: column;
color: #1a1a1a;
}
#app #main .profile
{
color: #1a1a1a;
}

View File

@ -1,3 +1,7 @@
#app * {
font-size: 30px;
}
#app #username
{
font-size: 0.8em;
@ -11,7 +15,6 @@
#app {
margin-top: 1em;
background-color: red;
}
#app #yes, #app #no {

View File

@ -1,3 +1,7 @@
#app * {
font-size: 40px;
}
#app img
{

View File

@ -80,7 +80,7 @@ class Notice {
this.rewrite_invite();
}
else {
let sender = await this.client.profiles.getProfile(send.author_id);
let sender = await this.client.profiles.getProfileId(send.author_id);
create_popup(sender.username + " refuse your invitation");
}
@ -123,7 +123,7 @@ class Notice {
return;
this.data["invited"] = content;
let sender = await this.client.profiles.getProfile(send.author_id);
let sender = await this.client.profiles.getProfileId(send.author_id);
create_popup("Invitation received by " + sender.username);
@ -145,7 +145,7 @@ class Notice {
}
async receive_online_users(send) {
let content = send.content;
let content = send.online;
if (content !== undefined) {
if (this.data["online"].length > 0) {
@ -187,7 +187,7 @@ class Notice {
if (send.status == 400)
create_popup("Friend ask error");
else if (send.status == 409)
create_popup("Already asked friend or already friend");
create_popup("Already asked friend");
}
//if (!send.asked.includes(send.author_id) ||
@ -202,7 +202,7 @@ class Notice {
this.data["asker"] = send.asker;
if (send.author_id != my_id) {
let sender = await this.client.profiles.getProfile(send.author_id);
let sender = await this.client.profiles.getProfileId(send.author_id);
if (this.data["asker"].includes(send.author_id))
create_popup(sender.username + " ask you as friend");
if (this.rewrite_profile !== undefined)
@ -220,8 +220,6 @@ class Notice {
}
async receive_remove_friend(send) {
this.data["asked"] = send.asked;
this.data["asker"] = send.asker;
if (send.author_id == this.client.me.id) {
if (send.status == 400)
@ -233,6 +231,8 @@ class Notice {
if (this.rewrite_profile !== undefined)
await this.rewrite_profile();
this.receive_online_users(send);
}
async accept_friend(user_id) {
@ -246,7 +246,7 @@ class Notice {
async receive_accept_friend(send) {
this.data["asked"] = send.asked;
this.data["asker"] = send.asker;
let sender = await this.client.profiles.getProfile(send.author_id);
let sender = await this.client.profiles.getProfileId(send.author_id);
if (send.author_id == this.client.me.id) {
if (send.status == 400)
@ -262,6 +262,8 @@ class Notice {
if (this.rewrite_profile !== undefined)
await this.rewrite_profile();
this.receive_online_users(send);
}
async refuse_friend(user_id) {
@ -275,7 +277,7 @@ class Notice {
async receive_refuse_friend(send) {
this.data["asked"] = send.asked;
this.data["asker"] = send.asker;
let sender = await this.client.profiles.getProfile(send.author_id);
let sender = await this.client.profiles.getProfileId(send.author_id);
if (send.author_id == this.client.me.id) {
if (send.status == 400)

View File

@ -73,6 +73,7 @@ class Client
this.notice = new Notice(this);
this.lang = new LanguageManager;
}
/**

View File

@ -5,7 +5,7 @@ class Profile
/**
* @param {Client} client
*/
constructor (client, username, id = undefined, avatar_url = undefined)
constructor (client, username=undefined, id=undefined, avatar_url=undefined)
{
/**
* @type {Client} client
@ -36,7 +36,11 @@ class Profile
async init()
{
let response = await this.client._get(`/api/profiles/${this.username}`);
let response;
if (this.username !== undefined)
response = await this.client._get(`/api/profiles/${this.username}`);
else
response = await this.client._get(`/api/profiles/id/${this.id}`);
if (response.status !== 200)
return response.status;

View File

@ -42,6 +42,14 @@ class Profiles
return profile;
}
async getProfileId(id)
{
let profile = new Profile(this.client, undefined, id);
if (await profile.init())
return null;
return profile;
}
/**
* Block a user
* @param {Number} user_id

View File

@ -68,7 +68,7 @@ export default class extends AbstractView {
username.setAttribute('data-link', '');
username.id = `username${user.id}`
username.href = `/profiles/${user.username}`;
if (user.id == client.me.id)
if (logged && user.id == client.me.id)
username.style.color = "green";
else {
let online = client.notice.data["online"][user.id];

View File

@ -6,6 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bozo Pong</title>
<link rel="stylesheet" href="{% static 'css/bootstrap/bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'css/index.css' %}">
</head>
<body data-bs-theme="dark">
<nav class="navbar navbar-expand-lg bg-body-tertiary rounded m-2">

View File

@ -10,7 +10,8 @@ urlpatterns = [
path("", viewsets.ProfileViewSet.as_view({'get': 'list'}), name="profiles_list"),
path("block", views.BlocksView.as_view(), name="block_page"),
path("block/<int:pk>", views.BlockView.as_view(), name="block_page"),
path("<str:username>", viewsets.ProfileViewSet.as_view({'get': 'retrieve'}), name="profile_page"),
path("friend", views.FriendsView.as_view(), name="friend_page"),
path("<str:username>", viewsets.ProfileViewSet.as_view({'get': 'retrieve'}), name="profile_page"),
path("id/<int:pk>", viewsets.ProfileViewSet.as_view({'get': 'retrieve_id'}), name="profile_page"),
] + static("/static/avatars/", document_root="./avatars")
] + static("/staqic/avatars/", document_root="./avatars")

View File

@ -70,6 +70,8 @@ class BlocksView(APIView):
return Response("Deleted", status=status.HTTP_200_OK)
class FriendsView(APIView):
permission_classes = (permissions.IsAuthenticated,)
authentication_classes = (SessionAuthentication,)
def get(self, request):
friends = FriendModel().getFriends(request.user.pk)

View File

@ -27,6 +27,15 @@ class ProfileViewSet(viewsets.ModelViewSet):
return Response(self.serializer_class(instance).data,
status=status.HTTP_200_OK)
def retrieve_id(self, request: HttpRequest, pk=None):
user = User.objects.filter(pk=pk)
if (not user):
return Response({"detail": "Profile not found."}, status=status.HTTP_404_NOT_FOUND)
instance = self.queryset().get(pk=user[0].pk)
instance.avatar_url.name = instance.avatar_url.name[instance.avatar_url.name.find("static") - 1:]
return Response(self.serializer_class(instance).data,
status=status.HTTP_200_OK)
def list(self, request: HttpRequest):
serializer = ProfileSerializer(self.queryset(), many=True)
for profile in serializer.data: