File indexing completed on 2024-04-28 04:55:47

0001 /*
0002     This file is part of Choqok, the KDE micro-blogging client
0003 
0004     SPDX-FileCopyrightText: 2013-2014 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 PUMPIOMICROBLOG_H
0010 #define PUMPIOMICROBLOG_H
0011 
0012 #include <QNetworkAccessManager>
0013 
0014 #include "microblog.h"
0015 
0016 class QUrl;
0017 class KJob;
0018 class PumpIOAccount;
0019 class PumpIOPost;
0020 
0021 class PumpIOMicroBlog : public Choqok::MicroBlog
0022 {
0023     Q_OBJECT
0024 public:
0025     explicit PumpIOMicroBlog(QObject *parent, const QVariantList &args);
0026     virtual ~PumpIOMicroBlog();
0027 
0028     virtual void abortAllJobs(Choqok::Account *theAccount) override;
0029 
0030     virtual void abortCreatePost(Choqok::Account *theAccount, Choqok::Post *post = nullptr) override;
0031 
0032     virtual void aboutToUnload() override;
0033 
0034     virtual QMenu *createActionsMenu(Choqok::Account *theAccount,
0035                                      QWidget *parent = Choqok::UI::Global::mainWindow()) override;
0036 
0037     virtual Choqok::UI::ComposerWidget *createComposerWidget(Choqok::Account *account, QWidget *parent) override;
0038 
0039     virtual ChoqokEditAccountWidget *createEditAccountWidget(Choqok::Account *account, QWidget *parent) override;
0040 
0041     virtual Choqok::UI::MicroBlogWidget *createMicroBlogWidget(Choqok::Account *account, QWidget *parent) override;
0042 
0043     virtual Choqok::Account *createNewAccount(const QString &alias) override;
0044 
0045     virtual void createPost(Choqok::Account *theAccount, Choqok::Post *post) override;
0046 
0047     virtual Choqok::UI::PostWidget *createPostWidget(Choqok::Account *account,
0048                                                     Choqok::Post *post,
0049                                                     QWidget *parent) override;
0050 
0051     virtual void fetchPost(Choqok::Account *theAccount, Choqok::Post *post) override;
0052 
0053     virtual QList<Choqok::Post * > loadTimeline(Choqok::Account *account,
0054                                                 const QString &timelineName) override;
0055 
0056     virtual void removePost(Choqok::Account *theAccount, Choqok::Post *post) override;
0057 
0058     virtual QUrl postUrl(Choqok::Account *account, const QString &username,
0059                             const QString &postId) const override;
0060 
0061     virtual QUrl profileUrl(Choqok::Account *account, const QString &username) const override;
0062 
0063     virtual void saveTimeline(Choqok::Account *account, const QString &timelineName,
0064                               const QList< Choqok::UI::PostWidget * > &timeline) override;
0065 
0066     virtual Choqok::TimelineInfo *timelineInfo(const QString &timelineName) override;
0067 
0068     virtual void updateTimelines(Choqok::Account *theAccount) override;
0069 
0070     void createPost(Choqok::Account *theAccount, Choqok::Post *post,
0071                     const QVariantList &to, const QVariantList &cc = QVariantList());
0072 
0073     void createPostWithMedia(Choqok::Account *theAccount, Choqok::Post *post,
0074                              const QString &filePath);
0075 
0076     void createReply(Choqok::Account *theAccount, PumpIOPost *post);
0077 
0078     void fetchFollowing(Choqok::Account *theAccount);
0079 
0080     void fetchLists(Choqok::Account *theAccount);
0081 
0082     void share(Choqok::Account *theAccount, Choqok::Post *post);
0083 
0084     void toggleFavorite(Choqok::Account *theAccount, Choqok::Post *post);
0085 
0086     void fetchReplies(Choqok::Account *theAccount, const QUrl &url);
0087 
0088     static QString userNameFromAcct(const QString &acct);
0089     static QString hostFromAcct(const QString &acct);
0090 
0091     static const QString PublicCollection;
0092 
0093 Q_SIGNALS:
0094     void favorite(Choqok::Account *, Choqok::Post *);
0095     void followingFetched(Choqok::Account *);
0096     void listsFetched(Choqok::Account *);
0097 
0098 protected Q_SLOTS:
0099     void showDirectMessageDialog();
0100     void slotCreatePost(KJob *job);
0101     void slotFavorite(KJob *job);
0102     void slotFetchPost(KJob *job);
0103     void slotFetchReplies(KJob *job);
0104     void slotFollowing(KJob *job);
0105     void slotLists(KJob *job);
0106     void slotRemovePost(KJob *job);
0107     void slotShare(KJob *job);
0108     void slotUpdatePost(KJob *job);
0109     void slotUpdateTimeline(KJob *job);
0110     void slotUpload(KJob *job);
0111 
0112 protected:
0113     static const QString inboxActivity;
0114     static const QString outboxActivity;
0115 
0116     QString lastTimelineId(Choqok::Account *theAccount, const QString &timeline) const;
0117 
0118     Choqok::Post *readPost(const QVariantMap &var, Choqok::Post *post);
0119 
0120     QList<Choqok::Post * > readTimeline(const QByteArray &buffer);
0121 
0122     void setLastTimelineId(Choqok::Account *theAccount, const QString &timeline,
0123                            const QString &id);
0124 
0125     void setTimelinesInfo();
0126 
0127     void updatePost(Choqok::Account *theAccount, Choqok::Post *post);
0128 
0129     QMap<KJob *, Choqok::Account * > m_accountJobs;
0130     QMap<KJob *, Choqok::Post * > m_createPostJobs;
0131     QMap<KJob *, Choqok::Post * > m_favoriteJobs;
0132     QMap<KJob *, Choqok::Post * > m_removePostJobs;
0133     QMap<KJob *, Choqok::Post * > m_shareJobs;
0134     QMap<KJob *, Choqok::Post * > m_uploadJobs;
0135     QMap<KJob *, Choqok::Post * > m_updateJobs;
0136     QMap<QString, Choqok::TimelineInfo * > m_timelinesInfos;
0137     QHash<Choqok::Account *, QMap<QString, QString> > m_timelinesLatestIds;
0138     QHash<QString, QString> m_timelinesPaths;
0139     QMap<KJob *, QString> m_timelinesRequests;
0140 
0141 private:
0142     class Private;
0143     Private *const d;
0144 
0145 };
0146 
0147 #endif // PUMPIOMICROBLOG_H