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"