File indexing completed on 2024-03-24 17:24:42

0001 /**
0002  * SPDX-FileCopyrightText: (C) 2016 Gleb Baryshev <gleb.baryshev@gmail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "settings_versionsync.h"
0007 #include "aboutdata.h"
0008 #include "settings.h"
0009 #include "tools.h"
0010 #include "ui_settings_versionsync.h"
0011 #include <KLocalizedString>
0012 #include <KMessageBox>
0013 #include <QDir>
0014 #include <QLocale>
0015 #include <QPointer>
0016 #include <QtConcurrent/QtConcurrentRun>
0017 
0018 //! Compute size of .git folder and invoke VersionSyncPage::setHistorySize
0019 void showHistorySize(QPointer<VersionSyncPage> versionSyncPage)
0020 {
0021     QString git = Global::gitFolder();
0022     qint64 size = QDir(git).exists() ? Tools::computeSizeRecursively(git) : 0;
0023     if (!versionSyncPage.isNull())
0024         QMetaObject::invokeMethod(versionSyncPage.data(), "setHistorySize", Qt::QueuedConnection, Q_ARG(qint64, size));
0025 }
0026 
0027 VersionSyncPage::VersionSyncPage(QWidget *parent, const QVariantList &args)
0028     : KCModule(parent, args)
0029     , ui(new Ui::VersionSyncPage)
0030 {
0031     KAboutData *about = new AboutData();
0032     about->setComponentName("kcmbasket_config_version_sync");
0033     setAboutData(about);
0034 
0035     ui->setupUi(this);
0036 
0037 #ifdef WITH_LIBGIT2
0038     ui->labelWithoutVersionControlSupport->setVisible(false);
0039     QtConcurrent::run(showHistorySize, this);
0040 #else
0041     ui->checkBoxEnable->setEnabled(false);
0042     ui->groupBoxControl->setVisible(false);
0043 #endif
0044 
0045     connect(ui->checkBoxEnable, SIGNAL(toggled(bool)), this, SLOT(changed()));
0046     VersionSyncPage::load();
0047 }
0048 
0049 VersionSyncPage::~VersionSyncPage()
0050 {
0051     delete ui;
0052 }
0053 
0054 void VersionSyncPage::load()
0055 {
0056     ui->checkBoxEnable->setChecked(Settings::versionSyncEnabled());
0057 #ifdef WITH_LIBGIT2
0058     onCheckBoxEnableClicked();
0059 #endif
0060 }
0061 
0062 void VersionSyncPage::save()
0063 {
0064     Settings::setVersionSyncEnabled(ui->checkBoxEnable->isChecked());
0065 }
0066 
0067 void VersionSyncPage::defaults()
0068 {
0069     ui->checkBoxEnable->setChecked(false);
0070 }
0071 
0072 void VersionSyncPage::onCheckBoxEnableClicked()
0073 {
0074     ui->groupBoxControl->setEnabled(ui->checkBoxEnable->isChecked());
0075 }
0076 
0077 void VersionSyncPage::onButtonClearHistoryClicked()
0078 {
0079     if (KMessageBox::questionYesNo(this, i18n("Do you really want to remove old versions for all baskets?"), i18n("Version Sync")) == KMessageBox::Yes) {
0080         Tools::deleteRecursively(Global::gitFolder());
0081         ui->buttonClearHistory->setEnabled(false);
0082         setHistorySize(0);
0083         Global::initializeGitIfNeeded(Global::savesFolder()); // restore .git
0084     }
0085 }
0086 
0087 void VersionSyncPage::setHistorySize(qint64 size_bytes)
0088 {
0089     QString size_mb = QLocale().toString((float)size_bytes / 1024 / 1024, 'f', 2);
0090     ui->labelHistorySize->setText(i18n("This will free %1 MB", size_mb));
0091 }
0092 
0093 #include "moc_settings_versionsync.cpp"