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