File indexing completed on 2024-04-28 09:36:12

0001 /*
0002     SPDX-FileCopyrightText: 2020 Nikolai Krasheninnikov <nkrasheninnikov@yandex.ru>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "svncleanupdialog.h"
0008 
0009 #include <QFileDialog>
0010 #include <QFileInfo>
0011 #include <QDebug>
0012 
0013 #include "svncommands.h"
0014 
0015 SvnCleanupDialog::SvnCleanupDialog(const QString& workingDir, QWidget *parent) :
0016     QDialog(parent)
0017 {
0018     m_ui.setupUi(this);
0019 
0020     /*
0021      * Add actions, establish connections.
0022      */
0023     connect(m_ui.buttonCancel, &QPushButton::clicked, this, &QDialog::reject);
0024     QAction *pickDirectory = m_ui.lineEditDirectory->addAction(QIcon::fromTheme(QStringLiteral("folder")), QLineEdit::TrailingPosition);
0025     connect(pickDirectory, &QAction::triggered, this, [this] () {
0026         const QString dir = QFileDialog::getExistingDirectory(this, i18nc("@title:window", "Choose a directory to clean up"),
0027                                                               m_ui.lineEditDirectory->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
0028 
0029         if (!dir.isEmpty()) {
0030             m_ui.lineEditDirectory->setText(dir);
0031         }
0032     } );
0033 
0034     /*
0035      * Additional setup.
0036      */
0037     m_ui.lineEditDirectory->setText(workingDir);
0038 
0039     setAttribute(Qt::WA_DeleteOnClose);
0040     show();
0041     activateWindow();
0042 }
0043 
0044 SvnCleanupDialog::~SvnCleanupDialog() = default;
0045 
0046 void SvnCleanupDialog::on_lineEditDirectory_textChanged(const QString &text)
0047 {
0048     m_ui.buttonOk->setEnabled(QFileInfo(text).isDir());
0049 }
0050 
0051 void SvnCleanupDialog::on_buttonOk_clicked()
0052 {
0053     const QString workDir = m_ui.lineEditDirectory->text();
0054     const bool removeUnversioned = m_ui.checkBoxUnversioned->isChecked();
0055     const bool removeIgnored = m_ui.checkBoxIgnored->isChecked();
0056     const bool includeExternals = m_ui.checkBoxExternals->isChecked();
0057 
0058     const CommandResult result = SvnCommands::cleanup(workDir, removeUnversioned, removeIgnored, includeExternals);
0059     if (result.success) {
0060         Q_EMIT operationCompletedMessage(i18nc("@info:status", "SVN clean up completed successfully."));
0061     } else {
0062         Q_EMIT errorMessage(i18nc("@info:status", "SVN clean up failed for %1", workDir));
0063         qDebug() << result.stdErr;
0064     }
0065 
0066     QDialog::accept();
0067 }
0068 
0069 #include "moc_svncleanupdialog.cpp"