File indexing completed on 2024-05-05 04:57:14

0001 /*
0002     This file is part of Choqok, the KDE micro-blogging client
0003 
0004     SPDX-FileCopyrightText: 2008-2012 Mehrdad Momeny <mehrdad.momeny@gmail.com>
0005 
0006     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0007 */
0008 
0009 #ifndef GNUSOCIALAPIMICROBLOGPLUGIN_H
0010 #define GNUSOCIALAPIMICROBLOGPLUGIN_H
0011 
0012 #include <QPointer>
0013 
0014 #include "gnusocialapihelper_export.h"
0015 
0016 #include "twitterapimicroblog.h"
0017 
0018 class GNUSocialApiSearch;
0019 class KJob;
0020 
0021 /**
0022 This plugin is to GNU social service.
0023 
0024 @Note GNU social was called StatusNet and Laconcia previously, So I just renamed it on UI :D
0025 
0026 @author Mehrdad Momeny \<mehrdad.momeny@gmail.com\>
0027 */
0028 class GNUSOCIALAPIHELPER_EXPORT GNUSocialApiMicroBlog : public TwitterApiMicroBlog
0029 {
0030     Q_OBJECT
0031 public:
0032     GNUSocialApiMicroBlog(const QString &componentName, QObject *parent);
0033     ~GNUSocialApiMicroBlog();
0034 
0035     virtual Choqok::Account *createNewAccount(const QString &alias) override;
0036     virtual Choqok::UI::MicroBlogWidget *createMicroBlogWidget(Choqok::Account *account, QWidget *parent) override;
0037     virtual Choqok::UI::TimelineWidget *createTimelineWidget(Choqok::Account *account,
0038                                                              const QString &timelineName, QWidget *parent) override;
0039     virtual Choqok::UI::PostWidget *createPostWidget(Choqok::Account *account, Choqok::Post *post, QWidget *parent) override;
0040     virtual Choqok::UI::ComposerWidget *createComposerWidget(Choqok::Account *account, QWidget *parent) override;
0041     virtual QUrl profileUrl(Choqok::Account *account, const QString &username) const override;
0042     virtual QUrl postUrl(Choqok::Account *account, const QString &username, const QString &postId) const override;
0043 
0044     virtual TwitterApiSearch *searchBackend() override;
0045 
0046     void createPostWithAttachment(Choqok::Account *theAccount, Choqok::Post *post,
0047                                           const QString &mediumToAttach = QString());
0048     virtual QString generateRepeatedByUserTooltip(const QString &username) override;
0049     virtual QString repeatQuestion() override;
0050 
0051     void fetchConversation(Choqok::Account *theAccount, const QString &conversationId);
0052 
0053     virtual void requestFriendsScreenName(TwitterApiAccount *theAccount, bool active) override;
0054 
0055     virtual void showDirectMessageDialog(TwitterApiAccount *theAccount = nullptr, const QString &toUsername = QString()) override;
0056 
0057     static QString usernameFromProfileUrl(const QString &profileUrl);
0058     static QString hostFromProfileUrl(const QString &profileUrl);
0059 
0060 Q_SIGNALS:
0061     void conversationFetched(Choqok::Account *theAccount, const QString &conversationId,
0062                              QList<Choqok::Post *> posts);
0063 
0064 protected:
0065     using TwitterApiMicroBlog::readPost;
0066     virtual Choqok::Post *readPost(Choqok::Account *account, const QVariantMap &var, Choqok::Post *post) override;
0067     virtual void listFriendsUsername(TwitterApiAccount *theAccount, bool active = false) override;
0068     virtual QStringList readFriendsScreenName(Choqok::Account *theAccount, const QByteArray &buffer) override;
0069 
0070 protected Q_SLOTS:
0071     void slotFetchConversation(KJob *job);
0072     void slotRequestFriendsScreenName(KJob *job);
0073 
0074 private:
0075     void doRequestFriendsScreenName(TwitterApiAccount *theAccount, int page);
0076 
0077     QMap<KJob *, QString> mFetchConversationMap;
0078     QPointer<GNUSocialApiSearch> mSearchBackend;
0079     int friendsPage;
0080 };
0081 
0082 #endif