Changed how the channel live status is stored

This commit is contained in:
Rasmus Karlsson
2018-03-30 15:05:33 +02:00
committed by fourtf
parent c457651c63
commit c0a3613ae0
4 changed files with 65 additions and 28 deletions
+19 -11
View File
@@ -24,7 +24,6 @@ TwitchChannel::TwitchChannel(const QString &channelName, Communi::IrcConnection
, subscriptionURL("https://www.twitch.tv/subs/" + name)
, channelURL("https://twitch.tv/" + name)
, popoutPlayerURL("https://player.twitch.tv/?channel=" + name)
, isLive(false)
, mod(false)
, readConnecetion(_readConnection)
{
@@ -176,11 +175,16 @@ void TwitchChannel::addRecentChatter(const std::shared_ptr<messages::Message> &m
void TwitchChannel::setLive(bool newLiveStatus)
{
if (this->isLive == newLiveStatus) {
return;
{
std::lock_guard<std::mutex> lock(this->streamStatusMutex);
if (this->streamStatus.live == newLiveStatus) {
// Nothing changed
return;
}
this->streamStatus.live = newLiveStatus;
}
this->isLive = newLiveStatus;
this->onlineStatusChanged();
}
@@ -239,13 +243,17 @@ void TwitchChannel::refreshLiveStatus()
}
// Stream is live
channel->streamViewerCount = QString::number(stream["viewers"].GetInt());
channel->streamGame = stream["game"].GetString();
channel->streamStatus = streamChannel["status"].GetString();
QDateTime since = QDateTime::fromString(stream["created_at"].GetString(), Qt::ISODate);
auto diff = since.secsTo(QDateTime::currentDateTime());
channel->streamUptime =
QString::number(diff / 3600) + "h " + QString::number(diff % 3600 / 60) + "m";
{
std::lock_guard<std::mutex> lock(channel->streamStatusMutex);
channel->streamStatus.viewerCount = stream["viewers"].GetUint();
channel->streamStatus.game = stream["game"].GetString();
channel->streamStatus.title = streamChannel["status"].GetString();
QDateTime since = QDateTime::fromString(stream["created_at"].GetString(), Qt::ISODate);
auto diff = since.secsTo(QDateTime::currentDateTime());
channel->streamStatus.uptime =
QString::number(diff / 3600) + "h " + QString::number(diff % 3600 / 60) + "m";
}
channel->setLive(true);
});
+25 -5
View File
@@ -8,6 +8,8 @@
#include "singletons/ircmanager.hpp"
#include "util/concurrentmap.hpp"
#include <mutex>
namespace chatterino {
namespace providers {
namespace twitch {
@@ -20,6 +22,14 @@ class TwitchChannel final : public Channel
QTimer *chattersListTimer;
public:
struct StreamStatus {
bool live = false;
unsigned viewerCount = 0;
QString title;
QString game;
QString uptime;
};
~TwitchChannel() final;
void reloadChannelEmotes();
@@ -50,23 +60,33 @@ public:
boost::signals2::signal<void()> userStateChanged;
QString roomID;
bool isLive;
QString streamViewerCount;
QString streamStatus;
QString streamGame;
QString streamUptime;
StreamStatus GetStreamStatus() const
{
std::lock_guard<std::mutex> lock(this->streamStatusMutex);
return this->streamStatus;
}
struct NameOptions {
QString displayName;
QString localizedName;
};
bool IsLive() const
{
std::lock_guard<std::mutex> lock(this->streamStatusMutex);
return this->streamStatus.live;
}
private:
explicit TwitchChannel(const QString &channelName, Communi::IrcConnection *readConnection);
void setLive(bool newLiveStatus);
void refreshLiveStatus();
mutable std::mutex streamStatusMutex;
StreamStatus streamStatus;
void fetchRecentMessages();
boost::signals2::connection connectedConnection;