There was little reason to keep them cluttering Account.
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()
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
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());
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();
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();
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);
std::unique_ptr<QSettings> AccountState::settings()
{
- auto s = _account->settingsWithGroup(QLatin1String("Accounts"));
+ auto s = Utility::settingsWithGroup(QLatin1String("Accounts"));
s->beginGroup(_account->id());
return s;
}
} 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*)));
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;
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"));
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();
}
QUrl Folder::remoteUrl() const
{
- return Account::concatUrlPath(_accountState->account()->davUrl(), remotePath());
+ return Utility::concatUrlPath(_accountState->account()->davUrl(), remotePath());
}
bool Folder::syncPaused() const
{
unloadAndDeleteAllFolders();
- auto settings = Account::settingsWithGroup(QLatin1String("Accounts"));
+ auto settings = Utility::settingsWithGroup(QLatin1String("Accounts"));
const auto accountsWithSettings = settings->childGroups();
if (accountsWithSettings.isEmpty()) {
int r = setupFoldersMigration();
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") {
if (!success) {
qDebug() << "Could not parse reply to"
<< _verb
- << Account::concatUrlPath(account()->url(), path())
+ << Utility::concatUrlPath(account()->url(), path())
<< _params
<< ":" << replyData;
}
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);
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;
QUrl Account::davUrl() const
{
- return concatUrlPath(url(), davPath());
+ return Utility::concatUrlPath(url(), davPath());
}
QList<QNetworkCookie> Account::lastAuthCookies() const
QNetworkReply *Account::headRequest(const QString &relPath)
{
- return headRequest(concatUrlPath(url(), relPath));
+ return headRequest(Utility::concatUrlPath(url(), relPath));
}
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)
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)
_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) {
// 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);
_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 );
}
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);
_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());
{
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);
#include "utility.h"
#include "version.h"
+#include "configfile.h"
// Note: This file must compile without QtGui
#include <QCoreApplication>
#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
#include <QDateTime>
#include <QElapsedTimer>
#include <QMap>
+#include <QUrl>
+#include <memory>
+
+class QSettings;
namespace OCC {
*/
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
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);