mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-13 19:49:51 +01:00
fixed crash related to clojures in TwitchChannel
This commit is contained in:
parent
23e5100227
commit
2b88250761
|
@ -19,7 +19,7 @@ namespace messages {
|
||||||
class Message;
|
class Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Channel
|
class Channel : public std::enable_shared_from_this<Channel>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit Channel(const QString &_name);
|
explicit Channel(const QString &_name);
|
||||||
|
|
|
@ -104,7 +104,17 @@ void TwitchChannel::refreshLiveStatus()
|
||||||
|
|
||||||
QString url("https://api.twitch.tv/kraken/streams/" + this->roomID);
|
QString url("https://api.twitch.tv/kraken/streams/" + this->roomID);
|
||||||
|
|
||||||
util::twitch::get2(url, QThread::currentThread(), [this](rapidjson::Document &d) {
|
std::weak_ptr<Channel> weak = this->shared_from_this();
|
||||||
|
|
||||||
|
util::twitch::get2(url, QThread::currentThread(), [weak](rapidjson::Document &d) {
|
||||||
|
std::shared_ptr<Channel> shared = weak.lock();
|
||||||
|
|
||||||
|
if (!shared) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TwitchChannel *channel = dynamic_cast<TwitchChannel *>(shared.get());
|
||||||
|
|
||||||
if (!d.IsObject()) {
|
if (!d.IsObject()) {
|
||||||
debug::Log("[TwitchChannel:refreshLiveStatus] root is not an object");
|
debug::Log("[TwitchChannel:refreshLiveStatus] root is not an object");
|
||||||
return;
|
return;
|
||||||
|
@ -119,14 +129,14 @@ void TwitchChannel::refreshLiveStatus()
|
||||||
|
|
||||||
if (!stream.IsObject()) {
|
if (!stream.IsObject()) {
|
||||||
// Stream is offline (stream is most likely null)
|
// Stream is offline (stream is most likely null)
|
||||||
this->setLive(false);
|
channel->setLive(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!stream.HasMember("viewers") || !stream.HasMember("game") ||
|
if (!stream.HasMember("viewers") || !stream.HasMember("game") ||
|
||||||
!stream.HasMember("channel") || !stream.HasMember("created_at")) {
|
!stream.HasMember("channel") || !stream.HasMember("created_at")) {
|
||||||
debug::Log("[TwitchChannel:refreshLiveStatus] Missing members in stream");
|
debug::Log("[TwitchChannel:refreshLiveStatus] Missing members in stream");
|
||||||
this->setLive(false);
|
channel->setLive(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,15 +148,15 @@ void TwitchChannel::refreshLiveStatus()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stream is live
|
// Stream is live
|
||||||
this->streamViewerCount = QString::number(stream["viewers"].GetInt());
|
channel->streamViewerCount = QString::number(stream["viewers"].GetInt());
|
||||||
this->streamGame = stream["game"].GetString();
|
channel->streamGame = stream["game"].GetString();
|
||||||
this->streamStatus = streamChannel["status"].GetString();
|
channel->streamStatus = streamChannel["status"].GetString();
|
||||||
QDateTime since = QDateTime::fromString(stream["created_at"].GetString(), Qt::ISODate);
|
QDateTime since = QDateTime::fromString(stream["created_at"].GetString(), Qt::ISODate);
|
||||||
auto diff = since.secsTo(QDateTime::currentDateTime());
|
auto diff = since.secsTo(QDateTime::currentDateTime());
|
||||||
this->streamUptime =
|
channel->streamUptime =
|
||||||
QString::number(diff / 3600) + "h " + QString::number(diff % 3600 / 60) + "m";
|
QString::number(diff / 3600) + "h " + QString::number(diff % 3600 / 60) + "m";
|
||||||
|
|
||||||
this->setLive(true);
|
channel->setLive(true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,9 +164,19 @@ void TwitchChannel::fetchRecentMessages()
|
||||||
{
|
{
|
||||||
static QString genericURL =
|
static QString genericURL =
|
||||||
"https://tmi.twitch.tv/api/rooms/%1/recent_messages?client_id=" + getDefaultClientID();
|
"https://tmi.twitch.tv/api/rooms/%1/recent_messages?client_id=" + getDefaultClientID();
|
||||||
|
|
||||||
|
std::weak_ptr<Channel> weak = this->shared_from_this();
|
||||||
|
|
||||||
|
util::twitch::get(genericURL.arg(roomID), QThread::currentThread(), [weak](QJsonObject obj) {
|
||||||
|
std::shared_ptr<Channel> shared = weak.lock();
|
||||||
|
|
||||||
|
if (!shared) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TwitchChannel *channel = dynamic_cast<TwitchChannel *>(shared.get());
|
||||||
static auto readConnection = singletons::IrcManager::getInstance().getReadConnection();
|
static auto readConnection = singletons::IrcManager::getInstance().getReadConnection();
|
||||||
|
|
||||||
util::twitch::get(genericURL.arg(roomID), QThread::currentThread(), [=](QJsonObject obj) {
|
|
||||||
auto msgArray = obj.value("messages").toArray();
|
auto msgArray = obj.value("messages").toArray();
|
||||||
if (msgArray.size() > 0) {
|
if (msgArray.size() > 0) {
|
||||||
std::vector<messages::SharedMessage> messages;
|
std::vector<messages::SharedMessage> messages;
|
||||||
|
@ -168,10 +188,10 @@ void TwitchChannel::fetchRecentMessages()
|
||||||
auto privMsg = static_cast<Communi::IrcPrivateMessage *>(msg);
|
auto privMsg = static_cast<Communi::IrcPrivateMessage *>(msg);
|
||||||
|
|
||||||
messages::MessageParseArgs args;
|
messages::MessageParseArgs args;
|
||||||
twitch::TwitchMessageBuilder builder(this, privMsg, args);
|
twitch::TwitchMessageBuilder builder(channel, privMsg, args);
|
||||||
messages.at(i) = builder.parse();
|
messages.at(i) = builder.parse();
|
||||||
}
|
}
|
||||||
this->addMessagesAtStart(messages);
|
channel->addMessagesAtStart(messages);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue