File indexing completed on 2024-04-21 05:50:00

0001 //**************************************************************************
0002 //   Copyright 2006 - 2017 Martin Koller, kollix@aon.at
0003 //
0004 //   This program is free software; you can redistribute it and/or modify
0005 //   it under the terms of the GNU General Public License as published by
0006 //   the Free Software Foundation, version 2 of the License
0007 //
0008 //**************************************************************************
0009 
0010 #include <MainWidget.hxx>
0011 #include <Archiver.hxx>
0012 #include <Selector.hxx>
0013 
0014 #include <KUrlCompletion>
0015 #include <KLineEdit>
0016 
0017 #include <QPushButton>
0018 #include <QFileDialog>
0019 
0020 //krazy:excludeall=normalize
0021 //--------------------------------------------------------------------------------
0022 
0023 MainWidget::MainWidget(QWidget *parent)
0024   : QWidget(parent), selector(nullptr)
0025 {
0026   ui.setupUi(this);
0027 
0028   ui.startButton->setIcon(QIcon::fromTheme(QStringLiteral("kbackup_start")));
0029   ui.cancelButton->setIcon(QIcon::fromTheme(QStringLiteral("kbackup_cancel")));
0030   ui.folder->setIcon(QIcon::fromTheme(QStringLiteral("folder")));
0031 
0032   connect(ui.startButton,  &QAbstractButton::clicked, this, &MainWidget::startBackup);
0033   connect(ui.cancelButton, &QAbstractButton::clicked, Archiver::instance, &Archiver::cancel);
0034 
0035   connect(ui.forceFullBackup, &QAbstractButton::clicked, Archiver::instance, &Archiver::setForceFullBackup);
0036 
0037   connect(Archiver::instance, &Archiver::logging, ui.log, &QTextEdit::append);
0038   connect(Archiver::instance, &Archiver::warning, ui.warnings, &QTextEdit::append);
0039 
0040   connect(Archiver::instance, &Archiver::targetCapacity, this, &MainWidget::setCapacity);
0041 
0042   connect(Archiver::instance, SIGNAL(totalFilesChanged(int)), ui.totalFiles, SLOT(setNum(int)));
0043   connect(Archiver::instance, &Archiver::totalBytesChanged, this, &MainWidget::updateTotalBytes);
0044 
0045   connect(Archiver::instance, &Archiver::sliceProgress, ui.progressSlice, &QProgressBar::setValue);
0046   connect(Archiver::instance, SIGNAL(newSlice(int)), ui.sliceNum, SLOT(setNum(int)));
0047 
0048   connect(Archiver::instance, &Archiver::fileProgress, this, &MainWidget::setFileProgress);
0049   connect(Archiver::instance, &Archiver::elapsedChanged, this, &MainWidget::updateElapsed);
0050 
0051   connect(Archiver::instance, &Archiver::backupTypeChanged, this, &MainWidget::setIsIncrementalBackup);
0052 
0053   connect(ui.folder, &QAbstractButton::clicked, this, &MainWidget::getMediaSize);
0054   connect(ui.targetDir, &KLineEdit::returnKeyPressed, this, &MainWidget::setTargetURL);
0055 
0056   KUrlCompletion *kc = new KUrlCompletion(KUrlCompletion::DirCompletion);
0057   ui.targetDir->setCompletionObject(kc);
0058   ui.targetDir->setAutoDeleteCompletionObject(true);
0059 
0060   Archiver::instance->setForceFullBackup(ui.forceFullBackup->isChecked());
0061 }
0062 
0063 //--------------------------------------------------------------------------------
0064 
0065 void MainWidget::setIsIncrementalBackup(bool incremental)
0066 {
0067   if ( incremental )
0068     ui.backupType->setText(i18n("Incremental Backup"));
0069   else
0070     ui.backupType->setText(i18n("Full Backup"));
0071 }
0072 
0073 //--------------------------------------------------------------------------------
0074 
0075 void MainWidget::startBackup()
0076 {
0077   ui.log->clear();
0078   ui.warnings->clear();
0079   ui.cancelButton->setEnabled(true);
0080   ui.startButton->setEnabled(false);
0081 
0082   Archiver::instance->setTarget(QUrl::fromUserInput(ui.targetDir->text()));
0083 
0084   QStringList includes, excludes;
0085   selector->getBackupList(includes, excludes);
0086 
0087   Archiver::instance->createArchive(includes, excludes);
0088 
0089   ui.forceFullBackup->setChecked(false);
0090   Archiver::instance->setForceFullBackup(false);
0091 
0092   ui.cancelButton->setEnabled(false);
0093   ui.startButton->setEnabled(true);
0094 }
0095 
0096 //--------------------------------------------------------------------------------
0097 
0098 void MainWidget::setSelector(Selector *s)
0099 {
0100   setCapacity(0);
0101   setFileProgress(100);  // to hide file progress bar
0102 
0103   selector = s;
0104 }
0105 
0106 //--------------------------------------------------------------------------------
0107 
0108 void MainWidget::getMediaSize()
0109 {
0110   QUrl url = QFileDialog::getExistingDirectoryUrl(this);
0111 
0112   if ( url.isEmpty() ) return;  // cancelled
0113 
0114   ui.targetDir->setText(url.toLocalFile());
0115   Archiver::instance->setTarget(QUrl::fromUserInput(ui.targetDir->text()));
0116 }
0117 
0118 //--------------------------------------------------------------------------------
0119 
0120 void MainWidget::updateElapsed(const QTime &elapsed)
0121 {
0122   ui.elapsedTime->setText(elapsed.toString(QStringLiteral("HH:mm:ss")));
0123 }
0124 
0125 //--------------------------------------------------------------------------------
0126 
0127 void MainWidget::setTargetURL(const QString &url)
0128 {
0129   ui.targetDir->setText(url);
0130   Archiver::instance->setTarget(QUrl::fromUserInput(ui.targetDir->text()));
0131 }
0132 
0133 //--------------------------------------------------------------------------------
0134 
0135 void MainWidget::updateTotalBytes()
0136 {
0137   // don't use KIO::convertSize() as this would not show good progress
0138   // after reaching 1 GB; always show MBs
0139   ui.totalSize->setText(
0140     QString::number(Archiver::instance->getTotalBytes() / 1024.0 / 1024.0, 'f', 2));
0141 }
0142 
0143 //--------------------------------------------------------------------------------
0144 
0145 void MainWidget::setFileProgress( int percent )
0146 {
0147   if ( percent == 100 )
0148   {
0149     ui.fileProgressLabel->hide();
0150     ui.fileProgress->hide();
0151   }
0152   else
0153   {
0154     ui.fileProgressLabel->show();
0155     ui.fileProgress->show();
0156     ui.fileProgress->setValue(percent);
0157   }
0158 }
0159 
0160 //--------------------------------------------------------------------------------
0161 
0162 void MainWidget::setCapacity(KIO::filesize_t bytes)
0163 {
0164   if ( bytes == 0 )
0165     ui.capacity->setText(i18n("unlimited"));
0166   else
0167   {
0168     QString txt = KIO::convertSize(bytes);
0169     if ( Archiver::instance->getMaxSliceMBs() != Archiver::UNLIMITED )
0170       txt += QStringLiteral(" (*)");
0171     ui.capacity->setText(txt);
0172   }
0173 }
0174 
0175 //--------------------------------------------------------------------------------
0176 
0177 #include "moc_MainWidget.cpp"