feat(eventsub): properly unsubscribe once no more handles are interested (#5943)

This commit is contained in:
pajlada
2025-02-09 13:53:31 +01:00
committed by GitHub
parent 7dad35b7a7
commit 9527421bcd
6 changed files with 167 additions and 49 deletions
+40
View File
@@ -3334,6 +3334,46 @@ QDebug &operator<<(QDebug &dbg,
return dbg;
}
void Helix::deleteEventSubSubscription(const QString &subscriptionID,
ResultCallback<> successCallback,
FailureCallback<QString> failureCallback)
{
QUrlQuery query;
query.addQueryItem("id", subscriptionID);
this->makeDelete("eventsub/subscriptions", query)
.onSuccess([successCallback](const auto &result) {
if (result.status() != 204)
{
qCWarning(chatterinoTwitchEventSub)
<< "Success result for deleting eventsub subscription was "
<< result.formatError() << "but we expected it to be 204";
}
successCallback();
})
.onError([failureCallback](const NetworkResult &result) {
if (!result.status())
{
failureCallback(result.formatError());
return;
}
const auto obj = result.parseJson();
auto message = obj["message"].toString();
if (message.isEmpty())
{
failureCallback("Twitch internal server error");
}
else
{
failureCallback(message);
}
})
.execute();
}
NetworkRequest Helix::makeRequest(const QString &url, const QUrlQuery &urlQuery,
NetworkRequestType type)
{
+10
View File
@@ -1217,6 +1217,11 @@ public:
FailureCallback<HelixCreateEventSubSubscriptionError, QString>
failureCallback) = 0;
// https://dev.twitch.tv/docs/api/reference/#delete-eventsub-subscription
virtual void deleteEventSubSubscription(
const QString &subscriptionID, ResultCallback<> successCallback,
FailureCallback<QString> failureCallback) = 0;
virtual void update(QString clientId, QString oauthToken) = 0;
protected:
@@ -1567,6 +1572,11 @@ public:
FailureCallback<HelixCreateEventSubSubscriptionError, QString>
failureCallback) final;
// https://dev.twitch.tv/docs/api/reference/#delete-eventsub-subscription
void deleteEventSubSubscription(
const QString &subscriptionID, ResultCallback<> successCallback,
FailureCallback<QString> failureCallback) final;
void update(QString clientId, QString oauthToken) final;
static void initialize();