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

0001 /*
0002     This file is part of Choqok, the KDE micro-blogging client
0003 
0004     SPDX-FileCopyrightText: 2013 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 #include "pumpioaccount.h"
0010 
0011 #include <KIO/AccessManager>
0012 
0013 #include "passwordmanager.h"
0014 
0015 #include "pumpiomicroblog.h"
0016 
0017 class PumpIOAccount::Private
0018 {
0019 public:
0020     QString consumerKey;
0021     QString consumerSecret;
0022     QString host;
0023     QString token;
0024     QString tokenSecret;
0025     QStringList following;
0026     QVariantList lists;
0027     PumpIOOAuth *oAuth;
0028     QStringList timelineNames;
0029 };
0030 
0031 PumpIOAccount::PumpIOAccount(PumpIOMicroBlog *parent, const QString &alias):
0032     Account(parent, alias), d(new Private)
0033 {
0034     d->host = configGroup()->readEntry("Host", QString());
0035     d->token = configGroup()->readEntry("Token", QString());
0036     d->consumerKey = configGroup()->readEntry("ConsumerKey", QString());
0037     d->consumerSecret = Choqok::PasswordManager::self()->readPassword(QStringLiteral("%1_consumerSecret").arg(alias));
0038     d->tokenSecret = Choqok::PasswordManager::self()->readPassword(QStringLiteral("%1_tokenSecret").arg(alias));
0039     d->oAuth = new PumpIOOAuth(this);
0040     d->oAuth->setToken(d->token);
0041     d->oAuth->setTokenSecret(d->tokenSecret);
0042     d->following = configGroup()->readEntry("Following", QStringList());
0043     d->lists = QVariantList();
0044     d->timelineNames = configGroup()->readEntry("Timelines", QStringList());
0045 
0046     if (d->timelineNames.isEmpty()) {
0047         d->timelineNames = microblog()->timelineNames();
0048     }
0049 
0050     parent->fetchFollowing(this);
0051     parent->fetchLists(this);
0052 
0053     setPostCharLimit(0);
0054 }
0055 
0056 PumpIOAccount::~PumpIOAccount()
0057 {
0058     d->oAuth->deleteLater();
0059     delete d;
0060 }
0061 
0062 QStringList PumpIOAccount::timelineNames() const
0063 {
0064     return d->timelineNames;
0065 }
0066 
0067 void PumpIOAccount::writeConfig()
0068 {
0069     configGroup()->writeEntry("Host", d->host);
0070     configGroup()->writeEntry("Token", d->token);
0071     configGroup()->writeEntry("ConsumerKey", d->consumerKey);
0072     Choqok::PasswordManager::self()->writePassword(QStringLiteral("%1_consumerSecret").arg(alias()),
0073             d->consumerSecret);
0074     Choqok::PasswordManager::self()->writePassword(QStringLiteral("%1_tokenSecret").arg(alias()),
0075             d->tokenSecret);
0076     configGroup()->writeEntry("Following", d->following);
0077     configGroup()->writeEntry("Timelines", d->timelineNames);
0078     //TODO: write accounts lists
0079     Choqok::Account::writeConfig();
0080 }
0081 
0082 QString PumpIOAccount::host()
0083 {
0084     return d->host;
0085 }
0086 
0087 void PumpIOAccount::setHost(const QString &host)
0088 {
0089     d->host = host;
0090 }
0091 
0092 QString PumpIOAccount::consumerKey()
0093 {
0094     return d->consumerKey;
0095 }
0096 
0097 void PumpIOAccount::setConsumerKey(const QString &consumerKey)
0098 {
0099     d->consumerKey = consumerKey;
0100 }
0101 
0102 QString PumpIOAccount::consumerSecret()
0103 {
0104     return d->consumerSecret;
0105 }
0106 
0107 void PumpIOAccount::setConsumerSecret(const QString &consumerSecret)
0108 {
0109     d->consumerSecret = consumerSecret;
0110 }
0111 
0112 QString PumpIOAccount::token()
0113 {
0114     return d->token;
0115 }
0116 
0117 void PumpIOAccount::setToken(const QString &token)
0118 {
0119     d->token = token;
0120 }
0121 
0122 QString PumpIOAccount::tokenSecret()
0123 {
0124     return d->tokenSecret;
0125 }
0126 
0127 void PumpIOAccount::setTokenSecret(const QString &tokenSecret)
0128 {
0129     d->tokenSecret = tokenSecret;
0130 }
0131 
0132 QStringList PumpIOAccount::following()
0133 {
0134     return d->following;
0135 }
0136 
0137 void PumpIOAccount::setFollowing(const QStringList following)
0138 {
0139     d->following = following;
0140     d->following.sort(Qt::CaseInsensitive);
0141     writeConfig();
0142 }
0143 
0144 QVariantList PumpIOAccount::lists()
0145 {
0146     return d->lists;
0147 }
0148 
0149 void PumpIOAccount::setLists(const QVariantList lists)
0150 {
0151     d->lists = lists;
0152     QVariantMap publicCollection;
0153     publicCollection.insert(QLatin1String("id"), PumpIOMicroBlog::PublicCollection);
0154     publicCollection.insert(QLatin1String("name"), QLatin1String("Public"));
0155     d->lists.append(publicCollection);
0156     QVariantMap followersCollection;
0157     followersCollection.insert(QLatin1String("id"), QString(d->host + QLatin1String("/api/user/") + username() + QLatin1String("/followers")));
0158     followersCollection.insert(QLatin1String("name"), QLatin1String("Followers"));
0159     d->lists.append(followersCollection);
0160 }
0161 
0162 void PumpIOAccount::setTimelineNames(const QStringList &list)
0163 {
0164     d->timelineNames.clear();
0165     for (const QString &name: list) {
0166         if (microblog()->timelineNames().contains(name)) {
0167             d->timelineNames.append(name);
0168         }
0169     }
0170 }
0171 
0172 QString PumpIOAccount::webfingerID()
0173 {
0174     return username() + QLatin1Char('@') + QString(d->host).remove(QLatin1String("https://"));
0175 }
0176 
0177 PumpIOOAuth *PumpIOAccount::oAuth()
0178 {
0179     return d->oAuth;
0180 }
0181 
0182 #include "moc_pumpioaccount.cpp"