diff --git a/application/Conversation.cpp b/application/Conversation.cpp index 71e409a..fdeed92 100644 --- a/application/Conversation.cpp +++ b/application/Conversation.cpp @@ -15,11 +15,11 @@ #include "ChatCommand.h" #include "ConversationItem.h" #include "ConversationView.h" +#include "Flags.h" #include "MainWindow.h" #include "NotifyMessage.h" #include "ProtocolLooper.h" #include "ProtocolManager.h" -#include "RoomFlags.h" #include "Server.h" #include "TheApp.h" #include "Utils.h" diff --git a/application/DefaultItems.cpp b/application/DefaultItems.cpp deleted file mode 100644 index 66c179b..0000000 --- a/application/DefaultItems.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright 2021, Jaidyn Levesque - * All rights reserved. Distributed under the terms of the MIT license. - */ - -#include "DefaultItems.h" - -#include -#include - -#include "AppMessages.h" -#include "ChatProtocolMessages.h" -#include "ChatCommand.h" -#include "Role.h" - - -BObjectList -DefaultCommands() -{ - List roomUser; - roomUser.AddItem(CMD_ROOM_PARTICIPANT); - List kickBody; - kickBody.AddItem(CMD_ROOM_PARTICIPANT); - kickBody.AddItem(CMD_BODY_STRING); - List knownUser; - knownUser.AddItem(CMD_KNOWN_USER); - List anyUser; - anyUser.AddItem(CMD_ANY_USER); - - CommandMap commands; - - BMessage kickMsg(IM_MESSAGE); - kickMsg.AddInt32("im_what", IM_ROOM_KICK_PARTICIPANT); - ChatCommand* kick = new ChatCommand("kick", kickMsg, true, kickBody); - kick->SetDesc("Force a user to temporarily leave the room, assuming your " - "power level's high enough."); - commands.AddItem("kick", kick); - - BMessage banMsg(IM_MESSAGE); - banMsg.AddInt32("im_what", IM_ROOM_BAN_PARTICIPANT); - ChatCommand* ban = new ChatCommand("ban", banMsg, true, kickBody); - ban->SetDesc("Kick a user out of the room and slam the door behind them― " - "locking it while you're at it."); - commands.AddItem("ban", ban); - - BMessage unbanMsg(IM_MESSAGE); - unbanMsg.AddInt32("im_what", IM_ROOM_UNBAN_PARTICIPANT); - ChatCommand* unban = new ChatCommand("unban", unbanMsg, true, anyUser); - unban->SetDesc("Undo a previous ban, allowing the user to rejoin (if they " - "still want to)."); - commands.AddItem("unban", unban); - - BMessage muteMsg(IM_MESSAGE); - muteMsg.AddInt32("im_what", IM_ROOM_MUTE_PARTICIPANT); - ChatCommand* mute = new ChatCommand("mute", muteMsg, true, roomUser); - mute->SetDesc("Disallow a user from sending visible messages."); - commands.AddItem("mute", mute); - - BMessage unmuteMsg(IM_MESSAGE); - unmuteMsg.AddInt32("im_what", IM_ROOM_UNMUTE_PARTICIPANT); - ChatCommand* unmute = new ChatCommand("unmute", unmuteMsg, true, roomUser); - unmute->SetDesc("Restore a user's ability to send messages."); - commands.AddItem("unmute", unmute); - - BMessage deafenMsg(IM_MESSAGE); - deafenMsg.AddInt32("im_what", IM_ROOM_DEAFEN_PARTICIPANT); - ChatCommand* deafen = new ChatCommand("deafen", deafenMsg, true, roomUser); - deafen->SetDesc("Disallow a user from reading messages sent in the room."); - commands.AddItem("deafen", deafen); - - BMessage undeafenMsg(IM_MESSAGE); - undeafenMsg.AddInt32("im_what", IM_ROOM_UNDEAFEN_PARTICIPANT); - ChatCommand* undeafen = new ChatCommand("undeafen", undeafenMsg, true, roomUser); - undeafen->SetDesc("Restore a user's ability to receive messages."); - commands.AddItem("undeafen", undeafen); - - BMessage inviteMsg(IM_MESSAGE); - inviteMsg.AddInt32("im_what", IM_ROOM_SEND_INVITE); - ChatCommand* invite = new ChatCommand("invite", inviteMsg, true, knownUser); - invite->SetDesc("Invite a user to the current room."); - commands.AddItem("invite", invite); - - BMessage helpMsg(APP_REQUEST_HELP); - ChatCommand* help = new ChatCommand("help", helpMsg, false, List()); - help->SetDesc("List all current commands, or get help for certain command."); - commands.AddItem("help", help); - - BObjectList cmds; - for (int i = 0; i < commands.CountItems(); i++) { - ChatCommand* cmd = commands.ValueAt(i); - BMessage* item = new BMessage(); - cmd->Archive(item); - cmds.AddItem(item); - } - return cmds; -} - - -BObjectList -DefaultChatPopUpItems() -{ - BObjectList items; - - BMessage* leave = new BMessage(IM_MESSAGE); - leave->AddInt32("im_what", IM_LEAVE_ROOM); - BMessage* item = new BMessage(IM_MESSAGE); - item->AddString("class", "BMenuItem"); - item->AddString("_label", "Leave chat"); - item->AddMessage("_msg", leave); - item->AddBool("x_to_protocol", true); - items.AddItem(item); - - return items; -} - - -BObjectList -DefaultUserPopUpItems() -{ - BObjectList items; - - BMessage* infoMsg = new BMessage(APP_USER_INFO); - items.AddItem(_UserMenuItem("User info" B_UTF8_ELLIPSIS, infoMsg, 0, - 0, 0, false, false)); - - BMessage* kickMsg = new BMessage(IM_MESSAGE); - kickMsg->AddInt32("im_what", IM_ROOM_KICK_PARTICIPANT); - items.AddItem(_UserMenuItem("Kick user", kickMsg, PERM_KICK, 0, 0, - false, true)); - - BMessage* banMsg = new BMessage(IM_MESSAGE); - banMsg->AddInt32("im_what", IM_ROOM_BAN_PARTICIPANT); - items.AddItem(_UserMenuItem("Ban user", banMsg, PERM_BAN, 0, 0, false, - true)); - - BMessage* muteMsg = new BMessage(IM_MESSAGE); - muteMsg->AddInt32("im_what", IM_ROOM_MUTE_PARTICIPANT); - items.AddItem(_UserMenuItem("Mute user", muteMsg, PERM_MUTE, - PERM_WRITE, 0, false, true)); - - BMessage* unmuteMsg = new BMessage(IM_MESSAGE); - unmuteMsg->AddInt32("im_what", IM_ROOM_UNMUTE_PARTICIPANT); - items.AddItem(_UserMenuItem("Unmute user", unmuteMsg, PERM_MUTE, 0, - PERM_WRITE, false, true)); - - BMessage* deafenMsg = new BMessage(IM_MESSAGE); - deafenMsg->AddInt32("im_what", IM_ROOM_DEAFEN_PARTICIPANT); - items.AddItem(_UserMenuItem("Deafen user", deafenMsg, PERM_DEAFEN, - PERM_READ, 0, false, true)); - - BMessage* undeafenMsg = new BMessage(IM_MESSAGE); - undeafenMsg->AddInt32("im_what", IM_ROOM_UNDEAFEN_PARTICIPANT); - items.AddItem(_UserMenuItem("Undeafen user", undeafenMsg, PERM_DEAFEN, - 0, PERM_READ, false, true)); - - return items; -} - - -BMessage* -_UserMenuItem(const char* label, BMessage* msg, int32 user_perms, - int32 target_perms, int32 target_lacks, bool ignorePriority, - bool toProtocol) -{ - BMessage* item = new BMessage(IM_MESSAGE); - item->AddString("class", "BMenuItem"); - item->AddString("_label", label); - item->AddMessage("_msg", msg); - - item->AddInt32("x_perms", user_perms); - item->AddInt32("x_target_perms", target_perms); - item->AddInt32("x_target_antiperms", target_lacks); - item->AddBool("x_priority", ignorePriority); - item->AddBool("x_to_protocol", toProtocol); - return item; -} - - diff --git a/application/DefaultItems.h b/application/DefaultItems.h deleted file mode 100644 index 4c65462..0000000 --- a/application/DefaultItems.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2021, Jaidyn Levesque - * All rights reserved. Distributed under the terms of the MIT license. - */ -#ifndef DEFAULTITEMS_H -#define DEFAULTITEMS_H - -#include - -class BMessage; - - -BObjectList DefaultCommands(); -BObjectList DefaultChatPopUpItems(); -BObjectList DefaultUserPopUpItems(); -BMessage* _UserMenuItem(const char* label, BMessage* msg, - int32 user_perms, int32 target_perms, - int32 target_lacks, bool ignorePriority, - bool toProtocol); - - -#endif // DEFAULTITEMS_H diff --git a/application/Flags.h b/application/Flags.h new file mode 100644 index 0000000..54aa8bf --- /dev/null +++ b/application/Flags.h @@ -0,0 +1,40 @@ +/* + * Copyright 2021, Jaidyn Levesque + * All rights reserved. Distributed under the terms of the MIT license. + */ +#ifndef FLAGS_H +#define FLAGS_H + +// AUTOJOIN, AUTOCREATE, LOG, POPULATE +// Auto-join on login, auto-create on login (non-persistent rooms), keep local +// logs, populate chat with local logs on join… + +// JCLP +// 0000 + +#define ROOM_AUTOJOIN 1 +#define ROOM_AUTOCREATE 2 +#define ROOM_LOG_LOCALLY 4 +#define ROOM_POPULATE_LOGS 8 + + +// NAME, SUBJECT, ROLECHANGE, BAN, KICK, DEAFEN, MUTE, NICK, READ, WRITE +// Set name of room, set subject, change user's "role" (permission presets +// defined by the protocol), etc… + +// NSRBKDMNRW +// 0000000000 + +#define PERM_WRITE 1 +#define PERM_READ 2 +#define PERM_NICK 4 +#define PERM_MUTE 8 +#define PERM_DEAFEN 16 +#define PERM_KICK 32 +#define PERM_BAN 64 +#define PERM_ROLECHANGE 128 +#define PERM_ROOM_SUBJECT 256 +#define PERM_ROOM_NAME 512 +#define PERM_ALL 1023 + +#endif // FLAGS_H diff --git a/application/Makefile b/application/Makefile index 81b6eee..5c74f50 100644 --- a/application/Makefile +++ b/application/Makefile @@ -38,7 +38,6 @@ SRCS = \ application/ChatCommand.cpp \ application/Contact.cpp \ application/Conversation.cpp \ - application/DefaultItems.cpp \ application/EditingFilter.cpp \ application/ImageCache.cpp \ application/Notifier.cpp \ @@ -87,6 +86,7 @@ SRCS = \ # Specify the resource definition files to use. Full or relative paths can be # used. RDEFS = Cardie.rdef \ + data/misc/Templates.rdef \ data/icons/status/Away.rdef \ data/icons/status/Busy.rdef \ data/icons/status/Offline.rdef \ diff --git a/application/Role.h b/application/Role.h index 6479e6d..b119c16 100644 --- a/application/Role.h +++ b/application/Role.h @@ -2,29 +2,12 @@ * Copyright 2021, Jaidyn Levesque * All rights reserved. Distributed under the terms of the MIT license. */ -#ifndef PERMS_H -#define PERMS_H +#ifndef _ROLE_H +#define _ROLE_H #include -// NAME, SUBJECT, ROLECHANGE, BAN, KICK, DEAFEN, MUTE, NICK, READ, WRITE -// Set name of room, set subject, change user's "role" (permission presets -// defined by the protocol), etc… - -// NSRBKDMNRW -// 0000000000 - -#define PERM_WRITE 1 -#define PERM_READ 2 -#define PERM_NICK 4 -#define PERM_MUTE 8 -#define PERM_DEAFEN 16 -#define PERM_KICK 32 -#define PERM_BAN 64 -#define PERM_ROLECHANGE 128 -#define PERM_ROOM_SUBJECT 256 -#define PERM_ROOM_NAME 512 -#define PERM_ALL 1023 +#include "Flags.h" class Role { @@ -49,6 +32,4 @@ public: // simulated in add-ons. }; - -#endif // PERMS_H - +#endif // _ROLE_H diff --git a/application/RoomFlags.h b/application/RoomFlags.h deleted file mode 100644 index 926d303..0000000 --- a/application/RoomFlags.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2021, Jaidyn Levesque - * All rights reserved. Distributed under the terms of the MIT license. - */ -#ifndef ROOMFLAGS_H -#define ROOMFLAGS_H - -#include - -// AUTOJOIN, AUTOCREATE, LOG, POPULATE -// Auto-join on login, auto-create on login (non-persistent rooms), keep local -// logs, populate chat with local logs on join… - -// JCLP -// 0000 - -#define ROOM_AUTOJOIN 1 -#define ROOM_AUTOCREATE 2 -#define ROOM_LOG_LOCALLY 4 -#define ROOM_POPULATE_LOGS 8 - - -#endif // ROOMFLAGS_H - diff --git a/application/Server.cpp b/application/Server.cpp index 619b349..b9b5a4f 100644 --- a/application/Server.cpp +++ b/application/Server.cpp @@ -30,12 +30,11 @@ #include "ChatProtocol.h" #include "AppPreferences.h" #include "ChatProtocolMessages.h" -#include "DefaultItems.h" +#include "Flags.h" #include "ImageCache.h" #include "InviteDialogue.h" #include "ProtocolLooper.h" #include "ProtocolManager.h" -#include "RoomFlags.h" #include "RosterItem.h" #include "UserInfoWindow.h" #include "Utils.h" @@ -43,13 +42,37 @@ Server::Server() : - BMessageFilter(B_ANY_DELIVERY, B_ANY_SOURCE), - fChatItems(DefaultChatPopUpItems()), - fUserItems(DefaultUserPopUpItems()) + BMessageFilter(B_ANY_DELIVERY, B_ANY_SOURCE) { - BObjectList commands = DefaultCommands(); - for (int i = 0; i < commands.CountItems(); i++) { - ChatCommand* cmd = new ChatCommand(commands.ItemAt(i)); + if (fChatItems.IsEmpty() == false || fUserItems.IsEmpty() == false + || fCommands.CountItems() > 0) + return; + + BResources* res = ChatResources(); + + // Loading user pop-up items + for (int i = 0; i < 6; i++) { + size_t size; + BMessage temp; + const void* buff = res->LoadResource(B_MESSAGE_TYPE, 1100 + i, &size); + temp.Unflatten((const char*)buff); + fUserItems.AddItem(new BMessage(temp)); + } + + // Loading room pop-up items + BMessage leave; + size_t leaveSize; + const void* leaveBuff = res->LoadResource(B_MESSAGE_TYPE, 1120, &leaveSize); + leave.Unflatten((const char*)leaveBuff); + fChatItems.AddItem(new BMessage(leave)); + + // Loading default chat commands + for (int i = 0; i < 9; i++) { + size_t size; + BMessage temp; + const void* buff = res->LoadResource(B_MESSAGE_TYPE, 1140 + i, &size); + temp.Unflatten((const char*)buff); + ChatCommand* cmd = new ChatCommand(&temp); fCommands.AddItem(cmd->GetName(), cmd); } } diff --git a/protocols/xmpp/JabberHandler.cpp b/protocols/xmpp/JabberHandler.cpp index 42088a6..94e2da7 100644 --- a/protocols/xmpp/JabberHandler.cpp +++ b/protocols/xmpp/JabberHandler.cpp @@ -18,8 +18,8 @@ #include #include +#include #include -#include #include #include