diff --git a/kded/ui/directorypairchooserwidget.h b/kded/ui/directorypairchooserwidget.h --- a/kded/ui/directorypairchooserwidget.h +++ b/kded/ui/directorypairchooserwidget.h @@ -29,10 +29,8 @@ public: enum Flags { - RequireNothing = 0, - RequireEmptyEncryptedLocation = 1, - RequireEmptyMountPoint = 2, - RequireEmptyDirectories = RequireEmptyEncryptedLocation | RequireEmptyMountPoint + NoFlags = 0, + SkipDevicePicker = 1 }; DirectoryPairChooserWidget(Flags flags); @@ -46,7 +44,7 @@ QScopedPointer d; }; -inline DialogDsl::ModuleFactory directoryPairChooser(DirectoryPairChooserWidget::Flags flags) +inline DialogDsl::ModuleFactory directoryPairChooser(DirectoryPairChooserWidget::Flags flags = DirectoryPairChooserWidget::NoFlags) { return [=] { return new DirectoryPairChooserWidget(flags); diff --git a/kded/ui/directorypairchooserwidget.cpp b/kded/ui/directorypairchooserwidget.cpp --- a/kded/ui/directorypairchooserwidget.cpp +++ b/kded/ui/directorypairchooserwidget.cpp @@ -23,18 +23,22 @@ #include "vault.h" +#include + class DirectoryPairChooserWidget::Private { public: Ui::DirectoryPairChooserWidget ui; - DirectoryPairChooserWidget::Flags flags; + const DirectoryPairChooserWidget::Flags flags; bool mountPointValid = false; bool encryptedLocationValid = false; DirectoryPairChooserWidget *const q; - Private(DirectoryPairChooserWidget *parent) - : q(parent) + Private(DirectoryPairChooserWidget *parent, DirectoryPairChooserWidget::Flags flags) + : flags(flags), q(parent) { + if (flags & DirectoryPairChooserWidget::SkipDevicePicker) + encryptedLocationValid = true; } void setEncryptedLocationValid(bool valid) @@ -66,6 +70,7 @@ bool isDirectoryValid(const QUrl &url) const { if (url.isEmpty()) return false; + // TODO check the vaults database to see if another vault already uses this dir QDir directory(url.toString()); @@ -76,35 +81,33 @@ } }; - - DirectoryPairChooserWidget::DirectoryPairChooserWidget( DirectoryPairChooserWidget::Flags flags) - : DialogDsl::DialogModule(false), d(new Private(this)) + : DialogDsl::DialogModule(false), d(new Private(this, flags)) { d->ui.setupUi(this); - d->flags = flags; - - connect(d->ui.editDevice, &KUrlRequester::textEdited, - this, [&] (const QString &url) { - d->setEncryptedLocationValid(d->isDirectoryValid(url)); - }); + if (flags & DirectoryPairChooserWidget::SkipDevicePicker) { + d->ui.editDevice->setVisible(false); + d->ui.labelDevice->setVisible(false); + } else { + connect(d->ui.editDevice, &KUrlRequester::textEdited, + this, [&] (const QString &url) { + d->setEncryptedLocationValid(d->isDirectoryValid(url)); + }); + } connect(d->ui.editMountPoint, &KUrlRequester::textEdited, this, [&] (const QString &url) { d->setMountPointValid(d->isDirectoryValid(url)); }); - } - DirectoryPairChooserWidget::~DirectoryPairChooserWidget() { } - PlasmaVault::Vault::Payload DirectoryPairChooserWidget::fields() const { return { @@ -118,11 +121,15 @@ void DirectoryPairChooserWidget::init( const PlasmaVault::Vault::Payload &payload) { + const QString basePath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + + QStringLiteral("/plasma-vault"); const auto name = payload[KEY_NAME].toString(); - - d->ui.editDevice->setText("~/.vaults/" + name + ".enc"); - d->ui.editMountPoint->setText("~/Vaults/" + name); + Q_ASSERT(!name.isEmpty()); + QString path = QString("%1/%2.enc").arg(basePath).arg(name); + int index = 1; + while (QDir(path).exists()) { + path = QString("%1/%2_%3.enc").arg(basePath).arg(name).arg(index++); + } + d->ui.editDevice->setText(path); + d->ui.editMountPoint->setText(QDir::homePath() + QStringLiteral("/Vaults/") + name); } - - - diff --git a/kded/ui/vaultcreationwizard.cpp b/kded/ui/vaultcreationwizard.cpp --- a/kded/ui/vaultcreationwizard.cpp +++ b/kded/ui/vaultcreationwizard.cpp @@ -80,7 +80,7 @@ See defuse.ca/audits/encfs.htm for more information.")) }, step { passwordChooser() }, - step { directoryPairChooser(DirectoryPairChooserWidget::RequireEmptyDirectories) }, + step { directoryPairChooser(DirectoryPairChooserWidget::SkipDevicePicker) }, step { activitiesChooser() } } }, @@ -103,7 +103,7 @@ which confirms this.")) }, step { passwordChooser() }, - step { directoryPairChooser(DirectoryPairChooserWidget::RequireEmptyDirectories) }, + step { directoryPairChooser() }, step { cryfsCypherChooser(), activitiesChooser()