Live streams that are marked as reruns now mark a tab as yellow instead of red (#5176)

This commit is contained in:
Mm2PL 2024-02-18 17:22:53 +01:00 committed by GitHub
parent 641cb26a76
commit 5c51ec8382
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 71 additions and 5 deletions

View file

@ -32,6 +32,7 @@
- Minor: Added support for the `{input.text}` placeholder in the **Split** -> **Run a command** hotkey. (#5130) - Minor: Added support for the `{input.text}` placeholder in the **Split** -> **Run a command** hotkey. (#5130)
- Minor: Add a new Channel API for experimental plugins feature. (#5141) - Minor: Add a new Channel API for experimental plugins feature. (#5141)
- Minor: Added the ability to change the top-most status of a window regardless of the _Always on top_ setting (right click the notebook). (#5135) - Minor: Added the ability to change the top-most status of a window regardless of the _Always on top_ setting (right click the notebook). (#5135)
- Minor: Live streams that are marked as reruns now mark a tab as yellow instead of red. (#5176)
- Minor: Updated to Emoji v15.1. Google emojis are now used as the fallback instead of Twitter emojis. (#5182) - Minor: Updated to Emoji v15.1. Google emojis are now used as the fallback instead of Twitter emojis. (#5182)
- Bugfix: Fixed an issue where certain emojis did not send to Twitch chat correctly. (#4840) - Bugfix: Fixed an issue where certain emojis did not send to Twitch chat correctly. (#4840)
- Bugfix: Fixed capitalized channel names in log inclusion list not being logged. (#4848) - Bugfix: Fixed capitalized channel names in log inclusion list not being logged. (#4848)

View file

@ -328,6 +328,11 @@ bool Channel::isLive() const
return false; return false;
} }
bool Channel::isRerun() const
{
return false;
}
bool Channel::shouldIgnoreHighlights() const bool Channel::shouldIgnoreHighlights() const
{ {
return this->type_ == Type::TwitchAutomod || return this->type_ == Type::TwitchAutomod ||

View file

@ -104,6 +104,7 @@ public:
virtual bool hasModRights() const; virtual bool hasModRights() const;
virtual bool hasHighRateLimit() const; virtual bool hasHighRateLimit() const;
virtual bool isLive() const; virtual bool isLive() const;
virtual bool isRerun() const;
virtual bool shouldIgnoreHighlights() const; virtual bool shouldIgnoreHighlights() const;
virtual bool canReconnect() const; virtual bool canReconnect() const;
virtual void reconnect(); virtual void reconnect();

View file

@ -471,6 +471,15 @@ void TwitchChannel::updateStreamStatus(
status->rerun = false; status->rerun = false;
status->streamType = stream.type; status->streamType = stream.type;
for (const auto &tag : stream.tags)
{
if (QString::compare(tag, "Rerun", Qt::CaseInsensitive) == 0)
{
status->rerun = true;
status->streamType = "rerun";
break;
}
}
} }
if (this->setLive(true)) if (this->setLive(true))
{ {
@ -797,6 +806,11 @@ bool TwitchChannel::isLive() const
return this->streamStatus_.accessConst()->live; return this->streamStatus_.accessConst()->live;
} }
bool TwitchChannel::isRerun() const
{
return this->streamStatus_.accessConst()->rerun;
}
SharedAccessGuard<const TwitchChannel::StreamStatus> SharedAccessGuard<const TwitchChannel::StreamStatus>
TwitchChannel::accessStreamStatus() const TwitchChannel::accessStreamStatus() const
{ {

View file

@ -138,6 +138,7 @@ public:
const QString &popoutPlayerUrl(); const QString &popoutPlayerUrl();
int chatterCount() const; int chatterCount() const;
bool isLive() const override; bool isLive() const override;
bool isRerun() const override;
QString roomId() const; QString roomId() const;
SharedAccessGuard<const RoomModes> accessRoomModes() const; SharedAccessGuard<const RoomModes> accessRoomModes() const;
SharedAccessGuard<const StreamStatus> accessStreamStatus() const; SharedAccessGuard<const StreamStatus> accessStreamStatus() const;

View file

@ -69,6 +69,9 @@ struct HelixStream {
QString language; QString language;
QString thumbnailUrl; QString thumbnailUrl;
// This is the names, the IDs are now always empty
std::vector<QString> tags;
HelixStream() HelixStream()
: id("") : id("")
, userId("") , userId("")
@ -99,6 +102,11 @@ struct HelixStream {
, language(jsonObject.value("language").toString()) , language(jsonObject.value("language").toString())
, thumbnailUrl(jsonObject.value("thumbnail_url").toString()) , thumbnailUrl(jsonObject.value("thumbnail_url").toString())
{ {
const auto jsonTags = jsonObject.value("tags").toArray();
for (const auto &tag : jsonTags)
{
this->tags.push_back(tag.toString());
}
} }
}; };

View file

@ -327,6 +327,18 @@ void NotebookTab::setTabLocation(NotebookTabLocation location)
} }
} }
bool NotebookTab::setRerun(bool isRerun)
{
if (this->isRerun_ != isRerun)
{
this->isRerun_ = isRerun;
this->update();
return true;
}
return false;
}
bool NotebookTab::setLive(bool isLive) bool NotebookTab::setLive(bool isLive)
{ {
if (this->isLive_ != isLive) if (this->isLive_ != isLive)
@ -514,12 +526,22 @@ void NotebookTab::paintEvent(QPaintEvent *)
painter.fillRect(lineRect, lineColor); painter.fillRect(lineRect, lineColor);
// draw live indicator // draw live indicator
if (this->isLive_ && getSettings()->showTabLive) if ((this->isLive_ || this->isRerun_) && getSettings()->showTabLive)
{ {
painter.setPen(QColor(Qt::GlobalColor::red)); // Live overrides rerun
painter.setRenderHint(QPainter::Antialiasing);
QBrush b; QBrush b;
b.setColor(QColor(Qt::GlobalColor::red)); if (this->isLive_)
{
painter.setPen(QColor(Qt::GlobalColor::red));
b.setColor(QColor(Qt::GlobalColor::red));
}
else
{
painter.setPen(QColor(Qt::GlobalColor::yellow));
b.setColor(QColor(Qt::GlobalColor::yellow));
}
painter.setRenderHint(QPainter::Antialiasing);
b.setStyle(Qt::SolidPattern); b.setStyle(Qt::SolidPattern);
painter.setBrush(b); painter.setBrush(b);

View file

@ -47,6 +47,13 @@ public:
**/ **/
bool setLive(bool isLive); bool setLive(bool isLive);
/**
* @brief Sets the rerun status of this tab
*
* Returns true if the rerun status was changed, false if nothing changed.
**/
bool setRerun(bool isRerun);
/** /**
* @brief Returns true if any split in this tab is live * @brief Returns true if any split in this tab is live
**/ **/
@ -121,6 +128,7 @@ private:
QAction *highlightNewMessagesAction_; QAction *highlightNewMessagesAction_;
bool isLive_{}; bool isLive_{};
bool isRerun_{};
int growWidth_ = 0; int growWidth_ = 0;

View file

@ -926,9 +926,15 @@ void SplitContainer::refreshTabLiveStatus()
} }
bool liveStatus = false; bool liveStatus = false;
bool rerunStatus = false;
for (const auto &s : this->splits_) for (const auto &s : this->splits_)
{ {
auto c = s->getChannel(); auto c = s->getChannel();
if (c->isRerun())
{
rerunStatus = true;
continue; // reruns are also marked as live, SKIP
}
if (c->isLive()) if (c->isLive())
{ {
liveStatus = true; liveStatus = true;
@ -936,7 +942,7 @@ void SplitContainer::refreshTabLiveStatus()
} }
} }
if (this->tab_->setLive(liveStatus)) if (this->tab_->setLive(liveStatus) || this->tab_->setRerun(rerunStatus))
{ {
auto *notebook = dynamic_cast<Notebook *>(this->parentWidget()); auto *notebook = dynamic_cast<Notebook *>(this->parentWidget());
if (notebook) if (notebook)