Skip to content

Commit

Permalink
added pfps to server channel profiles and fixed a few bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
ION606 committed Mar 4, 2024
1 parent df20f89 commit c9912f4
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 21 deletions.
24 changes: 22 additions & 2 deletions client/scripts/chatServer.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,10 @@ function createServerSettingsModal(serverInfo) {

// Add form
const form = document.createElement("form");
const sname = sessionStorage.getItem('sname') ? sessionStorage.getItem('sname') : serverInfo.configs.name;

// Server Name
form.appendChild(createInputField("Server Name:", "serverName", "text", serverInfo.configs.name));
form.appendChild(createInputField("Server Name:", "serverName", "text", sname));

// Server Icon
form.appendChild(createFileInputField("New Server Icon:", "serverIcon"));
Expand Down Expand Up @@ -172,7 +173,7 @@ function createServerSettingsModal(serverInfo) {
submitButton.onclick = (e) => {
e.preventDefault();

const serverName = document.getElementById("serverName").value || serverInfo.configs.name;
const serverName = document.getElementById("serverName").value || sname;
const serverIcon = document.getElementById("serverIcon").files[0]; // This will be a File object
const serverPrivacy = document.getElementById("serverPrivacy").value;

Expand Down Expand Up @@ -378,6 +379,25 @@ function createServerConfMain(serverInfo) {
}


function editServer(obj) {
// update the name
const sInf = document.getElementById('serverInfoContainer');

if (obj.serverName) {
sInf.querySelector('h1').innerText = `Welcome to ${obj.serverName}`;
sessionStorage.setItem('sname', obj.serverName);
}
else if (obj.serverPrivacy) {
// TODO
}
else if (obj.serverIcon) {
// edit the server icon
}
document.getElementsByClassName('close')[0]?.click();
}



function initializeServersPage(response) {
createServerSideBar(response.data);
console.log(response.data);
Expand Down
10 changes: 7 additions & 3 deletions client/scripts/chatServerChannel.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ function addNewChannel(serverId) {

hideNewChannelPopup();
} else {
alert("Please enter a channel name.");
alert("Please enter a channel name!");
}
}

Expand Down Expand Up @@ -345,7 +345,7 @@ function createCollapsable(toColl, collLeft = true) {
}


function createUCard(uObj, serverConfs, isOwner) {
async function createUCard(uObj, serverConfs, isOwner) {
// Create the main card container
const userCard = document.createElement('div');
userCard.className = 'user-card';
Expand All @@ -357,7 +357,11 @@ function createUCard(uObj, serverConfs, isOwner) {
icon.alt = 'User Icon';
icon.className = 'user-icon';
if (!uObj.icon) icon.src = 'https://github.com/ION606/chatJS/blob/main/client/assets/nopfp.jpg?raw=true';
else setPFP(undefined, icon, uObj.icon);
else {
const i2 = await getFriendPFP(uObj.uid);
icon.src = i2.src;
}
console.log(uObj);

userCard.onclick = async () => {
const user = inChannel.find(m => (m.uid == userCard.id));
Expand Down
2 changes: 1 addition & 1 deletion client/scripts/messages.js
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,7 @@ function getFriendPFP(uid) {
img.className = 'pfpsmall';
img.id = `dmpfp-${uid}`;

resolve(img);;
resolve(img);
};

req.setRequestHeader('sessionid', localStorage.getItem('sessionid'));
Expand Down
2 changes: 1 addition & 1 deletion client/server.html
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
case 7: console.log("CHANNEL DELETED: "); console.log(response.data);
break;

case 8: console.log("SERVER EDITED: "); console.log(response.data);
case 8: editServer(response.data);
break;

case 9: console.log("SERVER DELETED: "); console.log(response.data);
Expand Down
38 changes: 26 additions & 12 deletions server/guilds/chatServer.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { handleRoleReq } from './handleRoles.js';
function pingEveryoneInChannel(connectionMap, client, op, data, uconf, users, code = 6) {
try {
const toSend = { code: code, op: op, data: { serverId: data.serverId, channelId: data.channelId, user: uconf } };
broadcastToSessions(client, connectionMap, users.map(u => u.uid), toSend);
broadcastToSessions(client, connectionMap, users, toSend);
}
catch (err) {
console.error(err);
Expand Down Expand Up @@ -124,7 +124,7 @@ export async function createChannel(mongoconnection, connectionMap, sid, serverI
await dbo.insertOne({ _id: 'channelConfigs', name: (channelName) ? channelName : 'new channel', visibility: 0, permissions: { roles: [adminId], users: [uconf] } });
await dbo.insertOne({ _id: 'inChannel', users: [] }); // users = [{category/role: String, username: string, userId: string}]

broadcastToSessions(client, connectionMap, uDoc.users.map(u => u.uid), {
broadcastToSessions(client, connectionMap, uDoc.users, {
code: 6,
op: 6,
data: { serverId: serverId, channelId: channelId, creator: { username: await getUsernameFromUID(client, uid), uid: uid } }
Expand All @@ -142,7 +142,8 @@ export async function createChannel(mongoconnection, connectionMap, sid, serverI
async function editServer(ws, mongoconnection, connectionMap, data) {
try {
const client = await mongoconnection;
const db = client.db(`S|${data.serverConfs.serverId}`);
const fullSID = `S|${data.serverConfs.serverId}`;
const db = client.db(fullSID);
const dbo = db.collection('settings');

const uid = getUidFromSid(data.sid);
Expand All @@ -151,23 +152,26 @@ async function editServer(ws, mongoconnection, connectionMap, data) {

// for now, only the server owner can manage channels
if (!checkPerms(db, uid, MACROS.SERVER.OPS.EDIT_SERVER)) return ws.send(JSON.stringify({ type: 1, code: 401 }));
const usersInServer = (await db.collection('settings').findOne({ _id: 'classifications' })).users;

const toSend = {};
const toSend = {code: 6, op: 8, data: {}};
if (data.serverPrivacy) {
const sPriv = (data.serverPrivacy == 'private');
await dbo.updateOne({ _id: 'serverConfigs' }, { $set: { isPublic: sPriv } });
toSend['serverPrivacy'] = sPriv;
toSend.data['serverPrivacy'] = sPriv;
}

if (data.serverName) {
toSend['serverName'] = data.serverName;
toSend.data['serverName'] = data.serverName;
await dbo.updateOne({ _id: 'serverConfigs' }, { $set: { name: data.serverName } });

// add the change to every user
usersInServer.forEach(u => client.db(u).collection('servers').updateOne({serverId: fullSID}, {$set: {name: data.serverName}}).catch((err) => {}));
}

// NOT IMPLEMENTED
if (data.serverIcon) return ws.send(JSON.stringify({ type: 1, code: 501 }));

const usersInServer = (await db.collection('settings').findOne({ _id: classifications })).users;
broadcastToSessions(client, connectionMap, usersInServer, toSend);
}
catch (err) {
Expand Down Expand Up @@ -273,7 +277,7 @@ async function handleMessage(ws, connectionMap, mongoconnection, data, op) {
delete uconf['description'];
uconf['uid'] = user.uid;

broadcastToSessions(client, connectionMap, inChannel.users.map(u => u.uid), toSend);
broadcastToSessions(client, connectionMap, inChannel.users, toSend);
}
catch (err) {
console.error(err);
Expand Down Expand Up @@ -307,12 +311,12 @@ async function getChannel(ws, connectionMap, mongoconnection, data) {
if (data.currentChannel) {
// remove user from the old channel
const dboOld = client.client.db(`S|${data.serverId}`).collection(data.currentChannel);
dboOld.updateOne({ _id: 'inChannel' }, { $pull: { users: { uid: uid } } });
dboOld.updateOne({ _id: 'inChannel' }, { $pull: { users: uid } });
}

const uFromPresList = (await dbo.findOne({ _id: 'inChannel' })).users.find(u => (u.uid == uid));
const uFromPresList = (await dbo.findOne({ _id: 'inChannel' })).users.find(u => (u == uid));
if (!uFromPresList) {
dbo.updateOne({ _id: 'inChannel' }, { $push: { users: uconf } });
dbo.updateOne({ _id: 'inChannel' }, { $push: { users: uid } });
}

// update member list for everyone else in that channel
Expand All @@ -326,6 +330,16 @@ async function getChannel(ws, connectionMap, mongoconnection, data) {
channelConfigs[confInd]['serverId'] = data.serverId;
channelConfigs[confInd]['serverOwner'] = serverConfigs.owner;

// TODO: change to like the first 30 users or smth to avoid load
const UICInd = channelConfigs.findIndex(o => o._id == 'inChannel');

const uConfs = await Promise.all(channelConfigs[UICInd].users.map(async (uid) => {
const doc = await client.db(uid).collection('configs').findOne({_id: 'myprofile'});
doc['uid'] = uid;
return doc;
}));
channelConfigs[UICInd]['users'] = uConfs;

ws.send(JSON.stringify({
code: 6,
op: 2,
Expand Down Expand Up @@ -404,7 +418,7 @@ async function updateChannel(ws, connectionMap, mongoconnection, data, op) {
const usersWithPerms = (await Promise.all(uDoc.users.map(u => checkPerms(db, u.uid, MACROS.SERVER.OPS.EDIT_CHANNEL, dbo))))
.filter(u => u);

broadcastToSessions(client, connectionMap, uDoc.users.map(u => u.uid), {
broadcastToSessions(client, connectionMap, uDoc.users, {
code: 6,
op: (op == MACROS.SERVER.OPS.DELETE_CHANNEL) ? 7 : 6,
data: toSend
Expand Down
4 changes: 2 additions & 2 deletions server/guilds/guildUser.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ async function changeRoles(mongoconnection, ws, connectionMap, data) {
await dbo.updateOne({ _id: "classifications", "roles.id": data.roleId }, { $pull: { "roles.$.users": { uid: uid } } });

const uDoc = await dbo.findOne({ _id: 'classifications' });
broadcastToSessions(client, connectionMap, uDoc.users.map(u => u.uid), {
broadcastToSessions(client, connectionMap, uDoc.users, {
code: 6,
op: 6,
data: { serverId: serverId, channelId: channelId, creator: { username: await getUsernameFromUID(client, uid), uid: uid } }
Expand All @@ -96,7 +96,7 @@ async function addRole(mongoconnection, ws, connectionMap, data) {
await dbo.updateOne({ _id: "classifications", "roles.id": data.roleId }, { $push: { "roles.$.users": { name: username, uid: uid } } });

const uDoc = await dbo.findOne({ _id: 'classifications' });
broadcastToSessions(client, connectionMap, uDoc.users.map(u => u.uid), {
broadcastToSessions(client, connectionMap, uDoc.users, {
code: 6,
op: 6,
data: { serverId: data.serverConfs.serverId, channelId: null, creator: { username: await getUsernameFromUID(client, uid), uid: uid } }
Expand Down

0 comments on commit c9912f4

Please sign in to comment.