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