102 lines
2.7 KiB
JavaScript
102 lines
2.7 KiB
JavaScript
import {Client} from './Client.js';
|
|
import {createNotification} from '../utils/noticeUtils.js'
|
|
import { lastView } from '../index.js';
|
|
import ProfilePageView from '../views/ProfilePageView.js';
|
|
import Search from '../views/Search.js';
|
|
|
|
export default class Notice {
|
|
|
|
/**
|
|
* @param {Client} client
|
|
*/
|
|
constructor(client) {
|
|
/**
|
|
* @type {Client}
|
|
*/
|
|
this.client = client;
|
|
this.url = location.origin.replace('http', 'ws') + '/ws/notice';
|
|
}
|
|
|
|
start() {
|
|
this._socket = new WebSocket(this.url);
|
|
|
|
this._socket.onclose = _ => this._socket = undefined;
|
|
this._socket.onmessage = message => {
|
|
const data = JSON.parse(message.data);
|
|
//console.log(data)
|
|
|
|
if (data.type === 'friend_request') {
|
|
this.friend_request(data.author);
|
|
} else if (data.type === 'new_friend') {
|
|
this.new_friend(data.friend);
|
|
} else if (data.type === 'friend_removed') {
|
|
this.friend_removed(data.friend);
|
|
} else if (data.type === 'friend_request_canceled') {
|
|
this.friend_request_canceled(data.author);
|
|
} else if (data.type === 'online') {
|
|
this.online(data.user)
|
|
} else if (data.type === 'offline') {
|
|
this.offline(data.user)
|
|
}
|
|
};
|
|
}
|
|
|
|
stop() {
|
|
if (this._socket) {
|
|
this._socket.close();
|
|
this._socket = undefined;
|
|
}
|
|
}
|
|
|
|
_setOnlineStatus(user, status) {
|
|
if (lastView instanceof ProfilePageView && lastView.profile.id === user.id) {
|
|
lastView.profile.online = status;
|
|
lastView.loadFriendshipStatus();
|
|
}
|
|
else if (lastView instanceof Search) {
|
|
lastView.display_specific_user(user.id);
|
|
}
|
|
}
|
|
|
|
online(user) {
|
|
this._setOnlineStatus(user, true)
|
|
}
|
|
|
|
offline(user) {
|
|
this._setOnlineStatus(user, false)
|
|
}
|
|
|
|
friend_request(author) {
|
|
createNotification('Friend Request', `<strong>${author.username}</strong> sent you a friend request.`);
|
|
if (lastView instanceof ProfilePageView && lastView.profile.id === author.id) {
|
|
lastView.profile.hasIncomingRequest = true;
|
|
lastView.loadFriendshipStatus();
|
|
}
|
|
}
|
|
|
|
new_friend(friend) {
|
|
createNotification('New Friend', `<strong>${friend.username}</strong> accepted your friend request.`);
|
|
if (lastView instanceof ProfilePageView && lastView.profile.id === friend.id) {
|
|
lastView.profile.isFriend = true;
|
|
lastView.profile.hasIncomingRequest = false;
|
|
lastView.profile.hasOutgoingRequest = false;
|
|
lastView.loadFriendshipStatus();
|
|
}
|
|
}
|
|
|
|
friend_removed(exFriend) {
|
|
if (lastView instanceof ProfilePageView && lastView.profile.id === exFriend.id) {
|
|
lastView.profile.isFriend = false;
|
|
lastView.profile.online = null;
|
|
lastView.loadFriendshipStatus();
|
|
}
|
|
}
|
|
|
|
friend_request_canceled(author) {
|
|
if (lastView instanceof ProfilePageView && lastView.profile.id === author.id) {
|
|
lastView.profile.hasIncomingRequest = false;
|
|
lastView.loadFriendshipStatus();
|
|
}
|
|
}
|
|
}
|