From 1638b30f463679079bc07f69037edff02f0004ad Mon Sep 17 00:00:00 2001 From: "Mr. eXoDia" Date: Fri, 11 Jul 2014 01:19:13 +0200 Subject: [PATCH] GUI: added simple update checker --- x64_dbg_gui/Project/Src/Gui/MainWindow.cpp | 9 +++ x64_dbg_gui/Project/Src/Gui/MainWindow.h | 4 ++ x64_dbg_gui/Project/Src/Gui/MainWindow.ui | 10 ++++ .../Project/Src/Utils/UpdateChecker.cpp | 52 ++++++++++++++++++ x64_dbg_gui/Project/Src/Utils/UpdateChecker.h | 22 ++++++++ x64_dbg_gui/Project/images/update.png | Bin 0 -> 917 bytes x64_dbg_gui/Project/resource.qrc | 1 + x64_dbg_gui/Project/x64_dbg.pro | 8 ++- 8 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 x64_dbg_gui/Project/Src/Utils/UpdateChecker.cpp create mode 100644 x64_dbg_gui/Project/Src/Utils/UpdateChecker.h create mode 100644 x64_dbg_gui/Project/images/update.png diff --git a/x64_dbg_gui/Project/Src/Gui/MainWindow.cpp b/x64_dbg_gui/Project/Src/Gui/MainWindow.cpp index 2e225d33..b0c686c4 100644 --- a/x64_dbg_gui/Project/Src/Gui/MainWindow.cpp +++ b/x64_dbg_gui/Project/Src/Gui/MainWindow.cpp @@ -141,6 +141,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi connect(ui->actionLabels,SIGNAL(triggered()),this,SLOT(displayLabels())); connect(ui->actionBookmarks,SIGNAL(triggered()),this,SLOT(displayBookmarks())); connect(ui->actionFunctions,SIGNAL(triggered()),this,SLOT(displayFunctions())); + connect(ui->actionCheckUpdates,SIGNAL(triggered()),this,SLOT(checkUpdates())); connect(Bridge::getBridge(), SIGNAL(updateWindowTitle(QString)), this, SLOT(updateWindowTitleSlot(QString))); connect(Bridge::getBridge(), SIGNAL(addRecentFile(QString)), this, SLOT(addRecentFile(QString))); @@ -159,6 +160,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi lastException=0; defaultSettings.SaveSettings(); + //Create updatechecker + mUpdateChecker = new UpdateChecker(this); + //setup menu api initMenuApi(); @@ -797,3 +801,8 @@ void MainWindow::displayFunctions() DbgCmdExec("functionlist"); displayReferencesWidget(); } + +void MainWindow::checkUpdates() +{ + mUpdateChecker->checkForUpdates(); +} diff --git a/x64_dbg_gui/Project/Src/Gui/MainWindow.h b/x64_dbg_gui/Project/Src/Gui/MainWindow.h index 2da69cc3..d490d708 100644 --- a/x64_dbg_gui/Project/Src/Gui/MainWindow.h +++ b/x64_dbg_gui/Project/Src/Gui/MainWindow.h @@ -22,6 +22,7 @@ #include "AppearanceDialog.h" #include "CloseDialog.h" #include "PatchDialog.h" +#include "UpdateChecker.h" namespace Ui { @@ -84,6 +85,7 @@ public slots: void displayLabels(); void displayBookmarks(); void displayFunctions(); + void checkUpdates(); private: Ui::MainWindow *ui; @@ -106,6 +108,8 @@ private: Configuration* mConfiguration; + UpdateChecker* mUpdateChecker; + const char* mWindowMainTitle; std::vector mMRUList; diff --git a/x64_dbg_gui/Project/Src/Gui/MainWindow.ui b/x64_dbg_gui/Project/Src/Gui/MainWindow.ui index c193eb82..12198755 100644 --- a/x64_dbg_gui/Project/Src/Gui/MainWindow.ui +++ b/x64_dbg_gui/Project/Src/Gui/MainWindow.ui @@ -84,6 +84,7 @@ &Help + @@ -594,6 +595,15 @@ Alt+F + + + + :/icons/images/update.png:/icons/images/update.png + + + Check for &Updates + + diff --git a/x64_dbg_gui/Project/Src/Utils/UpdateChecker.cpp b/x64_dbg_gui/Project/Src/Utils/UpdateChecker.cpp new file mode 100644 index 00000000..250cfb40 --- /dev/null +++ b/x64_dbg_gui/Project/Src/Utils/UpdateChecker.cpp @@ -0,0 +1,52 @@ +#include "UpdateChecker.h" +#include +#include "Bridge.h" + +UpdateChecker::UpdateChecker(QWidget* parent) +{ + mParent=parent; + connect(this, SIGNAL(finished(QNetworkReply*)), this, SLOT(finishedSlot(QNetworkReply*))); +} + +void UpdateChecker::checkForUpdates() +{ + get(QNetworkRequest(QUrl("http://x64dbg.com/version.txt"))); +} + +void UpdateChecker::finishedSlot(QNetworkReply* reply) +{ + if(reply->error() != QNetworkReply::NoError) //error + { + QMessageBox msg(QMessageBox::Critical, "Network Error!", reply->errorString()); + msg.setParent(mParent, Qt::Dialog); + msg.setWindowIcon(QIcon(":/icons/images/compile-error.png")); + msg.setWindowFlags(msg.windowFlags()&(~Qt::WindowContextHelpButtonHint)); + msg.exec(); + return; + } + bool ok = false; + int version = QString(reply->readAll()).toInt(&ok); + reply->close(); + if(!ok) + { + QMessageBox msg(QMessageBox::Critical, "Error!", "File on server could not be parsed..."); + msg.setParent(mParent); + msg.setWindowIcon(QIcon(":/icons/images/compile-error.png")); + msg.setWindowFlags(msg.windowFlags()&(~Qt::WindowContextHelpButtonHint)); + msg.exec(); + return; + } + QString info; + int dbgVersion = BridgeGetDbgVersion(); + if(version > dbgVersion) + info = QString().sprintf("New version v%d available!\nDownload at http://x64dbg.com\n\nYou are now on version v%d", version, dbgVersion); + else if(version < dbgVersion) + info = QString().sprintf("You have a development version (v%d) of x64_dbg!", dbgVersion); + else + info = QString().sprintf("You have the latest version (%d) of x64_dbg!", version); + QMessageBox msg(QMessageBox::Information, "Information", info); + msg.setWindowIcon(QIcon(":/icons/images/information.png")); + msg.setParent(mParent, Qt::Dialog); + msg.setWindowFlags(msg.windowFlags()&(~Qt::WindowContextHelpButtonHint)); + msg.exec(); +} diff --git a/x64_dbg_gui/Project/Src/Utils/UpdateChecker.h b/x64_dbg_gui/Project/Src/Utils/UpdateChecker.h new file mode 100644 index 00000000..0e927547 --- /dev/null +++ b/x64_dbg_gui/Project/Src/Utils/UpdateChecker.h @@ -0,0 +1,22 @@ +#ifndef UPDATECHECKER_H +#define UPDATECHECKER_H + +#include +#include + +class UpdateChecker : public QNetworkAccessManager +{ + Q_OBJECT +public: + UpdateChecker(QWidget* parent); + void checkForUpdates(); + +private slots: + void finishedSlot(QNetworkReply* reply); + +private: + QWidget* mParent; + +}; + +#endif // UPDATECHECKER_H diff --git a/x64_dbg_gui/Project/images/update.png b/x64_dbg_gui/Project/images/update.png new file mode 100644 index 0000000000000000000000000000000000000000..5776936ca20eb93436c5407465643cd9e135a91f GIT binary patch literal 917 zcmV;G18V$s`WML4BGr7xuoDpf&sq!yv7La3W=QGY;Lq|3767ew8V6^I20sYoOgs;ZINf&!FS zK!}~l4t1TxZsKvq9@{gX+dD~{lp}r8%st=ZjOJWIDFq<}J ztr94`3)`CM-54h9{Vc=J3@um7y9{#jD#+l`IJ)M|Ot?NamNrxIkf}&&6*UvaTrPg* zaXvaBCo_L`DogWBa+-zy!0_ePh_XVh@&z`-)M@^1qj0qK!~HW>X^O9m_2 z_xdg3`E~jW&+lJOa2%Ip(lWO*q+Yv_juppavYp~WWtbg;ZU+bq7f{Iu&~Uc#dZw64 zik0zR`uqh+l5(ObX7(na#%4CsZzT%FD7JJJ|It2pJ#ADL1k?&Zbf|=H%@Gsf$;~AghJI9vj;l9ClpQv*G$isR6=hU!zW2Z6)V&RbLb6aJ-+4|$3#74dx zdGulUx9c(5egjbIy z-+*OVvuu%en&ib@aMMmR1Q~J+6^7>IRicNs2si{2!q%|NN zz}dJTSB4byM`Wa2wJr5MvDNsxEl0n~>(0Hq3ni?suI{AoT_!hWSx4ZbByL>3a_Lwo z5|$cVR2e7E;Jj+^Tz~-pW_eMTR|84W00000NkvXXu0mjfK0>*8 literal 0 HcmV?d00001 diff --git a/x64_dbg_gui/Project/resource.qrc b/x64_dbg_gui/Project/resource.qrc index 7a87fa8a..d49103d8 100644 --- a/x64_dbg_gui/Project/resource.qrc +++ b/x64_dbg_gui/Project/resource.qrc @@ -38,5 +38,6 @@ images/functions.png images/labels.png images/comments.png + images/update.png diff --git a/x64_dbg_gui/Project/x64_dbg.pro b/x64_dbg_gui/Project/x64_dbg.pro index 929316cd..b6ec77ad 100644 --- a/x64_dbg_gui/Project/x64_dbg.pro +++ b/x64_dbg_gui/Project/x64_dbg.pro @@ -4,7 +4,7 @@ # #------------------------------------------------- -QT += core gui +QT += core gui network greaterThan(QT_MAJOR_VERSION, 4): QT += widgets @@ -77,7 +77,8 @@ SOURCES += \ Src/QHexEdit/QHexEditPrivate.cpp \ Src/QHexEdit/XByteArray.cpp \ Src/Gui/PatchDialog.cpp \ - Src/Gui/PatchDialogGroupSelector.cpp + Src/Gui/PatchDialogGroupSelector.cpp \ + Src/Utils/UpdateChecker.cpp HEADERS += \ @@ -133,7 +134,8 @@ HEADERS += \ Src/QHexEdit/QHexEditPrivate.h \ Src/QHexEdit/XByteArray.h \ Src/Gui/PatchDialog.h \ - Src/Gui/PatchDialogGroupSelector.h + Src/Gui/PatchDialogGroupSelector.h \ + Src/Utils/UpdateChecker.h INCLUDEPATH += \