diff --git a/src/providers/irc/Irc2.cpp b/src/providers/irc/Irc2.cpp index d2857b433..a0f9378ab 100644 --- a/src/providers/irc/Irc2.cpp +++ b/src/providers/irc/Irc2.cpp @@ -158,14 +158,15 @@ Irc &Irc::getInstance() int Irc::uniqueId() { - /// XXX: also check for channels int i = this->currentId_ + 1; auto it = this->servers_.find(i); + auto it2 = this->abandonedChannels_.find(i); - while (it != this->servers_.end()) + while (it != this->servers_.end() || it2 != this->abandonedChannels_.end()) { i++; it = this->servers_.find(i); + it2 = this->abandonedChannels_.find(i); } return (this->currentId_ = i); diff --git a/src/singletons/WindowManager.cpp b/src/singletons/WindowManager.cpp index bef99f77b..4adb08e74 100644 --- a/src/singletons/WindowManager.cpp +++ b/src/singletons/WindowManager.cpp @@ -4,6 +4,9 @@ #include "debug/AssertInGuiThread.hpp" #include "debug/Log.hpp" #include "messages/MessageElement.hpp" +#include "providers/irc/Irc2.hpp" +#include "providers/irc/IrcChannel2.hpp" +#include "providers/irc/IrcServer.hpp" #include "providers/twitch/TwitchServer.hpp" #include "singletons/Fonts.hpp" #include "singletons/Paths.hpp" @@ -612,6 +615,17 @@ void WindowManager::encodeChannel(IndirectChannel channel, QJsonObject &obj) obj.insert("type", "whispers"); } break; + case Channel::Type::Irc: + { + if (auto ircChannel = + dynamic_cast<IrcChannel *>(channel.get().get())) + { + obj.insert("type", "irc"); + obj.insert("server", ircChannel->server()->id()); + obj.insert("channel", ircChannel->getName()); + } + } + break; } } @@ -639,6 +653,11 @@ IndirectChannel WindowManager::decodeChannel(const QJsonObject &obj) { return app->twitch.server->whispersChannel; } + else if (type == "irc") + { + return Irc::getInstance().getOrAddChannel( + obj.value("server").toInt(-1), obj.value("channel").toString()); + } return Channel::getEmpty(); }