mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
channels now PART when they are destroyed
This commit is contained in:
parent
f571a336e0
commit
f58ee01cf5
9 changed files with 48 additions and 24 deletions
|
@ -95,12 +95,12 @@ void AbstractIrcServer::writeConnectionMessageReceived(Communi::IrcMessage *mess
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<Channel> AbstractIrcServer::addChannel(const QString &dirtyChannelName)
|
std::shared_ptr<Channel> AbstractIrcServer::getOrAddChannel(const QString &dirtyChannelName)
|
||||||
{
|
{
|
||||||
auto channelName = this->CleanChannelName(dirtyChannelName);
|
auto channelName = this->cleanChannelName(dirtyChannelName);
|
||||||
|
|
||||||
// try get channel
|
// try get channel
|
||||||
ChannelPtr chan = this->getChannel(channelName);
|
ChannelPtr chan = this->getChannelOrEmpty(channelName);
|
||||||
if (chan != Channel::getEmpty()) {
|
if (chan != Channel::getEmpty()) {
|
||||||
return chan;
|
return chan;
|
||||||
}
|
}
|
||||||
|
@ -121,6 +121,14 @@ std::shared_ptr<Channel> AbstractIrcServer::addChannel(const QString &dirtyChann
|
||||||
|
|
||||||
debug::Log("[AbstractIrcServer::addChannel] {} was destroyed", clojuresInCppAreShit);
|
debug::Log("[AbstractIrcServer::addChannel] {} was destroyed", clojuresInCppAreShit);
|
||||||
this->channels.remove(clojuresInCppAreShit);
|
this->channels.remove(clojuresInCppAreShit);
|
||||||
|
|
||||||
|
if (this->readConnection) {
|
||||||
|
this->readConnection->sendRaw("PART #" + clojuresInCppAreShit);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->writeConnection) {
|
||||||
|
this->writeConnection->sendRaw("PART #" + clojuresInCppAreShit);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// join irc channel
|
// join irc channel
|
||||||
|
@ -139,9 +147,9 @@ std::shared_ptr<Channel> AbstractIrcServer::addChannel(const QString &dirtyChann
|
||||||
return chan;
|
return chan;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<Channel> AbstractIrcServer::getChannel(const QString &dirtyChannelName)
|
std::shared_ptr<Channel> AbstractIrcServer::getChannelOrEmpty(const QString &dirtyChannelName)
|
||||||
{
|
{
|
||||||
auto channelName = this->CleanChannelName(dirtyChannelName);
|
auto channelName = this->cleanChannelName(dirtyChannelName);
|
||||||
|
|
||||||
std::lock_guard<std::mutex> lock(this->channelMutex);
|
std::lock_guard<std::mutex> lock(this->channelMutex);
|
||||||
|
|
||||||
|
@ -214,7 +222,7 @@ std::shared_ptr<Channel> AbstractIrcServer::getCustomChannel(const QString &chan
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString AbstractIrcServer::CleanChannelName(const QString &dirtyChannelName)
|
QString AbstractIrcServer::cleanChannelName(const QString &dirtyChannelName)
|
||||||
{
|
{
|
||||||
return dirtyChannelName;
|
return dirtyChannelName;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,8 +27,8 @@ public:
|
||||||
void sendMessage(const QString &channelName, const QString &message);
|
void sendMessage(const QString &channelName, const QString &message);
|
||||||
|
|
||||||
// channels
|
// channels
|
||||||
std::shared_ptr<Channel> addChannel(const QString &dirtyChannelName);
|
std::shared_ptr<Channel> getOrAddChannel(const QString &dirtyChannelName);
|
||||||
std::shared_ptr<Channel> getChannel(const QString &dirtyChannelName);
|
std::shared_ptr<Channel> getChannelOrEmpty(const QString &dirtyChannelName);
|
||||||
|
|
||||||
// signals
|
// signals
|
||||||
pajlada::Signals::NoArgSignal connected;
|
pajlada::Signals::NoArgSignal connected;
|
||||||
|
@ -56,7 +56,7 @@ protected:
|
||||||
|
|
||||||
virtual std::shared_ptr<Channel> getCustomChannel(const QString &channelName);
|
virtual std::shared_ptr<Channel> getCustomChannel(const QString &channelName);
|
||||||
|
|
||||||
virtual QString CleanChannelName(const QString &dirtyChannelName);
|
virtual QString cleanChannelName(const QString &dirtyChannelName);
|
||||||
|
|
||||||
QMap<QString, std::weak_ptr<Channel>> channels;
|
QMap<QString, std::weak_ptr<Channel>> channels;
|
||||||
std::mutex channelMutex;
|
std::mutex channelMutex;
|
||||||
|
|
|
@ -39,7 +39,11 @@ void IrcMessageHandler::handleRoomStateMessage(Communi::IrcMessage *message)
|
||||||
|
|
||||||
QString channelName = words.at(1);
|
QString channelName = words.at(1);
|
||||||
|
|
||||||
auto channel = TwitchServer::getInstance().getChannel(channelName);
|
auto channel = TwitchServer::getInstance().getChannelOrEmpty(channelName);
|
||||||
|
|
||||||
|
if (channel->isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (auto twitchChannel = dynamic_cast<twitch::TwitchChannel *>(channel.get())) {
|
if (auto twitchChannel = dynamic_cast<twitch::TwitchChannel *>(channel.get())) {
|
||||||
// set the room id of the channel
|
// set the room id of the channel
|
||||||
|
@ -63,9 +67,9 @@ void IrcMessageHandler::handleClearChatMessage(Communi::IrcMessage *message)
|
||||||
}
|
}
|
||||||
|
|
||||||
// get channel
|
// get channel
|
||||||
auto chan = TwitchServer::getInstance().getChannel(chanName);
|
auto chan = TwitchServer::getInstance().getChannelOrEmpty(chanName);
|
||||||
|
|
||||||
if (!chan) {
|
if (chan->isEmpty()) {
|
||||||
debug::Log("[IrcMessageHandler:handleClearChatMessage] Twitch channel {} not found",
|
debug::Log("[IrcMessageHandler:handleClearChatMessage] Twitch channel {} not found",
|
||||||
chanName);
|
chanName);
|
||||||
return;
|
return;
|
||||||
|
@ -133,7 +137,11 @@ void IrcMessageHandler::handleUserStateMessage(Communi::IrcMessage *message)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto c = TwitchServer::getInstance().getChannel(channelName);
|
auto c = TwitchServer::getInstance().getChannelOrEmpty(channelName);
|
||||||
|
if (c->isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
twitch::TwitchChannel *tc = dynamic_cast<twitch::TwitchChannel *>(c.get());
|
twitch::TwitchChannel *tc = dynamic_cast<twitch::TwitchChannel *>(c.get());
|
||||||
if (tc != nullptr) {
|
if (tc != nullptr) {
|
||||||
tc->setMod(_mod == "1");
|
tc->setMod(_mod == "1");
|
||||||
|
@ -177,7 +185,12 @@ void IrcMessageHandler::handleUserNoticeMessage(Communi::IrcMessage *message)
|
||||||
|
|
||||||
void IrcMessageHandler::handleModeMessage(Communi::IrcMessage *message)
|
void IrcMessageHandler::handleModeMessage(Communi::IrcMessage *message)
|
||||||
{
|
{
|
||||||
auto channel = TwitchServer::getInstance().getChannel(message->parameter(0).remove(0, 1));
|
auto channel =
|
||||||
|
TwitchServer::getInstance().getChannelOrEmpty(message->parameter(0).remove(0, 1));
|
||||||
|
|
||||||
|
if (channel->isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (message->parameter(1) == "+o") {
|
if (message->parameter(1) == "+o") {
|
||||||
channel->modList.append(message->parameter(2));
|
channel->modList.append(message->parameter(2));
|
||||||
|
@ -200,9 +213,9 @@ void IrcMessageHandler::handleNoticeMessage(Communi::IrcNoticeMessage *message)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto channel = TwitchServer::getInstance().getChannel(channelName);
|
auto channel = TwitchServer::getInstance().getChannelOrEmpty(channelName);
|
||||||
|
|
||||||
if (!channel) {
|
if (channel->isEmpty()) {
|
||||||
debug::Log("[IrcManager:handleNoticeMessage] Channel {} not found in channel manager",
|
debug::Log("[IrcManager:handleNoticeMessage] Channel {} not found in channel manager",
|
||||||
channelName);
|
channelName);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -81,9 +81,9 @@ void TwitchServer::privateMessageReceived(IrcPrivateMessage *message)
|
||||||
}
|
}
|
||||||
|
|
||||||
this->onPrivateMessage.invoke(message);
|
this->onPrivateMessage.invoke(message);
|
||||||
auto chan = TwitchServer::getInstance().getChannel(channelName);
|
auto chan = TwitchServer::getInstance().getChannelOrEmpty(channelName);
|
||||||
|
|
||||||
if (!chan) {
|
if (chan->isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ void TwitchServer::forEachChannelAndSpecialChannels(std::function<void(ChannelPt
|
||||||
func(this->mentionsChannel);
|
func(this->mentionsChannel);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString TwitchServer::CleanChannelName(const QString &dirtyChannelName)
|
QString TwitchServer::cleanChannelName(const QString &dirtyChannelName)
|
||||||
{
|
{
|
||||||
return dirtyChannelName.toLower();
|
return dirtyChannelName.toLower();
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ protected:
|
||||||
|
|
||||||
std::shared_ptr<Channel> getCustomChannel(const QString &channelname) override;
|
std::shared_ptr<Channel> getCustomChannel(const QString &channelname) override;
|
||||||
|
|
||||||
QString CleanChannelName(const QString &dirtyChannelName) override;
|
QString cleanChannelName(const QString &dirtyChannelName) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace twitch
|
} // namespace twitch
|
||||||
|
|
|
@ -146,7 +146,7 @@ void NativeMessagingManager::ReceiverThread::handleMessage(const QJsonObject &ro
|
||||||
util::postToThread([name] {
|
util::postToThread([name] {
|
||||||
auto &ts = providers::twitch::TwitchServer::getInstance();
|
auto &ts = providers::twitch::TwitchServer::getInstance();
|
||||||
|
|
||||||
ts.watchingChannel.update(ts.addChannel(name));
|
ts.watchingChannel.update(ts.getOrAddChannel(name));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "NM unknown channel type";
|
qDebug() << "NM unknown channel type";
|
||||||
|
|
|
@ -317,7 +317,7 @@ IndirectChannel WindowManager::decodeChannel(const QJsonObject &obj)
|
||||||
{
|
{
|
||||||
QString type = obj.value("type").toString();
|
QString type = obj.value("type").toString();
|
||||||
if (type == "twitch") {
|
if (type == "twitch") {
|
||||||
return providers::twitch::TwitchServer::getInstance().addChannel(
|
return providers::twitch::TwitchServer::getInstance().getOrAddChannel(
|
||||||
obj.value("name").toString());
|
obj.value("name").toString());
|
||||||
} else if (type == "mentions") {
|
} else if (type == "mentions") {
|
||||||
return providers::twitch::TwitchServer::getInstance().mentionsChannel;
|
return providers::twitch::TwitchServer::getInstance().mentionsChannel;
|
||||||
|
|
|
@ -182,7 +182,7 @@ IndirectChannel SelectChannelDialog::getSelectedChannel() const
|
||||||
switch (this->ui.notebook->getSelectedIndex()) {
|
switch (this->ui.notebook->getSelectedIndex()) {
|
||||||
case TAB_TWITCH: {
|
case TAB_TWITCH: {
|
||||||
if (this->ui.twitch.channel->isChecked()) {
|
if (this->ui.twitch.channel->isChecked()) {
|
||||||
return providers::twitch::TwitchServer::getInstance().addChannel(
|
return providers::twitch::TwitchServer::getInstance().getOrAddChannel(
|
||||||
this->ui.twitch.channelName->text());
|
this->ui.twitch.channelName->text());
|
||||||
} else if (this->ui.twitch.watching->isChecked()) {
|
} else if (this->ui.twitch.watching->isChecked()) {
|
||||||
return providers::twitch::TwitchServer::getInstance().watchingChannel;
|
return providers::twitch::TwitchServer::getInstance().watchingChannel;
|
||||||
|
|
|
@ -64,7 +64,10 @@ AppearancePage::AppearancePage()
|
||||||
tbox.append(this->createComboBox({TIMESTAMP_FORMATS}, settings.timestampFormat));
|
tbox.append(this->createComboBox({TIMESTAMP_FORMATS}, settings.timestampFormat));
|
||||||
tbox->addStretch(1);
|
tbox->addStretch(1);
|
||||||
}
|
}
|
||||||
messages.append(this->createCheckBox("Show badges", settings.showBadges));
|
|
||||||
|
auto checkbox = this->createCheckBox("Show badges", settings.showBadges);
|
||||||
|
checkbox->setEnabled(false);
|
||||||
|
messages.append(checkbox);
|
||||||
messages.append(this->createCheckBox("Seperate messages", settings.seperateMessages));
|
messages.append(this->createCheckBox("Seperate messages", settings.seperateMessages));
|
||||||
messages.append(
|
messages.append(
|
||||||
this->createCheckBox("Show message length while typing", settings.showMessageLength));
|
this->createCheckBox("Show message length while typing", settings.showMessageLength));
|
||||||
|
|
Loading…
Reference in a new issue