The complete source code of IdealIRC
http://www.idealirc.org/
67 lines
1.6 KiB
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);
|
|
}
|
|
|