GUI updater works...

This commit is contained in:
Martin Rotter 2014-04-13 22:17:12 +02:00
parent c3513a3c9e
commit 7be1c7e1ac
3 changed files with 133 additions and 61 deletions

View File

@ -5,19 +5,123 @@
#include <QApplication>
#include <QDesktopWidget>
#include <QIcon>
#include <QDir>
#include <QFile>
#include <QFileInfo>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QKeyEvent>
#include <QProcess>
FormUpdater::FormUpdater(QWidget *parent) : QMainWindow(parent) {
FormUpdater::FormUpdater(QWidget *parent)
: QMainWindow(parent),
m_state(NoState),
m_txtOutput(new QTextEdit(this)) {
m_txtOutput->setReadOnly(true);
m_txtOutput->setFocusPolicy(Qt::NoFocus);
setCentralWidget(m_txtOutput);
setWindowTitle("RSS Guard updater");
setWindowIcon(QIcon(APP_ICON_PATH));
moveToCenterAndResize();
}
FormUpdater::~FormUpdater() {
}
void FormUpdater::startUpgrade() {
m_txtOutput->append("Welcome to RSS Guard updater.");
if (QApplication::arguments().size() != 5) {
m_txtOutput->append("Insufficient arguments passed. Update process cannot proceed.");
m_txtOutput->append("Press any key to exit updater...");
m_state = ExitError;
// Ted je nastavenej state a pri keyPressEvent se appka ukonci
}
// do datovejch memberu teto tridy ulozit argumenty a pokracovat
}
void FormUpdater::keyPressEvent(QKeyEvent* event) {
event->ignore();
switch (m_state) {
case NoState:
break;
case ExitNormal:
break;
case ExitError:
qApp->quit();
break;
default:
break;
}
}
void FormUpdater::moveToCenterAndResize() {
resize(500, 400);
move(qApp->desktop()->screenGeometry().center() - rect().center());
}
bool FormUpdater::removeDirectory(const QString& directory_name,
const QStringList& exception_file_list,
const QStringList& exception_folder_list) {
bool result = true;
QDir dir(directory_name);
if (dir.exists(directory_name)) {
foreach (QFileInfo info,
dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) {
if (info.isDir()) {
if (!exception_folder_list.contains(info.fileName())) {
result &= removeDirectory(info.absoluteFilePath(), exception_file_list);
}
}
else if (!exception_file_list.contains(info.fileName())) {
result &= QFile::remove(info.absoluteFilePath());
}
}
result &= dir.rmdir(directory_name);
}
return result;
}
bool FormUpdater::copyDirectory(QString source, QString destination) {
QDir dir(source);
if (! dir.exists()) {
return false;
}
foreach (QString d, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) {
QString dst_path = destination + QDir::separator() + d;
dir.mkpath(dst_path);
copyDirectory(source + QDir::separator() + d, dst_path);
}
foreach (QString f, dir.entryList(QDir::Files)) {
QString original_file = source + QDir::separator() + f;
QString destination_file = destination + QDir::separator() + f;
if (!QFile::exists(destination_file) || QFile::remove(destination_file)) {
if (QFile::copy(original_file, destination_file)) {
qDebug("Copied file %s", qPrintable(f));
}
else {
qDebug("Failed to copy file %s", qPrintable(original_file));
}
}
else {
qDebug("Failed to remove file %s", qPrintable(original_file));
}
}
return true;
}

View File

@ -4,17 +4,43 @@
#include <QMainWindow>
class QTextEdit;
class QKeyEvent;
class FormUpdater : public QMainWindow {
Q_OBJECT
public:
enum UpdaterState {
NoState,
ExitNormal,
ExitError
};
// Constructors and destructors.
explicit FormUpdater(QWidget *parent = 0);
virtual ~FormUpdater();
void startUpgrade();
protected:
void keyPressEvent(QKeyEvent *event);
private:
void moveToCenterAndResize();
// File/directory manipulators.
bool copyDirectory(QString source, QString destination);
bool removeDirectory(const QString & directory_name,
const QStringList &exception_file_list = QStringList(),
const QStringList &exception_folder_list = QStringList());
private:
UpdaterState m_state;
QTextEdit *m_txtOutput;
QString m_rssguardExecutablePath;
};
#endif // FORMUPDATER_H

View File

@ -29,65 +29,6 @@
#include <iostream>
#include <limits>
/*
bool removeDir(const QString & dirName,
const QStringList &exception_file_list = QStringList(),
const QStringList &exception_folder_list = QStringList()) {
bool result = true;
QDir dir(dirName);
if (dir.exists(dirName)) {
foreach (QFileInfo info,
dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) {
if (info.isDir()) {
if (!exception_folder_list.contains(info.fileName())) {
result &= removeDir(info.absoluteFilePath(), exception_file_list);
}
}
else if (!exception_file_list.contains(info.fileName())) {
result &= QFile::remove(info.absoluteFilePath());
}
}
result &= dir.rmdir(dirName);
}
return result;
}
bool copyPath(QString src, QString dst) {
QDir dir(src);
if (! dir.exists()) {
return false;
}
foreach (QString d, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) {
QString dst_path = dst + QDir::separator() + d;
dir.mkpath(dst_path);
copyPath(src + QDir::separator() + d, dst_path);
}
foreach (QString f, dir.entryList(QDir::Files)) {
QString original_file = src + QDir::separator() + f;
QString destination_file = dst + QDir::separator() + f;
if (!QFile::exists(destination_file) || QFile::remove(destination_file)) {
if (QFile::copy(original_file, destination_file)) {
qDebug("Copied file %s", qPrintable(f));
}
else {
qDebug("Failed to copy file %s", qPrintable(original_file));
}
}
else {
qDebug("Failed to remove file %s", qPrintable(original_file));
}
}
return true;
}*/
// Main entry point to "rssguard_updater.exe".
// It expects 4 ARGUMENTS:
// 0) - the actual path of this process,
@ -102,6 +43,7 @@ int main(int argc, char *argv[]) {
FormUpdater main_form;
main_form.show();
main_form.startUpgrade();
return application.exec();