File indexing completed on 2024-05-19 05:37:28
0001 /* 0002 * SPDX-FileCopyrightText: 2017 Ivan Cukic <ivan.cukic (at) kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "vaultimportingwizard.h" 0008 #include "ui_vaultimportingwizard.h" 0009 0010 #include <QList> 0011 #include <QMap> 0012 #include <QPushButton> 0013 #include <QStackedLayout> 0014 0015 #include "dialogdsl.h" 0016 #include "vault.h" 0017 0018 using namespace DialogDsl; 0019 using namespace DialogDsl::operators; 0020 0021 #include "activitieslinkingwidget.h" 0022 #include "backendchooserwidget.h" 0023 #include "cryfscypherchooserwidget.h" 0024 #include "directorypairchooserwidget.h" 0025 #include "noticewidget.h" 0026 #include "offlineonlywidget.h" 0027 #include "passwordchooserwidget.h" 0028 0029 #include "vaultwizardbase.h" 0030 0031 class VaultImportingWizard::Private : public WBASE(VaultImportingWizard) 0032 { 0033 public: 0034 Logic logic{{"encfs" / i18n("EncFS"), 0035 {step{directoryPairChooser(DirectoryPairChooserWidget::ShowDevicePicker | DirectoryPairChooserWidget::ShowMountPointPicker 0036 | DirectoryPairChooserWidget::RequireExistingDevice | DirectoryPairChooserWidget::RequireEmptyMountPoint)}, 0037 step{passwordChooser()}, 0038 step{activitiesChooser(), offlineOnlyChooser()}}}, 0039 0040 {"cryfs" / i18n("CryFS"), 0041 {step{directoryPairChooser(DirectoryPairChooserWidget::ShowDevicePicker | DirectoryPairChooserWidget::ShowMountPointPicker 0042 | DirectoryPairChooserWidget::RequireExistingDevice | DirectoryPairChooserWidget::RequireEmptyMountPoint)}, 0043 step{passwordChooser()}, 0044 step{activitiesChooser(), offlineOnlyChooser()}}}, 0045 0046 {"gocryptfs" / i18n("gocryptfs"), 0047 {step{directoryPairChooser(DirectoryPairChooserWidget::ShowDevicePicker | DirectoryPairChooserWidget::ShowMountPointPicker 0048 | DirectoryPairChooserWidget::RequireExistingDevice | DirectoryPairChooserWidget::RequireEmptyMountPoint)}, 0049 step{passwordChooser()}, 0050 step{activitiesChooser(), offlineOnlyChooser()}}}}; 0051 0052 Private(VaultImportingWizard *parent) 0053 : WBASE(VaultImportingWizard)(parent) 0054 { 0055 lastButtonText = i18n("Import"); 0056 initBase(); 0057 } 0058 0059 void finish() 0060 { 0061 auto collectedPayload = firstStepModule->fields(); 0062 for (const auto *module : currentStepModules) { 0063 collectedPayload.insert(module->fields()); 0064 } 0065 0066 const auto name = collectedPayload[KEY_NAME].toString(); 0067 const PlasmaVault::Device device(collectedPayload[KEY_DEVICE].toString()); 0068 const PlasmaVault::MountPoint mountPoint(collectedPayload[KEY_MOUNT_POINT].toString()); 0069 0070 auto vault = new PlasmaVault::Vault(device, q); 0071 0072 auto future = vault->import(name, mountPoint, collectedPayload); 0073 0074 auto result = AsynQt::await(future); 0075 0076 if (result) { 0077 Q_EMIT q->importedVault(vault); 0078 q->QDialog::accept(); 0079 0080 } else { 0081 ui.message->setText(result.error().message()); 0082 ui.message->setMessageType(KMessageWidget::Error); 0083 ui.message->show(); 0084 vault->scheduleDeletion(); 0085 } 0086 } 0087 }; 0088 0089 VaultImportingWizard::VaultImportingWizard(QWidget *parent) 0090 : QDialog(parent) 0091 , d(new Private(this)) 0092 { 0093 setWindowTitle(i18nc("@title:window", "Import an Existing Vault")); 0094 } 0095 0096 VaultImportingWizard::~VaultImportingWizard() 0097 { 0098 } 0099 0100 #include "moc_vaultimportingwizard.cpp"