Kaynağa Gözat

Move concatUrl and settingsWithGroup to Utility

There was little reason to keep them cluttering Account.
Christian Kamm 9 yıl önce
ebeveyn
işleme
10644d3568

+ 6 - 6
src/gui/accountmanager.cpp

@@ -44,7 +44,7 @@ AccountManager *AccountManager::instance()
 
 bool AccountManager::restore()
 {
-    auto settings = Account::settingsWithGroup(QLatin1String(accountsC));
+    auto settings = Utility::settingsWithGroup(QLatin1String(accountsC));
 
     // If there are no accounts, check the old format.
     if (settings->childGroups().isEmpty()
@@ -69,7 +69,7 @@ bool AccountManager::restore()
 bool AccountManager::restoreFromLegacySettings()
 {
     // try to open the correctly themed settings
-    auto settings = Account::settingsWithGroup(Theme::instance()->appName());
+    auto settings = Utility::settingsWithGroup(Theme::instance()->appName());
 
     // if the settings file could not be opened, the childKeys list is empty
     // then try to load settings from a very old place
@@ -120,7 +120,7 @@ bool AccountManager::restoreFromLegacySettings()
 
 void AccountManager::save(bool saveCredentials)
 {
-    auto settings = Account::settingsWithGroup(QLatin1String(accountsC));
+    auto settings = Utility::settingsWithGroup(QLatin1String(accountsC));
     settings->setValue(QLatin1String(versionC), 2);
     foreach (const auto &acc, _accounts) {
         settings->beginGroup(acc->account()->id());
@@ -136,7 +136,7 @@ void AccountManager::save(bool saveCredentials)
 void AccountManager::saveAccount(Account* a)
 {
     qDebug() << "Saving account" << a->url().toString();
-    auto settings = Account::settingsWithGroup(QLatin1String(accountsC));
+    auto settings = Utility::settingsWithGroup(QLatin1String(accountsC));
     settings->beginGroup(a->id());
     saveAccountHelper(a, *settings, false); // don't save credentials they might not have been loaded yet
     settings->endGroup();
@@ -148,7 +148,7 @@ void AccountManager::saveAccount(Account* a)
 void AccountManager::saveAccountState(AccountState* a)
 {
     qDebug() << "Saving account state" << a->account()->url().toString();
-    auto settings = Account::settingsWithGroup(QLatin1String(accountsC));
+    auto settings = Utility::settingsWithGroup(QLatin1String(accountsC));
     settings->beginGroup(a->account()->id());
     a->writeToSettings(*settings);
     settings->endGroup();
@@ -274,7 +274,7 @@ void AccountManager::deleteAccount(AccountState* account)
     auto copy = *it; // keep a reference to the shared pointer so it does not delete it just yet
     _accounts.erase(it);
 
-    auto settings = Account::settingsWithGroup(QLatin1String(accountsC));
+    auto settings = Utility::settingsWithGroup(QLatin1String(accountsC));
     settings->remove(account->account()->id());
 
     emit accountRemoved(account);

+ 1 - 1
src/gui/accountstate.cpp

@@ -306,7 +306,7 @@ void AccountState::slotCredentialsAsked(AbstractCredentials* credentials)
 
 std::unique_ptr<QSettings> AccountState::settings()
 {
-    auto s = _account->settingsWithGroup(QLatin1String("Accounts"));
+    auto s = Utility::settingsWithGroup(QLatin1String("Accounts"));
     s->beginGroup(_account->id());
     return s;
 }

+ 4 - 4
src/gui/creds/shibbolethcredentials.cpp

@@ -127,7 +127,7 @@ void ShibbolethCredentials::fetchFromKeychain()
     } else {
         _url = _account->url();
         ReadPasswordJob *job = new ReadPasswordJob(Theme::instance()->appName());
-        job->setSettings(_account->settingsWithGroup(Theme::instance()->appName(), job).release());
+        job->setSettings(Utility::settingsWithGroup(Theme::instance()->appName(), job).release());
         job->setInsecureFallback(false);
         job->setKey(keychainKey(_account->url().toString(), "shibAssertion"));
         connect(job, SIGNAL(finished(QKeychain::Job*)), SLOT(slotReadJobDone(QKeychain::Job*)));
@@ -246,7 +246,7 @@ void ShibbolethCredentials::slotReadJobDone(QKeychain::Job *job)
             addToCookieJar(_shibCookie);
         }
         // access
-        job->setSettings(_account->settingsWithGroup(Theme::instance()->appName(), job).release());
+        job->setSettings(Utility::settingsWithGroup(Theme::instance()->appName(), job).release());
 
         _ready = true;
         _stillValid = true;
@@ -305,7 +305,7 @@ QByteArray ShibbolethCredentials::shibCookieName()
 void ShibbolethCredentials::storeShibCookie(const QNetworkCookie &cookie)
 {
     WritePasswordJob *job = new WritePasswordJob(Theme::instance()->appName());
-    job->setSettings(_account->settingsWithGroup(Theme::instance()->appName(), job).release());
+    job->setSettings(Utility::settingsWithGroup(Theme::instance()->appName(), job).release());
     // we don't really care if it works...
     //connect(job, SIGNAL(finished(QKeychain::Job*)), SLOT(slotWriteJobDone(QKeychain::Job*)));
     job->setKey(keychainKey(_account->url().toString(), "shibAssertion"));
@@ -316,7 +316,7 @@ void ShibbolethCredentials::storeShibCookie(const QNetworkCookie &cookie)
 void ShibbolethCredentials::removeShibCookie()
 {
     DeletePasswordJob *job = new DeletePasswordJob(Theme::instance()->appName());
-    job->setSettings(_account->settingsWithGroup(Theme::instance()->appName(), job).release());
+    job->setSettings(Utility::settingsWithGroup(Theme::instance()->appName(), job).release());
     job->setKey(keychainKey(_account->url().toString(), "shibAssertion"));
     job->start();
 }

+ 1 - 1
src/gui/folder.cpp

@@ -225,7 +225,7 @@ QString Folder::remotePath() const
 
 QUrl Folder::remoteUrl() const
 {
-    return Account::concatUrlPath(_accountState->account()->davUrl(), remotePath());
+    return Utility::concatUrlPath(_accountState->account()->davUrl(), remotePath());
 }
 
 bool Folder::syncPaused() const

+ 1 - 1
src/gui/folderman.cpp

@@ -191,7 +191,7 @@ int FolderMan::setupFolders()
 {
     unloadAndDeleteAllFolders();
 
-    auto settings = Account::settingsWithGroup(QLatin1String("Accounts"));
+    auto settings = Utility::settingsWithGroup(QLatin1String("Accounts"));
     const auto accountsWithSettings = settings->childGroups();
     if (accountsWithSettings.isEmpty()) {
         int r = setupFoldersMigration();

+ 3 - 3
src/gui/ocsjob.cpp

@@ -66,7 +66,7 @@ void OcsJob::start()
     req.setRawHeader("Ocs-APIREQUEST", "true");
     req.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
 
-    QUrl url = Account::concatUrlPath(account()->url(), path());
+    QUrl url = Utility::concatUrlPath(account()->url(), path());
     QBuffer *buffer = new QBuffer;
 
     if (_verb == "GET") {
@@ -107,7 +107,7 @@ bool OcsJob::finished()
     if (!success) {
         qDebug() << "Could not parse reply to" 
                  << _verb 
-                 << Account::concatUrlPath(account()->url(), path()) 
+                 << Utility::concatUrlPath(account()->url(), path())
                  << _params
                  << ":" << replyData;
     }
@@ -117,7 +117,7 @@ bool OcsJob::finished()
     if (!_passStatusCodes.contains(statusCode)) {
         qDebug() << "Reply to"
                  << _verb
-                 << Account::concatUrlPath(account()->url(), path())
+                 << Utility::concatUrlPath(account()->url(), path())
                  << _params
                  << "has unexpected status code:" << statusCode << replyData;
         emit ocsError(statusCode, message);

+ 2 - 2
src/gui/sharemanager.cpp

@@ -344,12 +344,12 @@ QSharedPointer<LinkShare> ShareManager::parseLinkShare(const QVariantMap &data)
         url = QUrl(data.value("url").toString());
     } else if (_account->serverVersionInt() >= (8 << 16)) {
         // From ownCloud server version 8 on, a different share link scheme is used.
-        url = QUrl(Account::concatUrlPath(_account->url(), QString("index.php/s/%1").arg(data.value("token").toString())).toString());
+        url = QUrl(Utility::concatUrlPath(_account->url(), QString("index.php/s/%1").arg(data.value("token").toString())).toString());
     } else {
         QList<QPair<QString, QString>> queryArgs;
         queryArgs.append(qMakePair(QString("service"), QString("files")));
         queryArgs.append(qMakePair(QString("t"), data.value("token").toString()));
-        url = QUrl(Account::concatUrlPath(_account->url(), QLatin1String("public.php"), queryArgs).toString());
+        url = QUrl(Utility::concatUrlPath(_account->url(), QLatin1String("public.php"), queryArgs).toString());
     }
 
     QDate expireDate;

+ 4 - 41
src/libsync/account.cpp

@@ -132,7 +132,7 @@ void Account::setCredentials(AbstractCredentials *cred)
 
 QUrl Account::davUrl() const
 {
-    return concatUrlPath(url(), davPath());
+    return Utility::concatUrlPath(url(), davPath());
 }
 
 QList<QNetworkCookie> Account::lastAuthCookies() const
@@ -184,7 +184,7 @@ QNetworkAccessManager *Account::networkAccessManager()
 
 QNetworkReply *Account::headRequest(const QString &relPath)
 {
-    return headRequest(concatUrlPath(url(), relPath));
+    return headRequest(Utility::concatUrlPath(url(), relPath));
 }
 
 QNetworkReply *Account::headRequest(const QUrl &url)
@@ -198,7 +198,7 @@ QNetworkReply *Account::headRequest(const QUrl &url)
 
 QNetworkReply *Account::getRequest(const QString &relPath)
 {
-    return getRequest(concatUrlPath(url(), relPath));
+    return getRequest(Utility::concatUrlPath(url(), relPath));
 }
 
 QNetworkReply *Account::getRequest(const QUrl &url)
@@ -221,7 +221,7 @@ QNetworkReply *Account::deleteRequest( const QUrl &url)
 
 QNetworkReply *Account::davRequest(const QByteArray &verb, const QString &relPath, QNetworkRequest req, QIODevice *data)
 {
-    return davRequest(verb, concatUrlPath(davUrl(), relPath), req, data);
+    return davRequest(verb, Utility::concatUrlPath(davUrl(), relPath), req, data);
 }
 
 QNetworkReply *Account::davRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QIODevice *data)
@@ -315,43 +315,6 @@ void Account::setUrl(const QUrl &url)
     _url = url;
 }
 
-QUrl Account::concatUrlPath(const QUrl &url, const QString &concatPath,
-                            const QList< QPair<QString, QString> > &queryItems)
-{
-    QString path = url.path();
-    if (! concatPath.isEmpty()) {
-        // avoid '//'
-        if (path.endsWith('/') && concatPath.startsWith('/')) {
-            path.chop(1);
-        } // avoid missing '/'
-        else if (!path.endsWith('/') && !concatPath.startsWith('/')) {
-            path += QLatin1Char('/');
-        }
-        path += concatPath; // put the complete path together
-    }
-
-    QUrl tmpUrl = url;
-    tmpUrl.setPath(path);
-    if( queryItems.size() > 0 ) {
-        tmpUrl.setQueryItems(queryItems);
-    }
-    return tmpUrl;
-}
-
-QString Account::_configFileName;
-
-std::unique_ptr<QSettings> Account::settingsWithGroup(const QString& group, QObject *parent)
-{
-    if (_configFileName.isEmpty()) {
-        // cache file name
-        ConfigFile cfg;
-        _configFileName = cfg.configFile();
-    }
-    std::unique_ptr<QSettings> settings(new QSettings(_configFileName, QSettings::IniFormat, parent));
-    settings->beginGroup(group);
-    return settings;
-}
-
 QVariant Account::credentialSetting(const QString &key) const
 {
     if (_credentials) {

+ 0 - 8
src/libsync/account.h

@@ -131,14 +131,6 @@ public:
     // pluggable handler
     void setSslErrorHandler(AbstractSslErrorHandler *handler);
 
-    // static helper function
-    static QUrl concatUrlPath(const QUrl &url, const QString &concatPath,
-                              const QList< QPair<QString, QString> > &queryItems = (QList<QPair<QString, QString>>()));
-
-    /**  Returns a new settings pre-set in a specific group.  The Settings will be created
-         with the given parent. If no parent is specified, the caller must destroy the settings */
-    static std::unique_ptr<QSettings> settingsWithGroup(const QString& group, QObject* parent = 0);
-
     // to be called by credentials only
     QVariant credentialSetting(const QString& key) const;
     void setCredentialSetting(const QString& key, const QVariant &value);

+ 3 - 3
src/libsync/creds/httpcredentials.cpp

@@ -132,7 +132,7 @@ void HttpCredentials::fetchFromKeychain()
     _certificatePath = _account->credentialSetting(QLatin1String(certifPathC)).toString();
     _certificatePasswd = _account->credentialSetting(QLatin1String(certifPasswdC)).toString();
 
-    auto settings = _account->settingsWithGroup(Theme::instance()->appName());
+    auto settings = Utility::settingsWithGroup(Theme::instance()->appName());
     const QString kck = keychainKey(_account->url().toString(), _user );
 
     QString key = QString::fromLatin1( "%1/data" ).arg( kck );
@@ -214,7 +214,7 @@ void HttpCredentials::invalidateToken()
     }
 
     DeletePasswordJob *job = new DeletePasswordJob(Theme::instance()->appName());
-    auto settings = _account->settingsWithGroup(Theme::instance()->appName());
+    auto settings = Utility::settingsWithGroup(Theme::instance()->appName());
     settings->setParent(job); // make the job parent to make setting deleted properly
     job->setSettings(settings.release());
     job->setInsecureFallback(true);
@@ -265,7 +265,7 @@ void HttpCredentials::persist()
     _account->setCredentialSetting(QLatin1String(certifPathC), _certificatePath);
     _account->setCredentialSetting(QLatin1String(certifPasswdC), _certificatePasswd);
     WritePasswordJob *job = new WritePasswordJob(Theme::instance()->appName());
-    auto settings = _account->settingsWithGroup(Theme::instance()->appName());
+    auto settings = Utility::settingsWithGroup(Theme::instance()->appName());
     settings->setParent(job); // make the job parent to make setting deleted properly
     job->setSettings(settings.release());
 

+ 1 - 1
src/libsync/networkjobs.cpp

@@ -680,7 +680,7 @@ void JsonApiJob::start()
 {
     QNetworkRequest req;
     req.setRawHeader("OCS-APIREQUEST", "true");
-    QUrl url = Account::concatUrlPath(account()->url(), path());
+    QUrl url = Utility::concatUrlPath(account()->url(), path());
     QList<QPair<QString, QString> > params = _additionalParams;
     params << qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"));
     url.setQueryItems(params);

+ 38 - 0
src/libsync/utility.cpp

@@ -16,6 +16,7 @@
 #include "utility.h"
 
 #include "version.h"
+#include "configfile.h"
 
 // Note:  This file must compile without QtGui
 #include <QCoreApplication>
@@ -586,4 +587,41 @@ void Utility::sortFilenames(QStringList& fileNames)
 #endif
 }
 
+QUrl Utility::concatUrlPath(const QUrl &url, const QString &concatPath,
+                            const QList< QPair<QString, QString> > &queryItems)
+{
+    QString path = url.path();
+    if (! concatPath.isEmpty()) {
+        // avoid '//'
+        if (path.endsWith('/') && concatPath.startsWith('/')) {
+            path.chop(1);
+        } // avoid missing '/'
+        else if (!path.endsWith('/') && !concatPath.startsWith('/')) {
+            path += QLatin1Char('/');
+        }
+        path += concatPath; // put the complete path together
+    }
+
+    QUrl tmpUrl = url;
+    tmpUrl.setPath(path);
+    if( queryItems.size() > 0 ) {
+        tmpUrl.setQueryItems(queryItems);
+    }
+    return tmpUrl;
+}
+
+Q_GLOBAL_STATIC(QString, g_configFileName)
+
+std::unique_ptr<QSettings> Utility::settingsWithGroup(const QString& group, QObject *parent)
+{
+    if (g_configFileName()->isEmpty()) {
+        // cache file name
+        ConfigFile cfg;
+        *g_configFileName() = cfg.configFile();
+    }
+    std::unique_ptr<QSettings> settings(new QSettings(*g_configFileName(), QSettings::IniFormat, parent));
+    settings->beginGroup(group);
+    return settings;
+}
+
 } // namespace OCC

+ 12 - 0
src/libsync/utility.h

@@ -21,6 +21,10 @@
 #include <QDateTime>
 #include <QElapsedTimer>
 #include <QMap>
+#include <QUrl>
+#include <memory>
+
+class QSettings;
 
 namespace OCC {
 
@@ -142,6 +146,14 @@ namespace Utility
      */
     OWNCLOUDSYNC_EXPORT void sortFilenames(QStringList& fileNames);
 
+    /** Appends concatPath and queryItems to the url */
+    OWNCLOUDSYNC_EXPORT QUrl concatUrlPath(
+            const QUrl &url, const QString &concatPath,
+            const QList< QPair<QString, QString> > &queryItems = (QList<QPair<QString, QString>>()));
+
+    /**  Returns a new settings pre-set in a specific group.  The Settings will be created
+         with the given parent. If no parent is specified, the caller must destroy the settings */
+    OWNCLOUDSYNC_EXPORT std::unique_ptr<QSettings> settingsWithGroup(const QString& group, QObject* parent = 0);
 }
 /** @} */ // \addtogroup
 

+ 1 - 1
test/testconcaturl.cpp

@@ -50,7 +50,7 @@ private slots:
         QFETCH(QueryItems, query);
         QFETCH(QString, expected);
         QUrl baseUrl("http://example.com" + base);
-        QUrl resultUrl = Account::concatUrlPath(baseUrl, concat, query);
+        QUrl resultUrl = Utility::concatUrlPath(baseUrl, concat, query);
         QString result = QString::fromUtf8(resultUrl.toEncoded());
         QString expectedFull = "http://example.com" + expected;
         QCOMPARE(result, expectedFull);