File indexing completed on 2024-05-05 17:43:13

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 "directorychooserwidget.h"
0008 #include "ui_directorychooserwidget.h"
0009 
0010 #include "vault.h"
0011 
0012 class DirectoryChooserWidget::Private
0013 {
0014 public:
0015     Ui::DirectoryChooserWidget ui;
0016     DirectoryChooserWidget::Flags flags;
0017 
0018     bool mountPointValid = false;
0019 
0020     DirectoryChooserWidget *const q;
0021     Private(DirectoryChooserWidget *parent)
0022         : q(parent)
0023     {
0024     }
0025 
0026     void setMountPointValid(bool valid)
0027     {
0028         if (mountPointValid == valid)
0029             return;
0030 
0031         mountPointValid = valid;
0032 
0033         q->setIsValid(valid);
0034     }
0035 
0036     bool isDirectoryValid(const QUrl &url) const
0037     {
0038         if (url.isEmpty())
0039             return false;
0040 
0041         QDir directory(url.toString());
0042 
0043         // TODO: Support alternative flags once they are needed
0044         if (!directory.exists() || directory.entryList().isEmpty())
0045             return true;
0046 
0047         return false;
0048     }
0049 };
0050 
0051 DirectoryChooserWidget::DirectoryChooserWidget(DirectoryChooserWidget::Flags flags)
0052     : DialogDsl::DialogModule(false)
0053     , d(new Private(this))
0054 {
0055     d->ui.setupUi(this);
0056     d->flags = flags;
0057 
0058     connect(d->ui.editMountPoint, &KUrlRequester::textEdited, this, [&]() {
0059         d->setMountPointValid(d->isDirectoryValid(d->ui.editMountPoint->url()));
0060     });
0061 }
0062 
0063 DirectoryChooserWidget::~DirectoryChooserWidget()
0064 {
0065 }
0066 
0067 PlasmaVault::Vault::Payload DirectoryChooserWidget::fields() const
0068 {
0069     return {
0070         {KEY_MOUNT_POINT, d->ui.editMountPoint->url().toLocalFile()},
0071     };
0072 }
0073 
0074 void DirectoryChooserWidget::init(const PlasmaVault::Vault::Payload &payload)
0075 {
0076     const auto mountPoint = payload[KEY_MOUNT_POINT].toString();
0077 
0078     d->ui.editMountPoint->setText(mountPoint);
0079 
0080     d->setMountPointValid(d->isDirectoryValid(d->ui.editMountPoint->url()));
0081 }