File indexing completed on 2024-04-28 04:55:45
0001 /* 0002 This file is part of Choqok, the KDE micro-blogging client 0003 0004 SPDX-FileCopyrightText: 2017 Andrea Scarpino <scarpino@kde.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0007 */ 0008 0009 #ifndef MASTODONMICROBLOG_H 0010 #define MASTODONMICROBLOG_H 0011 0012 #include <QNetworkAccessManager> 0013 0014 #include "microblog.h" 0015 0016 class QUrl; 0017 class KJob; 0018 class MastodonAccount; 0019 class MastodonPost; 0020 0021 class MastodonMicroBlog : public Choqok::MicroBlog 0022 { 0023 Q_OBJECT 0024 public: 0025 explicit MastodonMicroBlog(QObject *parent, const QVariantList &args); 0026 virtual ~MastodonMicroBlog(); 0027 0028 virtual void aboutToUnload() override; 0029 0030 virtual ChoqokEditAccountWidget *createEditAccountWidget(Choqok::Account *account, QWidget *parent) override; 0031 0032 virtual Choqok::UI::ComposerWidget *createComposerWidget(Choqok::Account *account, QWidget *parent) override; 0033 0034 virtual void createPost(Choqok::Account *theAccount, Choqok::Post *post) override; 0035 0036 virtual Choqok::Account *createNewAccount(const QString &alias) override; 0037 0038 virtual Choqok::UI::PostWidget *createPostWidget(Choqok::Account *account, 0039 Choqok::Post *post, 0040 QWidget *parent) override; 0041 0042 virtual void fetchPost(Choqok::Account *theAccount, Choqok::Post *post) override; 0043 0044 virtual QList<Choqok::Post * > loadTimeline(Choqok::Account *account, 0045 const QString &timelineName) override; 0046 0047 virtual void removePost(Choqok::Account *theAccount, Choqok::Post *post) override; 0048 0049 virtual QString generateRepeatedByUserTooltip(const QString &username) const; 0050 0051 virtual QUrl profileUrl(Choqok::Account *account, const QString &username) const override; 0052 0053 virtual void saveTimeline(Choqok::Account *account, const QString &timelineName, 0054 const QList< Choqok::UI::PostWidget * > &timeline) override; 0055 0056 virtual Choqok::TimelineInfo *timelineInfo(const QString &timelineName) override; 0057 0058 virtual void updateTimelines(Choqok::Account *theAccount) override; 0059 0060 void createReply(Choqok::Account *theAccount, MastodonPost *post); 0061 0062 void toggleReblog(Choqok::Account *theAccount, Choqok::Post *post); 0063 0064 void toggleFavorite(Choqok::Account *theAccount, Choqok::Post *post); 0065 0066 void fetchFollowers(MastodonAccount *theAccount, bool active); 0067 0068 void fetchFollowing(MastodonAccount *theAccount, bool active); 0069 0070 static QString userNameFromAcct(const QString &acct); 0071 static QString hostFromAcct(const QString &acct); 0072 0073 Q_SIGNALS: 0074 void favorite(Choqok::Account *, Choqok::Post *); 0075 void followersUsernameListed(MastodonAccount *theAccount, const QStringList &friendsList); 0076 void followingUsernameListed(MastodonAccount *theAccount, const QStringList &friendsList); 0077 0078 public Q_SLOTS: 0079 virtual void showDirectMessageDialog(MastodonAccount *theAccount = nullptr, 0080 const QString &toUsername = QString()); 0081 0082 void slotRequestFollowersScreenNameActive(KJob *job); 0083 void slotRequestFollowersScreenNamePassive(KJob *job); 0084 0085 void slotRequestFollowingScreenNameActive(KJob *job); 0086 void slotRequestFollowingScreenNamePassive(KJob *job); 0087 0088 protected Q_SLOTS: 0089 void slotCreatePost(KJob *job); 0090 void slotFavorite(KJob *job); 0091 void slotFetchPost(KJob *job); 0092 void slotReblog(KJob *job); 0093 void slotRemovePost(KJob *job); 0094 void slotUpdateTimeline(KJob *job); 0095 0096 protected: 0097 static const QString homeTimeline; 0098 static const QString publicTimeline; 0099 static const QString favouritesTimeline; 0100 0101 QString authorizationMetaData(MastodonAccount *account) const; 0102 0103 QString lastTimelineId(Choqok::Account *theAccount, const QString &timeline) const; 0104 0105 Choqok::Post *readPost(const QVariantMap &var, Choqok::Post *post); 0106 0107 QList<Choqok::Post * > readTimeline(const QByteArray &buffer); 0108 0109 void setLastTimelineId(Choqok::Account *theAccount, const QString &timeline, 0110 const QString &id); 0111 void setTimelinesInfo(); 0112 0113 void finishRequestFollowersScreenName(KJob *job, bool active); 0114 0115 void finishRequestFollowingScreenName(KJob *job, bool active); 0116 0117 QMap<KJob *, Choqok::Account * > m_accountJobs; 0118 QMap<KJob *, Choqok::Post * > m_createPostJobs; 0119 QMap<KJob *, Choqok::Post * > m_favoriteJobs; 0120 QMap<KJob *, Choqok::Post * > m_removePostJobs; 0121 QMap<KJob *, Choqok::Post * > m_shareJobs; 0122 QMap<QString, Choqok::TimelineInfo * > m_timelinesInfos; 0123 QHash<Choqok::Account *, QMap<QString, QString> > m_timelinesLatestIds; 0124 QMap<KJob *, Choqok::Account *> mJobsAccount; 0125 QHash<QString, QString> m_timelinesPaths; 0126 QMap<KJob *, QString> m_timelinesRequests; 0127 0128 private: 0129 class Private; 0130 Private *const d; 0131 0132 }; 0133 0134 #endif // MASTODONMICROBLOG_H