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"