From f882ca5e42a6499f1c12d99985513ea2da2ed879 Mon Sep 17 00:00:00 2001 From: Daniel Tartavel Date: Mon, 1 May 2023 14:27:20 +0200 Subject: [PATCH] bug resolved --- RsyncUI.pro.user | 2 +- mainwindow.cpp | 107 ++++++++++++++++++++++++++--------------------- mainwindow.h | 12 +++--- password.h | 22 ---------- tools.cpp | 36 ---------------- tools.h | 3 -- 6 files changed, 67 insertions(+), 115 deletions(-) diff --git a/RsyncUI.pro.user b/RsyncUI.pro.user index f367f34..e69f627 100644 --- a/RsyncUI.pro.user +++ b/RsyncUI.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/mainwindow.cpp b/mainwindow.cpp index be05e17..92fffba 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -242,36 +242,37 @@ void MainWindow::quitApp() void MainWindow::closeEvent (QCloseEvent *event) { QMessageBox msgBox; - QCheckBox *cb = new QCheckBox("Don't show this again ?"); + QCheckBox *cb; if (!event->spontaneous() || !isVisible()) return; - if (trayIcon->isVisible() and this->settings.value("CloseCheckbox").toBool() == false) + if (trayIcon->isVisible() and this->settings.value("CloseCheckbox").toBool() == false) + { + cb = new QCheckBox("Don't show this again ?"); + msgBox.setWindowTitle(a.applicationName()); + msgBox.setInformativeText(tr("The program will keep running in the " + "system tray. To terminate the program, " + "choose Quit in the context menu " + "of the system tray entry.")); + + msgBox.addButton(QMessageBox::Ok); + //msgBox.addButton(QMessageBox::No); + // msgBox.setDefaultButton(QMessageBox::Yes); + msgBox.setCheckBox(cb); + msgBox.exec(); + msgBox.clickedButton(); + + // if response is yes then loading list + if (cb->isChecked()) { - msgBox.setWindowTitle(a.applicationName()); - msgBox.setInformativeText(tr("The program will keep running in the " - "system tray. To terminate the program, " - "choose Quit in the context menu " - "of the system tray entry.")); - - msgBox.addButton(QMessageBox::Ok); - //msgBox.addButton(QMessageBox::No); - // msgBox.setDefaultButton(QMessageBox::Yes); - msgBox.setCheckBox(cb); - msgBox.exec(); - msgBox.clickedButton(); - - // if response is yes then loading list - if (cb->isChecked()) - { - this->settings.setValue("CloseCheckbox", true); - } - hide(); + this->settings.setValue("CloseCheckbox", true); + } + hide(); - //event->accept(); - event->ignore(); - } + //event->accept(); + event->ignore(); + } } // Populate treeview with list of files @@ -484,6 +485,7 @@ bool MainWindow::scanDir(QString server, int portN, QTreeWidgetItem *parent, QSt QString filename; QString fileType; QString date; + QString dirName = ""; QProcess * myProcess; QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); bool isDir = false; @@ -493,6 +495,7 @@ bool MainWindow::scanDir(QString server, int portN, QTreeWidgetItem *parent, QSt int nChild = 0; bool r; static uint looping; + QStringList dirs; myProcess = new QProcess(this); myProcess->setProcessChannelMode(QProcess::MergedChannels); @@ -556,7 +559,7 @@ bool MainWindow::scanDir(QString server, int portN, QTreeWidgetItem *parent, QSt return false; } - // extracting name, size and if is dir/file + // extracting name, size and is dir/file line = line.simplified(); filename = line.section(" ", 4); if (filename != '.') @@ -569,8 +572,8 @@ bool MainWindow::scanDir(QString server, int portN, QTreeWidgetItem *parent, QSt { size = sizeA.at(0) + " " + UnitText[0] + " "; }else - { myProcess->setProcessEnvironment(env); - + { + myProcess->setProcessEnvironment(env); size = sizeA.at(0) + "," + sizeA.at(1).left(2) + " " + UnitText[sizeA.count()-1] + " "; } @@ -581,9 +584,19 @@ bool MainWindow::scanDir(QString server, int portN, QTreeWidgetItem *parent, QSt { isDir = false; } + date = line.section(' ', 2, 2); fileType = getFileType(filename); - addTreeItem(filename, size, fullsize, fileType, date, isDir, parent); + if (!path.isEmpty()) + { + if (path.endsWith('/')) + { + path.chop(1); + } + dirs = path.split('/'); + dirName = dirs[dirs.size()-1]; + } + addTreeItem(filename, size, fullsize, fileType, date, isDir, dirName, parent); if (passwdOk == false and !this->connexion.password.isEmpty()) { this->settings.setValue("Passwords/" + this->connexion.server + "/" + this->connexion.service + "/" + this->connexion.user, true); @@ -710,9 +723,9 @@ void MainWindow::on_connectButton_clicked() } // add parent in treeview -void MainWindow::addTreeItem(QString name, QString fileSize, QString fullsize, QString type, QString date, bool isDir=false, QTreeWidgetItem *parent=nullptr) +void MainWindow::addTreeItem(QString name, QString fileSize, QString fullsize, QString type, QString date, bool isDir=false, QString dirName="", QTreeWidgetItem *parent=nullptr) { - QFont * font = new QFont(); + QFont font; QTreeWidgetItem *treeItem; if (parent != nullptr) @@ -722,6 +735,20 @@ void MainWindow::addTreeItem(QString name, QString fileSize, QString fullsize, Q { treeItem = new QTreeWidgetItem(ui->treeWidget); } + + // item is a file + if (QFile::exists(this->downloading.savePath + "/" + name) or QFile::exists(this->downloading.savePath + "/" + dirName + "/" + name)) + { + QBrush b (Qt::green); + treeItem->setForeground(0, b); + treeItem->setFont(0, font); + }else if (this->settings.contains(name)) + { + QBrush b (Qt::red); + treeItem->setForeground(0, b); + treeItem->setFont(0, font); + } + if (isDir == true) { // item is a dir @@ -729,23 +756,8 @@ void MainWindow::addTreeItem(QString name, QString fileSize, QString fullsize, Q treeItem->setIcon(0, QIcon::fromTheme("folder")); }else { - // item is a file - if (QFile::exists(this->downloading.savePath + "/" + name)) - { - QBrush b (Qt::green); - treeItem->setForeground(0, b); - treeItem->setFont(0, *font); - }else - { - this->settings.beginGroup("Downloaded/"); - if (this->settings.contains(name)) - { - QBrush b (Qt::red); - treeItem->setForeground(0, b); - treeItem->setFont(0, *font); - } - this->settings.endGroup(); - } + this->settings.beginGroup("Downloaded/"); + this->settings.endGroup(); treeItem->setText(1,type); } treeItem->setText(0, name); @@ -1401,3 +1413,4 @@ void MainWindow::on_actionHiddenService_triggered() preparePopulateTree(); } } + diff --git a/mainwindow.h b/mainwindow.h index eff508f..9d460d0 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -120,15 +120,17 @@ class MainWindow : public QMainWindow bool rescan = false; bool stopDlAsked; - QList UnitText { + QList UnitText + { tr("B"), tr("KB"), tr("MB"), tr("GB"), tr("TB"), tr("PB") - }; - QList bwUnitChar{ + }; + QList bwUnitChar + { 'K', 'M', 'T', @@ -152,7 +154,7 @@ class MainWindow : public QMainWindow void listServices(); bool validateServer(QString server); bool isIpAddress(QString server); - void addTreeItem(QString name, QString fileSize, QString fullsize, QString type, QString date, bool isDir, QTreeWidgetItem *parent); + void addTreeItem(QString name, QString fileSize, QString fullsize, QString type, QString date, bool isDir, QString dirName, QTreeWidgetItem *parent); bool scanDir(QString server, int portN, QTreeWidgetItem *parent = NULL, QString path = "" ); void startDownloading(); void loadSettings(); @@ -199,8 +201,6 @@ class MainWindow : public QMainWindow void on_actionDownload_triggered(); - //void downloadingErrorSlot(QString); - void on_comboBox_currentIndexChanged(int index); void on_buttonBox_accepted(); diff --git a/password.h b/password.h index f73bb98..db45a69 100644 --- a/password.h +++ b/password.h @@ -10,26 +10,4 @@ extern QApplication a; void setPassword(QString account, QString pass); QString getPassword(const QString& name); -/*class Password : QObject -{ - public: - QString appName; - QKeychain::WritePasswordJob * passwdJob; - QKeychain::ReadPasswordJob * readPass; - MainWindow * mw; - QString password; - QSettings passwdSettings{a.applicationName(),a.applicationName()}; - - Password(); - ~Password(); - - void store(QString, QString); - QString read(QString); - bool remove(QString); - - private slots: - void storeFinished(); - void readFinished(); -};*/ - #endif // PASSWORD_H diff --git a/tools.cpp b/tools.cpp index d988e0a..051fe4e 100644 --- a/tools.cpp +++ b/tools.cpp @@ -8,42 +8,6 @@ using namespace std; extern QMap rsyncErrorStrings; extern QApplication a; -//Take a string and explode it in array -// s => string to explode -// c => character separator -// n => number of results in array, the last is the rest of string to end -const vector explode(const string& s, const char& c, int n = 0) -{ - string buff; - vector v; - size_t pos = 0; - size_t ppos = 0; - int i = 0; - - while (i < n - 1) - { - pos = s.find(c, ppos); - if (pos != string::npos) - { - buff = s.substr(ppos, pos - ppos); - if (buff != "") - { - i++; - v.push_back(s.substr(ppos, pos - ppos)); - } - ppos = pos + 1; - }else - { - break; - } - } - if (ppos < s.size()) - { - v.push_back(s.substr(ppos)); - } - return v; -} - // test return code of rsync // return true in case of error bool testRsyncReturn(MainWindow * w, QProcess * myProcess) diff --git a/tools.h b/tools.h index a8e6317..36f05d6 100644 --- a/tools.h +++ b/tools.h @@ -1,7 +1,6 @@ #ifndef TOOLS_H #define TOOLS_H -//#include "mainwindow.h" #include #include #include @@ -14,8 +13,6 @@ using namespace std; -const vector explode(const string& s, const char& c, int n); - FILE * popen2(array argv, string type, int & pid); int pclose2(FILE * fp, pid_t pid);