1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 02:27:43 +00:00

IRCClient: Add nick_without_prefix and nick_at helpers

`IRCChannelMemberListModel->nick_at` returns the nick name of a channel
member at the specified index.

`IRCClient->nick_without_prefix` returns a formatted nick name without
privilege prefix.
This commit is contained in:
Brendan Coles 2020-04-08 16:45:00 +00:00 committed by Andreas Kling
parent 66f7c8e0e8
commit 036fb4c621
5 changed files with 29 additions and 33 deletions

View file

@ -81,3 +81,8 @@ void IRCChannelMemberListModel::update()
{ {
did_update(); did_update();
} }
String IRCChannelMemberListModel::nick_at(const GUI::ModelIndex& index) const
{
return data(index, IRCChannelMemberListModel::Role::Display).to_string();
}

View file

@ -45,6 +45,7 @@ public:
virtual ColumnMetadata column_metadata(int column) const override; virtual ColumnMetadata column_metadata(int column) const override;
virtual GUI::Variant data(const GUI::ModelIndex&, Role = Role::Display) const override; virtual GUI::Variant data(const GUI::ModelIndex&, Role = Role::Display) const override;
virtual void update() override; virtual void update() override;
virtual String nick_at(const GUI::ModelIndex& index) const;
private: private:
explicit IRCChannelMemberListModel(IRCChannel&); explicit IRCChannelMemberListModel(IRCChannel&);

View file

@ -423,6 +423,14 @@ void IRCClient::handle_user_input_in_server(const String& input)
return handle_user_command(input); return handle_user_command(input);
} }
String IRCClient::nick_without_prefix(const String& nick)
{
assert(!nick.is_empty());
if (IRCClient::is_nick_prefix(nick[0]))
return nick.substring(1, nick.length() - 1);
return nick;
}
bool IRCClient::is_nick_prefix(char ch) bool IRCClient::is_nick_prefix(char ch)
{ {
switch (ch) { switch (ch) {

View file

@ -66,6 +66,7 @@ public:
static bool is_nick_prefix(char); static bool is_nick_prefix(char);
static bool is_channel_prefix(char); static bool is_channel_prefix(char);
String nick_without_prefix(const String& nick);
IRCWindow* current_window() { return aid_get_active_window(); } IRCWindow* current_window() { return aid_get_active_window(); }
const IRCWindow* current_window() const { return aid_get_active_window(); } const IRCWindow* current_window() const { return aid_get_active_window(); }

View file

@ -69,80 +69,61 @@ IRCWindow::IRCWindow(IRCClient& client, void* owner, Type type, const String& na
m_context_menu = GUI::Menu::construct(); m_context_menu = GUI::Menu::construct();
m_context_menu->add_action(GUI::Action::create("Open query", Gfx::Bitmap::load_from_file("/res/icons/16x16/irc-open-query.png"), [&](const GUI::Action&) { m_context_menu->add_action(GUI::Action::create("Open query", Gfx::Bitmap::load_from_file("/res/icons/16x16/irc-open-query.png"), [&](const GUI::Action&) {
GUI::ModelIndex new_index = member_view.selection().first(); auto nick = channel().member_model()->nick_at(member_view.selection().first());
auto nick = member_view.model()->data(new_index, IRCChannelMemberListModel::Role::Display).to_string();
if (nick.is_empty()) if (nick.is_empty())
return; return;
if (IRCClient::is_nick_prefix(nick[0])) m_client.handle_open_query_action(m_client.nick_without_prefix(nick.characters()));
nick = nick.substring(1, nick.length() - 1);
m_client.handle_open_query_action(nick.characters());
})); }));
m_context_menu->add_action(GUI::Action::create("Whois", Gfx::Bitmap::load_from_file("/res/icons/16x16/irc-whois.png"), [&](const GUI::Action&) { m_context_menu->add_action(GUI::Action::create("Whois", Gfx::Bitmap::load_from_file("/res/icons/16x16/irc-whois.png"), [&](const GUI::Action&) {
GUI::ModelIndex new_index = member_view.selection().first(); auto nick = channel().member_model()->nick_at(member_view.selection().first());
auto nick = member_view.model()->data(new_index, IRCChannelMemberListModel::Role::Display).to_string();
if (nick.is_empty()) if (nick.is_empty())
return; return;
if (IRCClient::is_nick_prefix(nick[0])) m_client.handle_whois_action(m_client.nick_without_prefix(nick.characters()));
nick = nick.substring(1, nick.length() - 1);
m_client.handle_whois_action(nick.characters());
})); }));
m_context_menu->add_separator(); m_context_menu->add_separator();
m_context_menu->add_action(GUI::Action::create("Voice", [&](const GUI::Action&) { m_context_menu->add_action(GUI::Action::create("Voice", [&](const GUI::Action&) {
GUI::ModelIndex new_index = member_view.selection().first(); auto nick = channel().member_model()->nick_at(member_view.selection().first());
auto nick = member_view.model()->data(new_index, IRCChannelMemberListModel::Role::Display).to_string();
if (nick.is_empty()) if (nick.is_empty())
return; return;
if (IRCClient::is_nick_prefix(nick[0]))
nick = nick.substring(1, nick.length() - 1);
auto input_box = GUI::InputBox::construct("Enter reason:", "Reason"); auto input_box = GUI::InputBox::construct("Enter reason:", "Reason");
m_client.handle_voice_user_action(m_name.characters(), nick.characters()); m_client.handle_voice_user_action(m_name.characters(), m_client.nick_without_prefix(nick.characters()));
})); }));
m_context_menu->add_action(GUI::Action::create("DeVoice", [&](const GUI::Action&) { m_context_menu->add_action(GUI::Action::create("DeVoice", [&](const GUI::Action&) {
GUI::ModelIndex new_index = member_view.selection().first(); auto nick = channel().member_model()->nick_at(member_view.selection().first());
auto nick = member_view.model()->data(new_index, IRCChannelMemberListModel::Role::Display).to_string();
if (nick.is_empty()) if (nick.is_empty())
return; return;
if (IRCClient::is_nick_prefix(nick[0])) m_client.handle_devoice_user_action(m_name.characters(), m_client.nick_without_prefix(nick.characters()));
nick = nick.substring(1, nick.length() - 1);
m_client.handle_devoice_user_action(m_name.characters(), nick.characters());
})); }));
m_context_menu->add_action(GUI::Action::create("Op", [&](const GUI::Action&) { m_context_menu->add_action(GUI::Action::create("Op", [&](const GUI::Action&) {
GUI::ModelIndex new_index = member_view.selection().first(); auto nick = channel().member_model()->nick_at(member_view.selection().first());
auto nick = member_view.model()->data(new_index, IRCChannelMemberListModel::Role::Display).to_string();
if (nick.is_empty()) if (nick.is_empty())
return; return;
if (IRCClient::is_nick_prefix(nick[0])) m_client.handle_op_user_action(m_name.characters(), m_client.nick_without_prefix(nick.characters()));
nick = nick.substring(1, nick.length() - 1);
m_client.handle_op_user_action(m_name.characters(), nick.characters());
})); }));
m_context_menu->add_action(GUI::Action::create("DeOp", [&](const GUI::Action&) { m_context_menu->add_action(GUI::Action::create("DeOp", [&](const GUI::Action&) {
GUI::ModelIndex new_index = member_view.selection().first(); auto nick = channel().member_model()->nick_at(member_view.selection().first());
auto nick = member_view.model()->data(new_index, IRCChannelMemberListModel::Role::Display).to_string();
if (nick.is_empty()) if (nick.is_empty())
return; return;
if (IRCClient::is_nick_prefix(nick[0])) m_client.handle_deop_user_action(m_name.characters(), m_client.nick_without_prefix(nick.characters()));
nick = nick.substring(1, nick.length() - 1);
m_client.handle_deop_user_action(m_name.characters(), nick.characters());
})); }));
m_context_menu->add_separator(); m_context_menu->add_separator();
m_context_menu->add_action(GUI::Action::create("Kick", [&](const GUI::Action&) { m_context_menu->add_action(GUI::Action::create("Kick", [&](const GUI::Action&) {
GUI::ModelIndex new_index = member_view.selection().first(); auto nick = channel().member_model()->nick_at(member_view.selection().first());
auto nick = member_view.model()->data(new_index, IRCChannelMemberListModel::Role::Display).to_string();
if (nick.is_empty()) if (nick.is_empty())
return; return;
if (IRCClient::is_nick_prefix(nick[0])) if (IRCClient::is_nick_prefix(nick[0]))
nick = nick.substring(1, nick.length() - 1); nick = nick.substring(1, nick.length() - 1);
auto input_box = GUI::InputBox::construct("Enter reason:", "Reason"); auto input_box = GUI::InputBox::construct("Enter reason:", "Reason");
if (input_box->exec() == GUI::InputBox::ExecOK) if (input_box->exec() == GUI::InputBox::ExecOK)
m_client.handle_kick_user_action(m_name.characters(), nick.characters(), input_box->text_value()); m_client.handle_kick_user_action(m_name.characters(), m_client.nick_without_prefix(nick.characters()), input_box->text_value());
})); }));
m_context_menu->popup(event.screen_position()); m_context_menu->popup(event.screen_position());