///////////////////////////////////////////////////////////////////////////////
// Simple x264 Launcher
-// Copyright (C) 2004-2013 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2016 LoRd_MuldeR <MuldeR2@GMX.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
#pragma once
#include <QDialog>
+#include <QMap>
+
+class QMovie;
+class SysinfoModel;
namespace Ui
{
class UpdaterDialog;
}
+namespace MUtils
+{
+ class UpdateChecker;
+}
+
class UpdaterDialog : public QDialog
{
Q_OBJECT
public:
- UpdaterDialog(QWidget *parent);
+ UpdaterDialog(QWidget *parent, const SysinfoModel *sysinfo, const char *const updateUrl);
~UpdaterDialog(void);
+ typedef struct
+ {
+ const char* name;
+ const char* hash;
+ const bool exec;
+ }
+ binary_t;
+
+ static const int READY_TO_INSTALL_UPDATE = 42;
+ static const binary_t BINARIES[];
+
+ inline bool getSuccess(void) { return m_success; }
+
+protected:
+ virtual bool event(QEvent *e);
+ virtual void showEvent(QShowEvent *event);
+ virtual void closeEvent(QCloseEvent *e);
+ virtual void keyPressEvent(QKeyEvent *event);
+
+private slots:
+ void initUpdate(void);
+ void checkForUpdates(void);
+ void threadStatusChanged(int status);
+ void threadMessageLogged(const QString &message);
+ void threadFinished(void);
+ void updateFinished(void);
+ void openUrl(const QString &url);
+ void installUpdate(void);
+
private:
Ui::UpdaterDialog *const ui;
+
+ bool checkBinaries();
+ bool checkFileHash(const QString &filePath, const char *expectedHash);
+ void cleanFiles(void);
+
+ const SysinfoModel *const m_sysinfo;
+ const char *const m_updateUrl;
+
+ bool m_firstShow;
+ bool m_success;
+
+ QScopedPointer<QMovie> m_animator;
+ QScopedPointer<MUtils::UpdateChecker> m_thread;
+
+ unsigned long m_updaterProcess;
+ QStringList m_logFile;
+ QMap<QString,QString> m_binaries;
+ int m_status;
};