Display warning if token expired or no token is selected

This commit is contained in:
WarmUpTill 2024-02-08 21:15:07 +01:00 committed by WarmUpTill
parent 9c4fdc9803
commit 5cc5a3d412
7 changed files with 95 additions and 28 deletions

View File

@ -1108,6 +1108,8 @@ AdvSceneSwitcher.twitchToken.request.success.browser="Authentication successful!
AdvSceneSwitcher.twitchToken.request.notSet="Account is not connected!"
AdvSceneSwitcher.twitchToken.permissions="Token permissions:"
AdvSceneSwitcher.twitchToken.permissionsInsufficient="Permissions of selected token are insufficient to perform selected action!"
AdvSceneSwitcher.twitchToken.notValid="Selected token is invalid!"
AdvSceneSwitcher.twitchToken.noSelection="No token selected!"
AdvSceneSwitcher.twitchToken.channel.broadcast.manage="Manage a channels broadcast configuration, including updating channel configuration and managing stream markers and stream tags."
AdvSceneSwitcher.twitchToken.channel.subscriptions.read="Read channel's subscribers list and info."
AdvSceneSwitcher.twitchToken.moderator.followers.read="Read the followers of a broadcaster."

View File

@ -473,8 +473,7 @@ MacroActionTwitchEdit::MacroActionTwitchEdit(
_layout(new QHBoxLayout()),
_actions(new FilterComboBox()),
_tokens(new TwitchConnectionSelection()),
_tokenPermissionWarning(new QLabel(obs_module_text(
"AdvSceneSwitcher.twitchToken.permissionsInsufficient"))),
_tokenWarning(new QLabel()),
_streamTitle(new VariableLineEdit(this)),
_category(new TwitchCategoryWidget(this)),
_markerDescription(new VariableLineEdit(this)),
@ -496,10 +495,10 @@ MacroActionTwitchEdit::MacroActionTwitchEdit(
mainLayout->addLayout(_layout);
mainLayout->addWidget(_announcementMessage);
mainLayout->addWidget(_chatMessage);
mainLayout->addWidget(_tokenPermissionWarning);
mainLayout->addWidget(_tokenWarning);
setLayout(mainLayout);
_tokenPermissionCheckTimer.start(1000);
_tokenCheckTimer.start(1000);
UpdateEntryData();
_loading = false;
@ -541,14 +540,42 @@ void MacroActionTwitchEdit::TwitchTokenChanged(const QString &token)
emit(HeaderInfoChanged(token));
}
void MacroActionTwitchEdit::CheckTokenPermissions()
void MacroActionTwitchEdit::SetTokenWarning(bool visible, const QString &text)
{
_tokenPermissionWarning->setVisible(
_entryData && !_entryData->ActionIsSupportedByToken());
_tokenWarning->setText(text);
_tokenWarning->setVisible(visible);
adjustSize();
updateGeometry();
}
void MacroActionTwitchEdit::CheckToken()
{
if (!_entryData) {
return;
}
if (_entryData->_token.expired()) {
SetTokenWarning(
true,
obs_module_text(
"AdvSceneSwitcher.twitchToken.noSelection"));
return;
}
if (!TokenIsValid(_entryData->_token)) {
SetTokenWarning(
true, obs_module_text(
"AdvSceneSwitcher.twitchToken.notValid"));
return;
}
if (!_entryData->ActionIsSupportedByToken()) {
SetTokenWarning(
true,
obs_module_text(
"AdvSceneSwitcher.twitchToken.permissionsInsufficient"));
return;
}
SetTokenWarning(false);
}
void MacroActionTwitchEdit::StreamTitleChanged()
{
if (_loading || !_entryData) {
@ -649,8 +676,8 @@ void MacroActionTwitchEdit::SetWidgetSignalConnections()
SLOT(ActionChanged(int)));
QWidget::connect(_tokens, SIGNAL(SelectionChanged(const QString &)),
this, SLOT(TwitchTokenChanged(const QString &)));
QWidget::connect(&_tokenPermissionCheckTimer, SIGNAL(timeout()), this,
SLOT(CheckTokenPermissions()));
QWidget::connect(&_tokenCheckTimer, SIGNAL(timeout()), this,
SLOT(CheckToken()));
QWidget::connect(_streamTitle, SIGNAL(editingFinished()), this,
SLOT(StreamTitleChanged()));
QWidget::connect(_category,
@ -710,8 +737,7 @@ void MacroActionTwitchEdit::SetWidgetVisibility()
AddStretchIfNecessary(_layout);
}
_tokenPermissionWarning->setVisible(
!_entryData->ActionIsSupportedByToken());
CheckToken();
adjustSize();
updateGeometry();

View File

@ -206,7 +206,7 @@ public:
private slots:
void ActionChanged(int);
void TwitchTokenChanged(const QString &);
void CheckTokenPermissions();
void CheckToken();
void StreamTitleChanged();
void CategoreyChanged(const TwitchCategory &);
void MarkerDescriptionChanged();
@ -228,12 +228,13 @@ private:
void SetWidgetSignalConnections();
void SetWidgetLayout();
void SetWidgetVisibility();
void SetTokenWarning(bool visible, const QString &text = "");
QHBoxLayout *_layout;
FilterComboBox *_actions;
TwitchConnectionSelection *_tokens;
QLabel *_tokenPermissionWarning;
QTimer _tokenPermissionCheckTimer;
QLabel *_tokenWarning;
QTimer _tokenCheckTimer;
VariableLineEdit *_streamTitle;
TwitchCategoryWidget *_category;
VariableLineEdit *_markerDescription;

View File

@ -1194,8 +1194,7 @@ MacroConditionTwitchEdit::MacroConditionTwitchEdit(
_layout(new QHBoxLayout()),
_conditions(new FilterComboBox()),
_tokens(new TwitchConnectionSelection()),
_tokenPermissionWarning(new QLabel(obs_module_text(
"AdvSceneSwitcher.twitchToken.permissionsInsufficient"))),
_tokenWarning(new QLabel()),
_channel(new TwitchChannelSelection(this)),
_pointsReward(new TwitchPointsRewardWidget(this)),
_streamTitle(new VariableLineEdit(this)),
@ -1214,8 +1213,8 @@ MacroConditionTwitchEdit::MacroConditionTwitchEdit(
SLOT(ConditionChanged(int)));
QWidget::connect(_tokens, SIGNAL(SelectionChanged(const QString &)),
this, SLOT(TwitchTokenChanged(const QString &)));
QWidget::connect(&_tokenPermissionCheckTimer, SIGNAL(timeout()), this,
SLOT(CheckTokenPermissions()));
QWidget::connect(&_tokenCheckTimer, SIGNAL(timeout()), this,
SLOT(CheckToken()));
QWidget::connect(_channel,
SIGNAL(ChannelChanged(const TwitchChannel &)), this,
SLOT(ChannelChanged(const TwitchChannel &)));
@ -1262,10 +1261,10 @@ MacroConditionTwitchEdit::MacroConditionTwitchEdit(
chatLayout->addWidget(_regexChat);
mainLayout->addLayout(chatLayout);
mainLayout->addLayout(accountLayout);
mainLayout->addWidget(_tokenPermissionWarning);
mainLayout->addWidget(_tokenWarning);
setLayout(mainLayout);
_tokenPermissionCheckTimer.start(1000);
_tokenCheckTimer.start(1000);
_entryData = entryData;
UpdateEntryData();
@ -1309,14 +1308,43 @@ void MacroConditionTwitchEdit::TwitchTokenChanged(const QString &token)
emit(HeaderInfoChanged(token));
}
void MacroConditionTwitchEdit::CheckTokenPermissions()
void MacroConditionTwitchEdit::SetTokenWarning(bool visible,
const QString &text)
{
_tokenPermissionWarning->setVisible(
_entryData && !_entryData->ConditionIsSupportedByToken());
_tokenWarning->setText(text);
_tokenWarning->setVisible(visible);
adjustSize();
updateGeometry();
}
void MacroConditionTwitchEdit::CheckToken()
{
if (!_entryData) {
return;
}
if (_entryData->_token.expired()) {
SetTokenWarning(
true,
obs_module_text(
"AdvSceneSwitcher.twitchToken.noSelection"));
return;
}
if (!TokenIsValid(_entryData->_token)) {
SetTokenWarning(
true, obs_module_text(
"AdvSceneSwitcher.twitchToken.notValid"));
return;
}
if (!_entryData->ConditionIsSupportedByToken()) {
SetTokenWarning(
true,
obs_module_text(
"AdvSceneSwitcher.twitchToken.permissionsInsufficient"));
return;
}
SetTokenWarning(false);
}
void MacroConditionTwitchEdit::ChannelChanged(const TwitchChannel &channel)
{
if (_loading || !_entryData) {
@ -1428,8 +1456,7 @@ void MacroConditionTwitchEdit::SetWidgetVisibility()
AddStretchIfNecessary(_layout);
}
_tokenPermissionWarning->setVisible(
!_entryData->ConditionIsSupportedByToken());
CheckToken();
adjustSize();
updateGeometry();

View File

@ -151,7 +151,7 @@ public:
private slots:
void ConditionChanged(int);
void TwitchTokenChanged(const QString &);
void CheckTokenPermissions();
void CheckToken();
void ChannelChanged(const TwitchChannel &);
void PointsRewardChanged(const TwitchPointsReward &);
void StreamTitleChanged();
@ -169,12 +169,13 @@ protected:
private:
void SetWidgetVisibility();
void SetTokenWarning(bool visible, const QString &text = "");
QHBoxLayout *_layout;
FilterComboBox *_conditions;
TwitchConnectionSelection *_tokens;
QLabel *_tokenPermissionWarning;
QTimer _tokenPermissionCheckTimer;
QLabel *_tokenWarning;
QTimer _tokenCheckTimer;
TwitchChannelSelection *_channel;
TwitchPointsRewardWidget *_pointsReward;
VariableLineEdit *_streamTitle;

View File

@ -342,6 +342,15 @@ std::string GetWeakTwitchTokenName(std::weak_ptr<TwitchToken> token)
return con->Name();
}
bool TokenIsValid(const std::weak_ptr<TwitchToken> &token_)
{
auto token = token_.lock();
if (!token) {
return false;
}
return token->IsValid();
}
static bool ConnectionNameAvailable(const QString &name)
{
return !GetTwitchTokenByName(name);

View File

@ -151,6 +151,7 @@ TwitchToken *GetTwitchTokenByName(const std::string &);
std::weak_ptr<TwitchToken> GetWeakTwitchTokenByName(const std::string &name);
std::weak_ptr<TwitchToken> GetWeakTwitchTokenByQString(const QString &name);
std::string GetWeakTwitchTokenName(std::weak_ptr<TwitchToken>);
bool TokenIsValid(const std::weak_ptr<TwitchToken> &token);
} // namespace advss