diff --git a/kmymoney/kmymoney.cpp b/kmymoney/kmymoney.cpp --- a/kmymoney/kmymoney.cpp +++ b/kmymoney/kmymoney.cpp @@ -970,38 +970,53 @@ // actually, url should be the parameter to this function // but for now, this would involve too many changes - bool rc = true; + auto rc = true; try { if (! url.isValid()) { throw MYMONEYEXCEPTION(i18n("Malformed URL '%1'", url.url())); } - if (url.isLocalFile()) { - filename = url.toLocalFile(); - try { - const unsigned int nbak = KMyMoneySettings::autoBackupCopies(); - if (nbak) { - KBackup::numberedBackupFile(filename, QString(), QStringLiteral("~"), nbak); + if (url.scheme() == QLatin1String("sql")) { + rc = false; + auto pluginFound = false; + for (const auto& plugin : m_plugins.storage) { + if (plugin->formatName().compare(QLatin1String("SQL")) == 0) { + rc = plugin->save(url); + pluginFound = true; + break; + } + } + + if(!pluginFound) + throw MYMONEYEXCEPTION(i18n("Couldn't find suitable plugin to save your storage.")); + + } else if (url.isLocalFile()) { + filename = url.toLocalFile(); + try { + const unsigned int nbak = KMyMoneySettings::autoBackupCopies(); + if (nbak) { + KBackup::numberedBackupFile(filename, QString(), QStringLiteral("~"), nbak); + } + saveToLocalFile(filename, storageWriter.get(), plaintext, keyList); + } catch (const MyMoneyException &) { + throw MYMONEYEXCEPTION(i18n("Unable to write changes to '%1'", filename)); } - saveToLocalFile(filename, storageWriter.get(), plaintext, keyList); - } catch (const MyMoneyException &) { - throw MYMONEYEXCEPTION(i18n("Unable to write changes to '%1'", filename)); - } - } else { - QTemporaryFile tmpfile; - tmpfile.open(); // to obtain the name - tmpfile.close(); - saveToLocalFile(tmpfile.fileName(), storageWriter.get(), plaintext, keyList); - - Q_CONSTEXPR int permission = -1; - QFile file(tmpfile.fileName()); - file.open(QIODevice::ReadOnly); - KIO::StoredTransferJob *putjob = KIO::storedPut(file.readAll(), url, permission, KIO::JobFlag::Overwrite); - if (!putjob->exec()) { - throw MYMONEYEXCEPTION(i18n("Unable to upload to '%1'.
%2", url.toDisplayString(), putjob->errorString())); + } else { + + QTemporaryFile tmpfile; + tmpfile.open(); // to obtain the name + tmpfile.close(); + saveToLocalFile(tmpfile.fileName(), storageWriter.get(), plaintext, keyList); + + Q_CONSTEXPR int permission = -1; + QFile file(tmpfile.fileName()); + file.open(QIODevice::ReadOnly); + KIO::StoredTransferJob *putjob = KIO::storedPut(file.readAll(), url, permission, KIO::JobFlag::Overwrite); + if (!putjob->exec()) { + throw MYMONEYEXCEPTION(i18n("Unable to upload to '%1'.
%2", url.toDisplayString(), putjob->errorString())); + } + file.close(); } - file.close(); - } m_fileType = KMyMoneyApp::KmmXML; } catch (const MyMoneyException &e) { KMessageBox::error(q, e.what()); diff --git a/kmymoney/plugins/sql/sqlstorage.cpp b/kmymoney/plugins/sql/sqlstorage.cpp --- a/kmymoney/plugins/sql/sqlstorage.cpp +++ b/kmymoney/plugins/sql/sqlstorage.cpp @@ -173,12 +173,8 @@ } newurl.setQuery(query); - if (query.queryItemValue(key) == QLatin1String("QSQLITE")) { - newurl.setUserInfo(QString()); - newurl.setHost(QString()); - } // check if a password is needed. it may be if the URL came from the last/recent file list - QPointer dialog = new KSelectDatabaseDlg(QIODevice::ReadWrite, newurl); + dialog = new KSelectDatabaseDlg(QIODevice::ReadWrite, newurl); if (!dialog->checkDrivers()) { delete dialog; return;