Added check for livestatus + tooltip.

This commit is contained in:
Cranken 2017-09-03 16:53:38 +02:00
parent 8d2e48f944
commit 5fe8ee6117
6 changed files with 62 additions and 27 deletions

View file

@ -29,6 +29,7 @@ Channel::Channel(WindowManager &_windowManager, EmoteManager &_emoteManager,
, _subLink("https://www.twitch.tv/" + name + "/subscribe?ref=in_chat_subscriber_link") , _subLink("https://www.twitch.tv/" + name + "/subscribe?ref=in_chat_subscriber_link")
, _channelLink("https://twitch.tv/" + name) , _channelLink("https://twitch.tv/" + name)
, _popoutPlayerLink("https://player.twitch.tv/?channel=" + name) , _popoutPlayerLink("https://player.twitch.tv/?channel=" + name)
, isLive(false)
// , _loggingChannel(logging::get(_name)) // , _loggingChannel(logging::get(_name))
{ {
qDebug() << "Open channel:" << this->name; qDebug() << "Open channel:" << this->name;
@ -62,26 +63,6 @@ const QString &Channel::getPopoutPlayerLink() const
return _popoutPlayerLink; return _popoutPlayerLink;
} }
bool Channel::getIsLive() const
{
return _isLive;
}
int Channel::getStreamViewerCount() const
{
return _streamViewerCount;
}
const QString &Channel::getStreamStatus() const
{
return _streamStatus;
}
const QString &Channel::getStreamGame() const
{
return _streamGame;
}
messages::LimitedQueueSnapshot<messages::SharedMessage> Channel::getMessageSnapshot() messages::LimitedQueueSnapshot<messages::SharedMessage> Channel::getMessageSnapshot()
{ {
return _messages.getSnapshot(); return _messages.getSnapshot();

View file

@ -53,6 +53,11 @@ public:
std::string roomID; std::string roomID;
const QString name; const QString name;
bool isLive;
QString streamViewerCount;
QString streamStatus;
QString streamGame;
QString streamUptime;
private: private:
// variables // variables
@ -67,10 +72,6 @@ private:
QString _channelLink; QString _channelLink;
QString _popoutPlayerLink; QString _popoutPlayerLink;
bool _isLive;
int _streamViewerCount;
QString _streamStatus;
QString _streamGame;
// std::shared_ptr<logging::Channel> _loggingChannel; // std::shared_ptr<logging::Channel> _loggingChannel;
}; };

View file

@ -282,6 +282,9 @@ void IrcManager::handleRoomStateMessage(Communi::IrcMessage *message)
if (iterator != tags.end()) { if (iterator != tags.end()) {
std::string roomID = iterator.value().toString().toStdString(); std::string roomID = iterator.value().toString().toStdString();
auto channel = QString(message->toData()).split("#").at(1);
channelManager.getChannel(channel)->roomID = roomID;
this->resources.loadChannelData(roomID); this->resources.loadChannelData(roomID);
} }
} }

View file

@ -244,6 +244,9 @@ void ChatWidget::doCloseSplit()
{ {
NotebookPage *page = static_cast<NotebookPage *>(this->parentWidget()); NotebookPage *page = static_cast<NotebookPage *>(this->parentWidget());
page->removeFromLayout(this); page->removeFromLayout(this);
QTimer* timer = this->header.findChild<QTimer*>();
timer->stop();
timer->deleteLater();
} }
void ChatWidget::doChangeChannel() void ChatWidget::doChangeChannel()

View file

@ -2,6 +2,7 @@
#include "colorscheme.hpp" #include "colorscheme.hpp"
#include "widgets/chatwidget.hpp" #include "widgets/chatwidget.hpp"
#include "widgets/notebookpage.hpp" #include "widgets/notebookpage.hpp"
#include "util/urlfetch.hpp"
#include <QByteArray> #include <QByteArray>
#include <QDrag> #include <QDrag>
@ -67,16 +68,36 @@ ChatWidgetHeader::ChatWidgetHeader(ChatWidget *_chatWidget)
this->rightLabel.setMinimumWidth(this->height()); this->rightLabel.setMinimumWidth(this->height());
this->rightLabel.getLabel().setTextFormat(Qt::RichText); this->rightLabel.getLabel().setTextFormat(Qt::RichText);
this->rightLabel.getLabel().setText("ayy"); this->rightLabel.getLabel().setText("ayy");
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, checkLive);
timer->start(60000);
} }
void ChatWidgetHeader::updateChannelText() void ChatWidgetHeader::updateChannelText()
{ {
const std::string channelName = this->chatWidget->channelName; const std::string channelName = this->chatWidget->channelName;
if (channelName.empty()) { if (channelName.empty()) {
this->channelNameLabel.setText("<no channel>"); this->channelNameLabel.setText("<no channel>");
} else { } else {
this->channelNameLabel.setText(QString::fromStdString(channelName)); if(this->chatWidget->getChannelRef()->isLive)
{
auto channel = this->chatWidget->getChannelRef();
this->channelNameLabel.setText(QString::fromStdString(channelName) + " (live)");
this->setToolTip("<style>.center { text-align: center; }</style>" \
"<p class = \"center\">" + \
channel->streamStatus + "<br><br>" + \
channel->streamGame + "<br>" \
"Live for " + channel->streamUptime + \
" with " + channel->streamViewerCount + " viewers" \
"</p>"
);
}
else
{
this->channelNameLabel.setText(QString::fromStdString(channelName));
this->setToolTip("");
}
} }
} }
@ -173,5 +194,30 @@ void ChatWidgetHeader::menuShowChangelog()
{ {
} }
void ChatWidgetHeader::checkLive()
{
auto channel = this->chatWidget->getChannelRef();
auto id = QString::fromStdString(channel->roomID);
util::twitch::get("https://api.twitch.tv/kraken/streams/" + id,[=](QJsonObject obj){
if(obj.value("stream").isNull())
{
channel->isLive = false;
this->updateChannelText();
}
else
{
channel->isLive = true;
auto stream = obj.value("stream").toObject();
channel->streamViewerCount = QString::number(stream.value("viewers").toDouble());
channel->streamGame = stream.value("game").toString();
channel->streamStatus = stream.value("channel").toObject().value("status").toString();
QDateTime since = QDateTime::fromString(stream.value("created_at").toString(),Qt::ISODate);
auto diff = since.secsTo(QDateTime::currentDateTime());
channel->streamUptime = QString::number(diff/3600) + "h " + QString::number(diff % 3600 / 60) + "m";
this->updateChannelText();
}
});
}
} // namespace widgets } // namespace widgets
} // namespace chatterino } // namespace chatterino

View file

@ -27,9 +27,9 @@ class ChatWidgetHeader : public BaseWidget
public: public:
explicit ChatWidgetHeader(ChatWidget *_chatWidget); explicit ChatWidgetHeader(ChatWidget *_chatWidget);
// Update channel text from chat widget // Update channel text from chat widget
void updateChannelText(); void updateChannelText();
void checkLive();
protected: protected:
virtual void paintEvent(QPaintEvent *) override; virtual void paintEvent(QPaintEvent *) override;
@ -66,6 +66,7 @@ public slots:
void menuReloadChannelEmotes(); void menuReloadChannelEmotes();
void menuManualReconnect(); void menuManualReconnect();
void menuShowChangelog(); void menuShowChangelog();
}; };
} // namespace widgets } // namespace widgets