bug resolved

This commit is contained in:
Daniel Tartavel 2023-05-01 14:27:20 +02:00
parent c811f3db4f
commit f882ca5e42
6 changed files with 67 additions and 115 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 9.0.1, 2023-04-26T19:42:50. --> <!-- Written by QtCreator 9.0.1, 2023-05-01T14:24:07. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>

View File

@ -242,36 +242,37 @@ void MainWindow::quitApp()
void MainWindow::closeEvent (QCloseEvent *event) void MainWindow::closeEvent (QCloseEvent *event)
{ {
QMessageBox msgBox; QMessageBox msgBox;
QCheckBox *cb = new QCheckBox("Don't show this again ?"); QCheckBox *cb;
if (!event->spontaneous() || !isVisible()) if (!event->spontaneous() || !isVisible())
return; 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 <b>Quit</b> 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()); this->settings.setValue("CloseCheckbox", true);
msgBox.setInformativeText(tr("The program will keep running in the " }
"system tray. To terminate the program, " hide();
"choose <b>Quit</b> 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();
//event->accept(); //event->accept();
event->ignore(); event->ignore();
} }
} }
// Populate treeview with list of files // Populate treeview with list of files
@ -484,6 +485,7 @@ bool MainWindow::scanDir(QString server, int portN, QTreeWidgetItem *parent, QSt
QString filename; QString filename;
QString fileType; QString fileType;
QString date; QString date;
QString dirName = "";
QProcess * myProcess; QProcess * myProcess;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
bool isDir = false; bool isDir = false;
@ -493,6 +495,7 @@ bool MainWindow::scanDir(QString server, int portN, QTreeWidgetItem *parent, QSt
int nChild = 0; int nChild = 0;
bool r; bool r;
static uint looping; static uint looping;
QStringList dirs;
myProcess = new QProcess(this); myProcess = new QProcess(this);
myProcess->setProcessChannelMode(QProcess::MergedChannels); myProcess->setProcessChannelMode(QProcess::MergedChannels);
@ -556,7 +559,7 @@ bool MainWindow::scanDir(QString server, int portN, QTreeWidgetItem *parent, QSt
return false; return false;
} }
// extracting name, size and if is dir/file // extracting name, size and is dir/file
line = line.simplified(); line = line.simplified();
filename = line.section(" ", 4); filename = line.section(" ", 4);
if (filename != '.') if (filename != '.')
@ -569,8 +572,8 @@ bool MainWindow::scanDir(QString server, int portN, QTreeWidgetItem *parent, QSt
{ {
size = sizeA.at(0) + " " + UnitText[0] + " "; size = sizeA.at(0) + " " + UnitText[0] + " ";
}else }else
{ myProcess->setProcessEnvironment(env); {
myProcess->setProcessEnvironment(env);
size = sizeA.at(0) + "," + sizeA.at(1).left(2) + " " + UnitText[sizeA.count()-1] + " "; 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; isDir = false;
} }
date = line.section(' ', 2, 2); date = line.section(' ', 2, 2);
fileType = getFileType(filename); 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()) if (passwdOk == false and !this->connexion.password.isEmpty())
{ {
this->settings.setValue("Passwords/" + this->connexion.server + "/" + this->connexion.service + "/" + this->connexion.user, true); 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 // 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; QTreeWidgetItem *treeItem;
if (parent != nullptr) if (parent != nullptr)
@ -722,6 +735,20 @@ void MainWindow::addTreeItem(QString name, QString fileSize, QString fullsize, Q
{ {
treeItem = new QTreeWidgetItem(ui->treeWidget); 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) if (isDir == true)
{ {
// item is a dir // item is a dir
@ -729,23 +756,8 @@ void MainWindow::addTreeItem(QString name, QString fileSize, QString fullsize, Q
treeItem->setIcon(0, QIcon::fromTheme("folder")); treeItem->setIcon(0, QIcon::fromTheme("folder"));
}else }else
{ {
// item is a file this->settings.beginGroup("Downloaded/");
if (QFile::exists(this->downloading.savePath + "/" + name)) this->settings.endGroup();
{
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();
}
treeItem->setText(1,type); treeItem->setText(1,type);
} }
treeItem->setText(0, name); treeItem->setText(0, name);
@ -1401,3 +1413,4 @@ void MainWindow::on_actionHiddenService_triggered()
preparePopulateTree(); preparePopulateTree();
} }
} }

View File

@ -120,15 +120,17 @@ class MainWindow : public QMainWindow
bool rescan = false; bool rescan = false;
bool stopDlAsked; bool stopDlAsked;
QList<QString> UnitText { QList<QString> UnitText
{
tr("B"), tr("B"),
tr("KB"), tr("KB"),
tr("MB"), tr("MB"),
tr("GB"), tr("GB"),
tr("TB"), tr("TB"),
tr("PB") tr("PB")
}; };
QList<QChar> bwUnitChar{ QList<QChar> bwUnitChar
{
'K', 'K',
'M', 'M',
'T', 'T',
@ -152,7 +154,7 @@ class MainWindow : public QMainWindow
void listServices(); void listServices();
bool validateServer(QString server); bool validateServer(QString server);
bool isIpAddress(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 = "" ); bool scanDir(QString server, int portN, QTreeWidgetItem *parent = NULL, QString path = "" );
void startDownloading(); void startDownloading();
void loadSettings(); void loadSettings();
@ -199,8 +201,6 @@ class MainWindow : public QMainWindow
void on_actionDownload_triggered(); void on_actionDownload_triggered();
//void downloadingErrorSlot(QString);
void on_comboBox_currentIndexChanged(int index); void on_comboBox_currentIndexChanged(int index);
void on_buttonBox_accepted(); void on_buttonBox_accepted();

View File

@ -10,26 +10,4 @@ extern QApplication a;
void setPassword(QString account, QString pass); void setPassword(QString account, QString pass);
QString getPassword(const QString& name); 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 #endif // PASSWORD_H

View File

@ -8,42 +8,6 @@ using namespace std;
extern QMap<int, QString> rsyncErrorStrings; extern QMap<int, QString> rsyncErrorStrings;
extern QApplication a; 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<string> explode(const string& s, const char& c, int n = 0)
{
string buff;
vector<string> 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 // test return code of rsync
// return true in case of error // return true in case of error
bool testRsyncReturn(MainWindow * w, QProcess * myProcess) bool testRsyncReturn(MainWindow * w, QProcess * myProcess)

View File

@ -1,7 +1,6 @@
#ifndef TOOLS_H #ifndef TOOLS_H
#define TOOLS_H #define TOOLS_H
//#include "mainwindow.h"
#include <string> #include <string>
#include <vector> #include <vector>
#include <array> #include <array>
@ -14,8 +13,6 @@
using namespace std; using namespace std;
const vector<string> explode(const string& s, const char& c, int n);
FILE * popen2(array<string,8> argv, string type, int & pid); FILE * popen2(array<string,8> argv, string type, int & pid);
int pclose2(FILE * fp, pid_t pid); int pclose2(FILE * fp, pid_t pid);