From bce74e963abeb96a9c335f5461611dee544abc4c Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Thu, 12 Feb 2026 12:34:14 +0100 Subject: Enhance Mastodon post actions and metadata handling for reblogs and favourites --- .../mastodonpostactions.h | 82 ++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 eventsview-plugins/eventsview-plugin-mastodon/mastodonpostactions.h (limited to 'eventsview-plugins/eventsview-plugin-mastodon/mastodonpostactions.h') diff --git a/eventsview-plugins/eventsview-plugin-mastodon/mastodonpostactions.h b/eventsview-plugins/eventsview-plugin-mastodon/mastodonpostactions.h new file mode 100644 index 0000000..cfe0c2a --- /dev/null +++ b/eventsview-plugins/eventsview-plugin-mastodon/mastodonpostactions.h @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2013-2026 Jolla Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef MASTODONPOSTACTIONS_H +#define MASTODONPOSTACTIONS_H + +#include +#include +#include +#include + +namespace Accounts { +class Account; +class Manager; +} + +namespace SignOn { +class Error; +class SessionData; +} + +class MastodonPostActions : public QObject +{ + Q_OBJECT + +public: + explicit MastodonPostActions(QObject *parent = 0); + + Q_INVOKABLE void favourite(int accountId, const QString &statusId); + Q_INVOKABLE void unfavourite(int accountId, const QString &statusId); + Q_INVOKABLE void boost(int accountId, const QString &statusId); + Q_INVOKABLE void unboost(int accountId, const QString &statusId); + +Q_SIGNALS: + void actionSucceeded(int accountId, + const QString &statusId, + const QString &action, + int favouritesCount, + int reblogsCount, + bool favourited, + bool reblogged); + void actionFailed(int accountId, + const QString &statusId, + const QString &action, + const QString &errorMessage); + +private Q_SLOTS: + void signOnResponse(const SignOn::SessionData &responseData); + void signOnError(const SignOn::Error &error); + void actionFinishedHandler(); + +private: + void performAction(int accountId, const QString &statusId, const QString &action); + void executeActionRequest(int accountId, + const QString &statusId, + const QString &action, + const QString &apiHost, + const QString &accessToken); + void releaseSignOnObjects(QObject *sessionObject); + QString actionKey(int accountId, const QString &statusId, const QString &action) const; + + Accounts::Manager *m_accountManager; + QNetworkAccessManager m_networkAccessManager; + QSet m_pendingActions; +}; + +#endif // MASTODONPOSTACTIONS_H -- cgit v1.2.3