The complete source code of IdealIRC http://www.idealirc.org/
 
 
 
 
idealirc/IRCClient/IRCMember.cpp

67 lines
1.6 KiB

/*
* IdealIRC Core - Internet Relay Chat API
* Copyright (C) 2021 Tom-Andre Barstad.
* This software is licensed under the Software Attribution License.
* See LICENSE for more information.
*/
#include "IRCMember.h"
#include "IRCChannel.h"
#include "Utilities.h"
#include <algorithm>
IRCMember::IRCMember(const IRCPrefix& prefix)
: m_prefix(prefix)
{}
IRCMember::IRCMember(const std::string& nickname)
: m_prefix(IRCPrefix::fromNickname(nickname))
{}
const IRCPrefix& IRCMember::prefix() const
{
return m_prefix;
}
void IRCMember::setPrefix(const IRCPrefix& prefix)
{
m_prefix = prefix;
}
const std::vector<std::weak_ptr<IRCChannel>>& IRCMember::channels()
{
return m_channels;
}
void IRCMember::addChannel(std::weak_ptr<IRCChannel> channel)
{
auto it = std::find_if(m_channels.begin(), m_channels.end(),
[channel](const std::weak_ptr<IRCChannel>& p){
if (p.expired())
return false;
else
return strEquals(p.lock()->name(), channel.lock()->name());
});
if (it == m_channels.end())
m_channels.emplace_back(channel);
}
void IRCMember::delChannel(std::weak_ptr<IRCChannel> channel)
{
auto it = std::find_if(m_channels.begin(), m_channels.end(),
[channel](const std::weak_ptr<IRCChannel>& p){
if (p.expired())
return false;
else
return strEquals(p.lock()->name(), channel.lock()->name());
});
if (it != m_channels.end())
m_channels.erase(it);
}
void IRCMember::setNickname(const std::string& nickname)
{
m_prefix.setNickname(nickname);
}