Merge pull request #7436 from nextcloud/bugfix/accounts2

Fix adding account and skipping folder configuration crash.
This commit is contained in:
Matthieu Gallien 2024-11-22 11:02:37 +01:00 committed by GitHub
commit 408955e5b3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 142 additions and 143 deletions

View file

@ -123,7 +123,7 @@ AccountManager::AccountsRestoreResult AccountManager::restore(const bool alsoRes
if (const auto acc = loadAccountHelper(*settings)) {
acc->_id = accountId;
const auto accState = new AccountState(acc);
const auto jar = qobject_cast<CookieJar*>(acc->_am->cookieJar());
const auto jar = qobject_cast<CookieJar*>(acc->_networkAccessManager->cookieJar());
Q_ASSERT(jar);
if (jar) {
jar->restore(acc->cookieJarPath());
@ -305,12 +305,12 @@ void AccountManager::save(bool saveCredentials)
qCInfo(lcAccountManager) << "Saved all account settings, status:" << settings->status();
}
void AccountManager::saveAccount(Account *a)
void AccountManager::saveAccount(Account *newAccountData)
{
qCDebug(lcAccountManager) << "Saving account" << a->url().toString();
qCDebug(lcAccountManager) << "Saving account" << newAccountData->url().toString();
const auto settings = ConfigFile::settingsWithGroup(QLatin1String(accountsC));
settings->beginGroup(a->id());
saveAccountHelper(a, *settings, false); // don't save credentials they might not have been loaded yet
settings->beginGroup(newAccountData->id());
saveAccountHelper(newAccountData, *settings, false); // don't save credentials they might not have been loaded yet
settings->endGroup();
settings->sync();
@ -328,36 +328,36 @@ void AccountManager::saveAccountState(AccountState *a)
qCDebug(lcAccountManager) << "Saved account state settings, status:" << settings->status();
}
void AccountManager::saveAccountHelper(Account *acc, QSettings &settings, bool saveCredentials)
void AccountManager::saveAccountHelper(Account *account, QSettings &settings, bool saveCredentials)
{
qCDebug(lcAccountManager) << "Saving settings to" << settings.fileName();
settings.setValue(QLatin1String(versionC), maxAccountVersion);
settings.setValue(QLatin1String(urlC), acc->_url.toString());
settings.setValue(QLatin1String(davUserC), acc->_davUser);
settings.setValue(QLatin1String(displayNameC), acc->_displayName);
settings.setValue(QLatin1String(serverVersionC), acc->_serverVersion);
settings.setValue(QLatin1String(serverColorC), acc->_serverColor);
settings.setValue(QLatin1String(serverTextColorC), acc->_serverTextColor);
settings.setValue(QLatin1String(serverHasValidSubscriptionC), acc->serverHasValidSubscription());
settings.setValue(QLatin1String(urlC), account->_url.toString());
settings.setValue(QLatin1String(davUserC), account->_davUser);
settings.setValue(QLatin1String(displayNameC), account->davDisplayName());
settings.setValue(QLatin1String(serverVersionC), account->_serverVersion);
settings.setValue(QLatin1String(serverColorC), account->_serverColor);
settings.setValue(QLatin1String(serverTextColorC), account->_serverTextColor);
settings.setValue(QLatin1String(serverHasValidSubscriptionC), account->serverHasValidSubscription());
if (!acc->_skipE2eeMetadataChecksumValidation) {
if (!account->_skipE2eeMetadataChecksumValidation) {
settings.remove(QLatin1String(skipE2eeMetadataChecksumValidationC));
} else {
settings.setValue(QLatin1String(skipE2eeMetadataChecksumValidationC), acc->_skipE2eeMetadataChecksumValidation);
settings.setValue(QLatin1String(skipE2eeMetadataChecksumValidationC), account->_skipE2eeMetadataChecksumValidation);
}
settings.setValue(networkProxySettingC, static_cast<std::underlying_type_t<Account::AccountNetworkProxySetting>>(acc->networkProxySetting()));
settings.setValue(networkProxyTypeC, acc->proxyType());
settings.setValue(networkProxyHostNameC, acc->proxyHostName());
settings.setValue(networkProxyPortC, acc->proxyPort());
settings.setValue(networkProxyNeedsAuthC, acc->proxyNeedsAuth());
settings.setValue(networkProxyUserC, acc->proxyUser());
settings.setValue(networkUploadLimitSettingC, static_cast<std::underlying_type_t<Account::AccountNetworkTransferLimitSetting>>(acc->uploadLimitSetting()));
settings.setValue(networkDownloadLimitSettingC, static_cast<std::underlying_type_t<Account::AccountNetworkTransferLimitSetting>>(acc->downloadLimitSetting()));
settings.setValue(networkUploadLimitC, acc->uploadLimit());
settings.setValue(networkDownloadLimitC, acc->downloadLimit());
settings.setValue(networkProxySettingC, static_cast<std::underlying_type_t<Account::AccountNetworkProxySetting>>(account->networkProxySetting()));
settings.setValue(networkProxyTypeC, account->proxyType());
settings.setValue(networkProxyHostNameC, account->proxyHostName());
settings.setValue(networkProxyPortC, account->proxyPort());
settings.setValue(networkProxyNeedsAuthC, account->proxyNeedsAuth());
settings.setValue(networkProxyUserC, account->proxyUser());
settings.setValue(networkUploadLimitSettingC, static_cast<std::underlying_type_t<Account::AccountNetworkTransferLimitSetting>>(account->uploadLimitSetting()));
settings.setValue(networkDownloadLimitSettingC, static_cast<std::underlying_type_t<Account::AccountNetworkTransferLimitSetting>>(account->downloadLimitSetting()));
settings.setValue(networkUploadLimitC, account->uploadLimit());
settings.setValue(networkDownloadLimitC, account->downloadLimit());
const auto proxyPasswordKey = QString(acc->userIdAtHostWithPort() + networkProxyPasswordKeychainKeySuffixC);
if (const auto proxyPassword = acc->proxyPassword(); proxyPassword.isEmpty()) {
const auto proxyPasswordKey = QString(account->userIdAtHostWithPort() + networkProxyPasswordKeychainKeySuffixC);
if (const auto proxyPassword = account->proxyPassword(); proxyPassword.isEmpty()) {
const auto job = new QKeychain::DeletePasswordJob(Theme::instance()->appName(), this);
job->setKey(proxyPasswordKey);
connect(job, &QKeychain::Job::finished, this, [](const QKeychain::Job *const incomingJob) {
@ -384,27 +384,27 @@ void AccountManager::saveAccountHelper(Account *acc, QSettings &settings, bool s
job->start();
}
if (acc->_credentials) {
if (account->_credentials) {
if (saveCredentials) {
// Only persist the credentials if the parameter is set, on migration from 1.8.x
// we want to save the accounts but not overwrite the credentials
// (This is easier than asynchronously fetching the credentials from keychain and then
// re-persisting them)
acc->_credentials->persist();
account->_credentials->persist();
}
const auto settingsMapKeys = acc->_settingsMap.keys();
const auto settingsMapKeys = account->_settingsMap.keys();
for (const auto &key : settingsMapKeys) {
if (!acc->_settingsMap.value(key).isValid()) {
if (!account->_settingsMap.value(key).isValid()) {
continue;
}
settings.setValue(key, acc->_settingsMap.value(key));
settings.setValue(key, account->_settingsMap.value(key));
}
settings.setValue(QLatin1String(authTypeC), acc->_credentials->authType());
settings.setValue(QLatin1String(authTypeC), account->_credentials->authType());
// HACK: Save http_user also as user
const auto settingsMap = acc->_settingsMap;
const auto settingsMap = account->_settingsMap;
if (settingsMap.contains(httpUserC) && settingsMap.value(httpUserC).isValid()) {
settings.setValue(userC, settingsMap.value(httpUserC));
}
@ -412,9 +412,9 @@ void AccountManager::saveAccountHelper(Account *acc, QSettings &settings, bool s
// Save accepted certificates.
settings.beginGroup(QLatin1String(generalC));
qCInfo(lcAccountManager) << "Saving " << acc->approvedCerts().count() << " unknown certs.";
qCInfo(lcAccountManager) << "Saving " << account->approvedCerts().count() << " unknown certs.";
QByteArray certs;
const auto approvedCerts = acc->approvedCerts();
const auto approvedCerts = account->approvedCerts();
for (const auto &cert : approvedCerts) {
certs += cert.toPem() + '\n';
}
@ -424,13 +424,13 @@ void AccountManager::saveAccountHelper(Account *acc, QSettings &settings, bool s
settings.endGroup();
// Save cookies.
if (acc->_am) {
auto *jar = qobject_cast<CookieJar *>(acc->_am->cookieJar());
if (account->_networkAccessManager) {
const auto jar = qobject_cast<CookieJar *>(account->_networkAccessManager->cookieJar());
if (jar) {
qCInfo(lcAccountManager) << "Saving cookies." << acc->cookieJarPath();
if (!jar->save(acc->cookieJarPath()))
qCInfo(lcAccountManager) << "Saving cookies." << account->cookieJarPath();
if (!jar->save(account->cookieJarPath()))
{
qCWarning(lcAccountManager) << "Failed to save cookies to" << acc->cookieJarPath();
qCWarning(lcAccountManager) << "Failed to save cookies to" << account->cookieJarPath();
}
}
}
@ -498,7 +498,7 @@ AccountPtr AccountManager::loadAccountHelper(QSettings &settings)
acc->_davUser = settings.value(QLatin1String(davUserC)).toString();
acc->_settingsMap.insert(QLatin1String(userC), settings.value(userC));
acc->_displayName = settings.value(QLatin1String(displayNameC), "").toString();
acc->setDavDisplayName(settings.value(QLatin1String(displayNameC), "").toString());
const QString authTypePrefix = authType + "_";
const auto settingsChildKeys = settings.childKeys();
for (const auto &key : settingsChildKeys) {

View file

@ -91,8 +91,8 @@ public:
static void backwardMigrationSettingsKeys(QStringList *deleteKeys, QStringList *ignoreKeys);
public slots:
/// Saves account data, not including the credentials
void saveAccount(OCC::Account *a);
/// Saves account data when adding user, when updating e.g. dav user, not including the credentials
void saveAccount(OCC::Account *newAccountData);
/// Saves account state data, not including the account
void saveAccountState(OCC::AccountState *a);

View file

@ -202,8 +202,10 @@ void AccountState::signOutByUi()
void AccountState::freshConnectionAttempt()
{
if (isConnected())
if (isConnected()) {
setState(Disconnected);
}
checkConnectivity();
}

View file

@ -365,7 +365,7 @@ Application::Application(int &argc, char **argv)
}
_theme->setSystrayUseMonoIcons(ConfigFile().monoIcons());
connect(_theme, &Theme::systrayUseMonoIconsChanged, this, &Application::slotUseMonoIconsChanged);
connect(_theme, &Theme::systrayUseMonoIconsChanged, _gui, &ownCloudGui::slotComputeOverallSyncStatus);
connect(this, &Application::systemPaletteChanged,
_theme, &Theme::systemPaletteHasChanged);
@ -589,7 +589,7 @@ void Application::slotAccountStateRemoved(AccountState *accountState)
{
if (_gui) {
disconnect(accountState, &AccountState::stateChanged,
_gui.data(), &ownCloudGui::slotAccountStateChanged);
_gui.data(), &ownCloudGui::slotComputeOverallSyncStatus);
disconnect(accountState->account().data(), &Account::serverVersionChanged,
_gui.data(), &ownCloudGui::slotTrayMessageIfServerUnsupported);
}
@ -611,7 +611,7 @@ void Application::slotAccountStateRemoved(AccountState *accountState)
void Application::slotAccountStateAdded(AccountState *accountState)
{
connect(accountState, &AccountState::stateChanged,
_gui.data(), &ownCloudGui::slotAccountStateChanged);
_gui.data(), &ownCloudGui::slotComputeOverallSyncStatus);
connect(accountState->account().data(), &Account::serverVersionChanged,
_gui.data(), &ownCloudGui::slotTrayMessageIfServerUnsupported);
connect(accountState, &AccountState::termsOfServiceChanged,
@ -716,11 +716,6 @@ void Application::setupLogging()
qCInfo(lcApplication) << "Arguments:" << qApp->arguments();
}
void Application::slotUseMonoIconsChanged(bool)
{
_gui->slotComputeOverallSyncStatus();
}
void Application::slotParseMessage(const QString &msg, QObject *)
{
if (msg.startsWith(QLatin1String("MSG_PARSEOPTIONS:"))) {

View file

@ -101,7 +101,6 @@ signals:
protected slots:
void slotParseMessage(const QString &, QObject *);
void slotCheckConnection();
void slotUseMonoIconsChanged(bool);
void slotCleanup();
void slotAccountStateAdded(OCC::AccountState *accountState);
void slotAccountStateRemoved(OCC::AccountState *accountState);

View file

@ -118,6 +118,8 @@ ownCloudGui::ownCloudGui(Application *parent)
FolderMan *folderMan = FolderMan::instance();
connect(folderMan, &FolderMan::folderSyncStateChange, this, &ownCloudGui::slotSyncStateChange);
connect(folderMan, &FolderMan::folderSyncStateChange, this, &ownCloudGui::slotComputeOverallSyncStatus);
#ifdef BUILD_FILE_PROVIDER_MODULE
connect(Mac::FileProvider::instance()->socketServer(), &Mac::FileProviderSocketServer::syncStateChanged, this, &ownCloudGui::slotComputeOverallSyncStatus);
@ -240,8 +242,6 @@ void ownCloudGui::slotTrayClicked(QSystemTrayIcon::ActivationReason reason)
void ownCloudGui::slotSyncStateChange(Folder *folder)
{
slotComputeOverallSyncStatus();
if (!folder) {
return; // Valid, just a general GUI redraw was needed.
}
@ -258,21 +258,11 @@ void ownCloudGui::slotSyncStateChange(Folder *folder)
}
}
void ownCloudGui::slotFoldersChanged()
{
slotComputeOverallSyncStatus();
}
void ownCloudGui::slotOpenPath(const QString &path)
{
showInFileManager(path);
}
void ownCloudGui::slotAccountStateChanged()
{
slotComputeOverallSyncStatus();
}
void ownCloudGui::slotTrayMessageIfServerUnsupported(Account *account)
{
if (account->serverVersionUnsupported()) {
@ -371,7 +361,7 @@ void ownCloudGui::slotComputeOverallSyncStatus()
#else
QStringList messages;
messages.append(tr("Disconnected from accounts:"));
for (const auto &accountState : problemAccounts) {
for (const auto &accountState : qAsConst(problemAccounts)) {
QString message = tr("Account %1: %2").arg(accountState->account()->displayName(), accountState->stateString(accountState->state()));
if (!accountState->connectionErrors().empty()) {
message += QLatin1String("\n");

View file

@ -79,7 +79,6 @@ public slots:
void slotFolderOpenAction(const QString &alias);
void slotUpdateProgress(const QString &folder, const OCC::ProgressInfo &progress);
void slotShowGuiMessage(const QString &title, const QString &message);
void slotFoldersChanged();
void slotShowSettings();
void slotShowSyncProtocol();
void slotShutdown();
@ -92,7 +91,6 @@ public slots:
void slotSettingsDialogActivated();
void slotHelp();
void slotOpenPath(const QString &path);
void slotAccountStateChanged();
void slotTrayMessageIfServerUnsupported(OCC::Account *account);
void slotNeedToAcceptTermsOfService(OCC::AccountPtr account,
OCC::AccountState::State state);

View file

@ -66,7 +66,7 @@ OwncloudSetupWizard::~OwncloudSetupWizard()
_ocWizard->deleteLater();
}
static QPointer<OwncloudSetupWizard> wiz = nullptr;
static QPointer<OwncloudSetupWizard> owncloudSetupWizard = nullptr;
void OwncloudSetupWizard::runWizard(QObject *obj, const char *amember, QWidget *parent)
{
@ -78,25 +78,26 @@ void OwncloudSetupWizard::runWizard(QObject *obj, const char *amember, QWidget *
Theme::instance()->setStartLoginFlowAutomatically(true);
}
if (!wiz.isNull()) {
if (!owncloudSetupWizard.isNull()) {
bringWizardToFrontIfVisible();
return;
}
wiz = new OwncloudSetupWizard(parent);
connect(wiz, SIGNAL(ownCloudWizardDone(int)), obj, amember);
connect(wiz->_ocWizard, &OwncloudWizard::wizardClosed, obj, [] { wiz.clear(); });
owncloudSetupWizard = new OwncloudSetupWizard(parent);
connect(owncloudSetupWizard, SIGNAL(ownCloudWizardDone(int)), obj, amember);
connect(owncloudSetupWizard->_ocWizard, &OwncloudWizard::wizardClosed, obj, [] { owncloudSetupWizard.clear(); });
FolderMan::instance()->setSyncEnabled(false);
wiz->startWizard();
owncloudSetupWizard->startWizard();
}
bool OwncloudSetupWizard::bringWizardToFrontIfVisible()
{
if (wiz.isNull()) {
if (owncloudSetupWizard.isNull()) {
return false;
}
ownCloudGui::raiseDialog(wiz->_ocWizard);
ownCloudGui::raiseDialog(owncloudSetupWizard->_ocWizard);
return true;
}
@ -700,7 +701,7 @@ void OwncloudSetupWizard::slotAssistantFinished(int result)
}
// notify others.
_ocWizard->done(QWizard::Accepted);
_ocWizard->done(result);
emit ownCloudWizardDone(result);
}
@ -710,7 +711,10 @@ void OwncloudSetupWizard::slotSkipFolderConfiguration()
disconnect(_ocWizard, &OwncloudWizard::basicSetupFinished,
this, &OwncloudSetupWizard::slotAssistantFinished);
_ocWizard->close();
_ocWizard->done(QDialog::Rejected);
// Accept to check connectivity, only skip folder setup
emit ownCloudWizardDone(QDialog::Accepted);
}
@ -727,7 +731,7 @@ AccountState *OwncloudSetupWizard::applyAccountChanges()
auto manager = AccountManager::instance();
auto newState = manager->addAccount(newAccount);
manager->save();
manager->saveAccount(newAccount.data());
return newState;
}

View file

@ -261,7 +261,7 @@ void SettingsDialog::accountAdded(AccountState *s)
_actionForAccount.insert(s->account().data(), accountAction);
accountAction->trigger();
connect(accountSettings, &AccountSettings::folderChanged, _gui, &ownCloudGui::slotFoldersChanged);
connect(accountSettings, &AccountSettings::folderChanged, _gui, &ownCloudGui::slotComputeOverallSyncStatus);
connect(accountSettings, &AccountSettings::openFolderAlias,
_gui, &ownCloudGui::slotFolderOpenAction);
connect(accountSettings, &AccountSettings::showIssuesList, this, &SettingsDialog::showIssuesList);

View file

@ -11,6 +11,7 @@
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*/
pragma NativeMethodBehavior: AcceptThisObject
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts

View file

@ -135,9 +135,12 @@ QString Account::davUser() const
void Account::setDavUser(const QString &newDavUser)
{
if (_davUser == newDavUser)
if (_davUser == newDavUser) {
return;
}
_davUser = newDavUser;
emit wantsAccountSaved(this);
emit prettyNameChanged();
}
@ -156,13 +159,19 @@ void Account::setAvatar(const QImage &img)
QString Account::displayName() const
{
QString dn = QString("%1@%2").arg(credentials()->user(), _url.host());
int port = url().port();
if (port > 0 && port != 80 && port != 443) {
dn.append(QLatin1Char(':'));
dn.append(QString::number(port));
auto credentialsUser = _davUser;
if (_credentials && !_credentials->user().isEmpty()) {
credentialsUser = _credentials->user();
}
return dn;
auto displayName = QString("%1@%2").arg(credentialsUser, _url.host());
const auto port = url().port();
if (port > 0 && port != 80 && port != 443) {
displayName.append(QLatin1Char(':'));
displayName.append(QString::number(port));
}
return displayName;
}
QString Account::userIdAtHostWithPort() const
@ -178,12 +187,12 @@ QString Account::userIdAtHostWithPort() const
QString Account::davDisplayName() const
{
return _displayName;
return _davDisplayName;
}
void Account::setDavDisplayName(const QString &newDisplayName)
{
_displayName = newDisplayName;
_davDisplayName = newDisplayName;
emit accountChangedDisplayName();
emit prettyNameChanged();
}
@ -243,14 +252,14 @@ void Account::setCredentials(AbstractCredentials *cred)
QNetworkCookieJar *jar = nullptr;
QNetworkProxy proxy;
if (_am) {
jar = _am->cookieJar();
if (_networkAccessManager) {
jar = _networkAccessManager->cookieJar();
jar->setParent(nullptr);
// Remember proxy (issue #2108)
proxy = _am->proxy();
proxy = _networkAccessManager->proxy();
_am = QSharedPointer<QNetworkAccessManager>();
_networkAccessManager = QSharedPointer<QNetworkAccessManager>();
}
// The order for these two is important! Reading the credential's
@ -261,17 +270,17 @@ void Account::setCredentials(AbstractCredentials *cred)
// Note: This way the QNAM can outlive the Account and Credentials.
// This is necessary to avoid issues with the QNAM being deleted while
// processing slotHandleSslErrors().
_am = QSharedPointer<QNetworkAccessManager>(_credentials->createQNAM(), &QObject::deleteLater);
_networkAccessManager = QSharedPointer<QNetworkAccessManager>(_credentials->createQNAM(), &QObject::deleteLater);
if (jar) {
_am->setCookieJar(jar);
_networkAccessManager->setCookieJar(jar);
}
if (proxy.type() != QNetworkProxy::DefaultProxy) {
_am->setProxy(proxy);
_networkAccessManager->setProxy(proxy);
}
connect(_am.data(), &QNetworkAccessManager::sslErrors,
connect(_networkAccessManager.data(), &QNetworkAccessManager::sslErrors,
this, &Account::slotHandleSslErrors);
connect(_am.data(), &QNetworkAccessManager::proxyAuthenticationRequired,
connect(_networkAccessManager.data(), &QNetworkAccessManager::proxyAuthenticationRequired,
this, &Account::proxyAuthenticationRequired);
connect(_credentials.data(), &AbstractCredentials::fetched,
this, &Account::slotCredentialsFetched);
@ -358,7 +367,7 @@ QUrl Account::deprecatedPrivateLinkUrl(const QByteArray &numericFileId) const
*/
void Account::clearCookieJar()
{
const auto jar = qobject_cast<CookieJar *>(_am->cookieJar());
const auto jar = qobject_cast<CookieJar *>(_networkAccessManager->cookieJar());
ASSERT(jar);
jar->setAllCookies(QList<QNetworkCookie>());
}
@ -368,7 +377,7 @@ void Account::clearCookieJar()
of not losing its ownership. */
void Account::lendCookieJarTo(QNetworkAccessManager *guest)
{
auto jar = _am->cookieJar();
auto jar = _networkAccessManager->cookieJar();
auto oldParent = jar->parent();
guest->setCookieJar(jar); // takes ownership of our precious cookie jar
jar->setParent(oldParent); // takes it back
@ -381,35 +390,35 @@ QString Account::cookieJarPath()
void Account::resetNetworkAccessManager()
{
if (!_credentials || !_am) {
if (!_credentials || !_networkAccessManager) {
return;
}
qCDebug(lcAccount) << "Resetting QNAM";
QNetworkCookieJar *jar = _am->cookieJar();
QNetworkProxy proxy = _am->proxy();
QNetworkCookieJar *jar = _networkAccessManager->cookieJar();
QNetworkProxy proxy = _networkAccessManager->proxy();
// Use a QSharedPointer to allow locking the life of the QNAM on the stack.
// Make it call deleteLater to make sure that we can return to any QNAM stack frames safely.
_am = QSharedPointer<QNetworkAccessManager>(_credentials->createQNAM(), &QObject::deleteLater);
_networkAccessManager = QSharedPointer<QNetworkAccessManager>(_credentials->createQNAM(), &QObject::deleteLater);
_am->setCookieJar(jar); // takes ownership of the old cookie jar
_am->setProxy(proxy); // Remember proxy (issue #2108)
_networkAccessManager->setCookieJar(jar); // takes ownership of the old cookie jar
_networkAccessManager->setProxy(proxy); // Remember proxy (issue #2108)
connect(_am.data(), &QNetworkAccessManager::sslErrors,
connect(_networkAccessManager.data(), &QNetworkAccessManager::sslErrors,
this, &Account::slotHandleSslErrors);
connect(_am.data(), &QNetworkAccessManager::proxyAuthenticationRequired,
connect(_networkAccessManager.data(), &QNetworkAccessManager::proxyAuthenticationRequired,
this, &Account::proxyAuthenticationRequired);
}
QNetworkAccessManager *Account::networkAccessManager()
{
return _am.data();
return _networkAccessManager.data();
}
QSharedPointer<QNetworkAccessManager> Account::sharedNetworkAccessManager()
{
return _am;
return _networkAccessManager;
}
QNetworkReply *Account::sendRawRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QIODevice *data)
@ -417,17 +426,17 @@ QNetworkReply *Account::sendRawRequest(const QByteArray &verb, const QUrl &url,
req.setUrl(url);
req.setSslConfiguration(this->getOrCreateSslConfig());
if (verb == "HEAD" && !data) {
return _am->head(req);
return _networkAccessManager->head(req);
} else if (verb == "GET" && !data) {
return _am->get(req);
return _networkAccessManager->get(req);
} else if (verb == "POST") {
return _am->post(req, data);
return _networkAccessManager->post(req, data);
} else if (verb == "PUT") {
return _am->put(req, data);
return _networkAccessManager->put(req, data);
} else if (verb == "DELETE" && !data) {
return _am->deleteResource(req);
return _networkAccessManager->deleteResource(req);
}
return _am->sendCustomRequest(req, verb, data);
return _networkAccessManager->sendCustomRequest(req, verb, data);
}
QNetworkReply *Account::sendRawRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, const QByteArray &data)
@ -435,17 +444,17 @@ QNetworkReply *Account::sendRawRequest(const QByteArray &verb, const QUrl &url,
req.setUrl(url);
req.setSslConfiguration(this->getOrCreateSslConfig());
if (verb == "HEAD" && data.isEmpty()) {
return _am->head(req);
return _networkAccessManager->head(req);
} else if (verb == "GET" && data.isEmpty()) {
return _am->get(req);
return _networkAccessManager->get(req);
} else if (verb == "POST") {
return _am->post(req, data);
return _networkAccessManager->post(req, data);
} else if (verb == "PUT") {
return _am->put(req, data);
return _networkAccessManager->put(req, data);
} else if (verb == "DELETE" && data.isEmpty()) {
return _am->deleteResource(req);
return _networkAccessManager->deleteResource(req);
}
return _am->sendCustomRequest(req, verb, data);
return _networkAccessManager->sendCustomRequest(req, verb, data);
}
QNetworkReply *Account::sendRawRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QHttpMultiPart *data)
@ -453,11 +462,11 @@ QNetworkReply *Account::sendRawRequest(const QByteArray &verb, const QUrl &url,
req.setUrl(url);
req.setSslConfiguration(this->getOrCreateSslConfig());
if (verb == "PUT") {
return _am->put(req, data);
return _networkAccessManager->put(req, data);
} else if (verb == "POST") {
return _am->post(req, data);
return _networkAccessManager->post(req, data);
}
return _am->sendCustomRequest(req, verb, data);
return _networkAccessManager->sendCustomRequest(req, verb, data);
}
SimpleNetworkJob *Account::sendRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QIODevice *data)
@ -585,7 +594,7 @@ void Account::slotHandleSslErrors(QNetworkReply *reply, QList<QSslError> errors)
// the deleteLater() of the QNAM before we have the chance of unwinding our stack.
// Keep a ref here on our stackframe to make sure that it doesn't get deleted before
// handleErrors returns.
QSharedPointer<QNetworkAccessManager> qnamLock = _am;
QSharedPointer<QNetworkAccessManager> qnamLock = _networkAccessManager;
QPointer<QObject> guard = reply;
if (_sslErrorHandler->handleErrors(errors, reply->sslConfiguration(), &approvedCerts, sharedFromThis())) {
@ -661,7 +670,7 @@ void Account::handleInvalidCredentials()
void Account::clearQNAMCache()
{
_am->clearAccessCache();
_networkAccessManager->clearAccessCache();
}
const Capabilities &Account::capabilities() const
@ -1120,16 +1129,16 @@ void Account::setNetworkProxySetting(const AccountNetworkProxySetting setting)
_networkProxySetting = setting;
if (setting == AccountNetworkProxySetting::AccountSpecificProxy) {
auto proxy = _am->proxy();
auto proxy = _networkAccessManager->proxy();
proxy.setType(proxyType());
proxy.setHostName(proxyHostName());
proxy.setPort(proxyPort());
proxy.setUser(proxyUser());
proxy.setPassword(proxyPassword());
_am->setProxy(proxy);
_networkAccessManager->setProxy(proxy);
} else {
const auto proxy = QNetworkProxy::applicationProxy();
_am->setProxy(proxy);
_networkAccessManager->setProxy(proxy);
setProxyType(proxy.type());
setProxyHostName(proxy.hostName());
setProxyPort(proxy.port());
@ -1153,9 +1162,9 @@ void Account::setProxyType(QNetworkProxy::ProxyType proxyType)
_proxyType = proxyType;
if (networkProxySetting() == AccountNetworkProxySetting::AccountSpecificProxy) {
auto proxy = _am->proxy();
auto proxy = _networkAccessManager->proxy();
proxy.setType(proxyType);
_am->setProxy(proxy);
_networkAccessManager->setProxy(proxy);
}
emit proxyTypeChanged();
@ -1175,9 +1184,9 @@ void Account::setProxyHostName(const QString &hostName)
_proxyHostName = hostName;
if (networkProxySetting() == AccountNetworkProxySetting::AccountSpecificProxy) {
auto proxy = _am->proxy();
auto proxy = _networkAccessManager->proxy();
proxy.setHostName(hostName);
_am->setProxy(proxy);
_networkAccessManager->setProxy(proxy);
}
emit proxyHostNameChanged();
@ -1197,9 +1206,9 @@ void Account::setProxyPort(const int port)
_proxyPort = port;
if (networkProxySetting() == AccountNetworkProxySetting::AccountSpecificProxy) {
auto proxy = _am->proxy();
auto proxy = _networkAccessManager->proxy();
proxy.setPort(port);
_am->setProxy(proxy);
_networkAccessManager->setProxy(proxy);
}
emit proxyPortChanged();
@ -1234,9 +1243,9 @@ void Account::setProxyUser(const QString &user)
_proxyUser = user;
if (networkProxySetting() == AccountNetworkProxySetting::AccountSpecificProxy) {
auto proxy = _am->proxy();
auto proxy = _networkAccessManager->proxy();
proxy.setUser(user);
_am->setProxy(proxy);
_networkAccessManager->setProxy(proxy);
}
emit proxyUserChanged();
@ -1256,9 +1265,9 @@ void Account::setProxyPassword(const QString &password)
_proxyPassword = password;
if (networkProxySetting() == AccountNetworkProxySetting::AccountSpecificProxy) {
auto proxy = _am->proxy();
auto proxy = _networkAccessManager->proxy();
proxy.setPassword(password);
_am->setProxy(proxy);
_networkAccessManager->setProxy(proxy);
}
emit proxyPasswordChanged();

View file

@ -86,7 +86,7 @@ class OWNCLOUDSYNC_EXPORT Account : public QObject
Q_OBJECT
Q_PROPERTY(QString id MEMBER _id)
Q_PROPERTY(QString davUser MEMBER _davUser)
Q_PROPERTY(QString displayName MEMBER _displayName)
Q_PROPERTY(QString davDisplayName MEMBER _davDisplayName)
Q_PROPERTY(QString prettyName READ prettyName NOTIFY prettyNameChanged)
Q_PROPERTY(QUrl url MEMBER _url)
Q_PROPERTY(bool e2eEncryptionKeysGenerationAllowed MEMBER _e2eEncryptionKeysGenerationAllowed)
@ -493,6 +493,7 @@ private:
QWeakPointer<Account> _sharedThis;
QString _id;
QString _davUser;
QString _davDisplayName;
QString _displayName;
QTimer _pushNotificationsReconnectTimer;
#ifndef TOKEN_AUTH_ONLY
@ -517,7 +518,7 @@ private:
QColor _serverTextColor = QColorConstants::White;
bool _skipE2eeMetadataChecksumValidation = false;
QScopedPointer<AbstractSslErrorHandler> _sslErrorHandler;
QSharedPointer<QNetworkAccessManager> _am;
QSharedPointer<QNetworkAccessManager> _networkAccessManager;
QScopedPointer<AbstractCredentials> _credentials;
bool _http2Supported = false;