]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Move concatUrl and settingsWithGroup to Utility
authorChristian Kamm <mail@ckamm.de>
Tue, 25 Oct 2016 10:04:22 +0000 (12:04 +0200)
committerChristian Kamm <mail@ckamm.de>
Tue, 25 Oct 2016 10:05:28 +0000 (12:05 +0200)
There was little reason to keep them cluttering Account.

14 files changed:
src/gui/accountmanager.cpp
src/gui/accountstate.cpp
src/gui/creds/shibbolethcredentials.cpp
src/gui/folder.cpp
src/gui/folderman.cpp
src/gui/ocsjob.cpp
src/gui/sharemanager.cpp
src/libsync/account.cpp
src/libsync/account.h
src/libsync/creds/httpcredentials.cpp
src/libsync/networkjobs.cpp
src/libsync/utility.cpp
src/libsync/utility.h
test/testconcaturl.cpp

index 0cf8b59722317eecefe8985b94166e784c1057e9..833a7796932a976646ee6b34c3bc4193da537e66 100644 (file)
@@ -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);
index a368a21939384e1444553dca39bebbd53aaea24d..a1979c6ed140384777d5cdca9053176641bd9323 100644 (file)
@@ -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;
 }
index ab660ae397a34a54ca09167a32cd31702e18b0c2..cc34670f5f8365eedb2d077ab3dfab67d96ef39a 100644 (file)
@@ -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();
 }
index c700e4f56be74f6309eeb75441da482d9ccbf962..bc2dca76cffdcad132ca53d1484744f164e9dd36 100644 (file)
@@ -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
index da3a24e6a1dea8b37bdc8f963632b2c1a58bdad7..4eea985a0014bbb9ae30115a9566317921406770 100644 (file)
@@ -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();
index fb2b1cad78ce6edc2e1963175bad7b354cefe846..04d7dba8a0ffaba133765806705ec3d27322b6a9 100644 (file)
@@ -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);
index c407b159fd8ff1542e4cbe57f9f3c487be72a510..7aa9d71909ceb93a8b6d83d4be55246c45e8aa69 100644 (file)
@@ -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;
index 468041a665bdea64f4ec955382f45cdf2dc2b54f..7b72e27df2f4ced0de2934cf584d070f5f24c97d 100644 (file)
@@ -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) {
index 7b8917d92d92b290247a9be127bfe2851c755c96..b2fdebb83c38bd23fd4f6928a346c12542309a7a 100644 (file)
@@ -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);
index ffb9d95dd68edde59269df1a7b7d4e8105fe38c0..fc372e1f29862187a49fa5c7b091e606f2ca5489 100644 (file)
@@ -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());
 
index ab5598468562779854d9c27de341b54213569c0d..e6d5a0e06e08e2c9a0b349cac1ec2833dad5d6dd 100644 (file)
@@ -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);
index df00969c675dad6d049eac9483c05a1bedc6e1d1..f3331f0f5b9915d6c8a126c112d99b4bdda31276 100644 (file)
@@ -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
index 8d72e28459da3ee08ef9a92df6a5fa003200a7e2..56ff0ca007586b52aa2a22aff7d0049cab1793ea 100644 (file)
 #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
 
index 558344999e14b7bd9f85b56a919d1ff865cd0683..63895c4a736f70cb43eb15238c6347ad470a593d 100644 (file)
@@ -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);