mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
Dust off windows updater code
This commit is contained in:
parent
ef019a9ae3
commit
f13eba1a9c
|
@ -44,7 +44,7 @@ const QString AutoUpdater::platform = "win64";
|
||||||
const QString AutoUpdater::platform = "win32";
|
const QString AutoUpdater::platform = "win32";
|
||||||
#endif
|
#endif
|
||||||
const QString AutoUpdater::updaterBin = "qtox-updater.exe";
|
const QString AutoUpdater::updaterBin = "qtox-updater.exe";
|
||||||
const QString AutoUpdater::updateServer = "https://qtox-win.pkg.tox.chat";
|
const QString AutoUpdater::updateServer = "http://45.79.166.124";
|
||||||
|
|
||||||
unsigned char AutoUpdater::key[crypto_sign_PUBLICKEYBYTES] =
|
unsigned char AutoUpdater::key[crypto_sign_PUBLICKEYBYTES] =
|
||||||
{
|
{
|
||||||
|
@ -80,12 +80,9 @@ bool AutoUpdater::isUpdateAvailable()
|
||||||
if (isDownloadingUpdate)
|
if (isDownloadingUpdate)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
VersionInfo newVersion = getUpdateVersion();
|
QByteArray updateFlist = getUpdateFlist();
|
||||||
if (newVersion.timestamp <= TIMESTAMP
|
QList<UpdateFileMeta> diff = genUpdateDiff(parseFlist(updateFlist));
|
||||||
|| newVersion.versionString.isEmpty() || newVersion.versionString == GIT_VERSION)
|
return !diff.isEmpty();
|
||||||
return false;
|
|
||||||
else
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AutoUpdater::VersionInfo AutoUpdater::getUpdateVersion()
|
AutoUpdater::VersionInfo AutoUpdater::getUpdateVersion()
|
||||||
|
@ -227,35 +224,34 @@ QByteArray AutoUpdater::getUpdateFlist()
|
||||||
return flist;
|
return flist;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray AutoUpdater::getLocalFlist()
|
|
||||||
{
|
|
||||||
QByteArray flist;
|
|
||||||
|
|
||||||
QFile flistFile("flist");
|
|
||||||
if (!flistFile.open(QIODevice::ReadOnly))
|
|
||||||
{
|
|
||||||
qWarning() << "getLocalFlist: Can't open local flist";
|
|
||||||
return flist;
|
|
||||||
}
|
|
||||||
|
|
||||||
flist = flistFile.readAll();
|
|
||||||
flistFile.close();
|
|
||||||
|
|
||||||
return flist;
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<AutoUpdater::UpdateFileMeta> AutoUpdater::genUpdateDiff(QList<UpdateFileMeta> updateFlist)
|
QList<AutoUpdater::UpdateFileMeta> AutoUpdater::genUpdateDiff(QList<UpdateFileMeta> updateFlist)
|
||||||
{
|
{
|
||||||
QList<UpdateFileMeta> diff;
|
QList<UpdateFileMeta> diff;
|
||||||
QList<UpdateFileMeta> localFlist = parseFlist(getLocalFlist());
|
|
||||||
|
|
||||||
for (UpdateFileMeta file : updateFlist)
|
for (UpdateFileMeta file : updateFlist)
|
||||||
if (!localFlist.contains(file))
|
if (!isUpToDate(file))
|
||||||
diff += file;
|
diff += file;
|
||||||
|
|
||||||
return diff;
|
return diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AutoUpdater::isUpToDate(AutoUpdater::UpdateFileMeta fileMeta)
|
||||||
|
{
|
||||||
|
QString appDir = qApp->applicationDirPath();
|
||||||
|
qDebug() << "App path:"<<appDir;
|
||||||
|
|
||||||
|
QFile file(appDir+QDir::separator()+fileMeta.installpath);
|
||||||
|
if (!file.open(QIODevice::ReadOnly))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// If the data we have is corrupted or old, mark it for update
|
||||||
|
QByteArray data = file.readAll();
|
||||||
|
if (crypto_sign_verify_detached(fileMeta.sig, (unsigned char*)data.data(), data.size(), key) != 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
AutoUpdater::UpdateFile AutoUpdater::getUpdateFile(UpdateFileMeta fileMeta)
|
AutoUpdater::UpdateFile AutoUpdater::getUpdateFile(UpdateFileMeta fileMeta)
|
||||||
{
|
{
|
||||||
UpdateFile file;
|
UpdateFile file;
|
||||||
|
@ -497,9 +493,25 @@ void AutoUpdater::checkUpdatesAsyncInteractiveWorker()
|
||||||
QString updateDirStr = Settings::getInstance().getSettingsDirPath() + "/update/";
|
QString updateDirStr = Settings::getInstance().getSettingsDirPath() + "/update/";
|
||||||
QDir updateDir(updateDirStr);
|
QDir updateDir(updateDirStr);
|
||||||
|
|
||||||
if ((updateDir.exists() && QFile(updateDirStr+"flist").exists())
|
|
||||||
|| GUI::askQuestion(QObject::tr("Update", "The title of a message box"),
|
|
||||||
QObject::tr("An update is available, do you want to download it now?\nIt will be installed when qTox restarts."), true, false))
|
if (updateDir.exists() && QFile(updateDirStr+"flist").exists())
|
||||||
|
{
|
||||||
|
downloadUpdate();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
VersionInfo newVersion = getUpdateVersion();
|
||||||
|
QString contentText = QObject::tr("An update is available, do you want to download it now?\n"
|
||||||
|
"It will be installed when qTox restarts.");
|
||||||
|
if (!newVersion.versionString.isEmpty())
|
||||||
|
contentText += "\n\n" + QObject::tr("Version %1, %2").arg(newVersion.versionString,
|
||||||
|
QDateTime::fromMSecsSinceEpoch(newVersion.timestamp*1000).toString());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (GUI::askQuestion(QObject::tr("Update", "The title of a message box"),
|
||||||
|
contentText, true, false))
|
||||||
{
|
{
|
||||||
downloadUpdate();
|
downloadUpdate();
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,10 +101,10 @@ protected:
|
||||||
/// Gets the update server's flist. Returns an empty array on error
|
/// Gets the update server's flist. Returns an empty array on error
|
||||||
/// Will try to follow qTox's proxy settings, may block and processEvents
|
/// Will try to follow qTox's proxy settings, may block and processEvents
|
||||||
static QByteArray getUpdateFlist();
|
static QByteArray getUpdateFlist();
|
||||||
/// Gets the local flist. Returns an empty array on error
|
|
||||||
static QByteArray getLocalFlist();
|
|
||||||
/// Generates a list of files we need to update
|
/// Generates a list of files we need to update
|
||||||
static QList<UpdateFileMeta> genUpdateDiff(QList<UpdateFileMeta> updateFlist);
|
static QList<UpdateFileMeta> genUpdateDiff(QList<UpdateFileMeta> updateFlist);
|
||||||
|
/// Checks if we have an up to date version of this file locally installed
|
||||||
|
static bool isUpToDate(UpdateFileMeta file);
|
||||||
/// Tries to fetch the file from the update server. Returns a file with a null QByteArray on error.
|
/// Tries to fetch the file from the update server. Returns a file with a null QByteArray on error.
|
||||||
/// Note that a file with an empty but non-null QByteArray is not an error, merely a file of size 0.
|
/// Note that a file with an empty but non-null QByteArray is not an error, merely a file of size 0.
|
||||||
/// Will try to follow qTox's proxy settings, may block and processEvents
|
/// Will try to follow qTox's proxy settings, may block and processEvents
|
||||||
|
|
|
@ -22,11 +22,12 @@
|
||||||
#include "serialize.h"
|
#include "serialize.h"
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
unsigned char key[crypto_sign_PUBLICKEYBYTES] =
|
unsigned char key[crypto_sign_PUBLICKEYBYTES] =
|
||||||
{
|
{
|
||||||
0xa5, 0x80, 0xf3, 0xb7, 0xd0, 0x10, 0xc0, 0xf9, 0xd6, 0xcf, 0x48, 0x15, 0x99, 0x70, 0x92, 0x49,
|
0x20, 0x89, 0x39, 0xaa, 0x9a, 0xe8, 0xb5, 0x21, 0x0e, 0xac, 0x02, 0xa9, 0xc4, 0x92, 0xd9, 0xa2,
|
||||||
0xf6, 0xe8, 0xe5, 0xe2, 0x6c, 0x73, 0x8c, 0x48, 0x25, 0xed, 0x01, 0x72, 0xf7, 0x6c, 0x17, 0x28
|
0x17, 0x83, 0xbd, 0x78, 0x0a, 0xda, 0x33, 0xcd, 0xa5, 0xc6, 0x44, 0xc7, 0xfc, 0xed, 0x00, 0x13
|
||||||
};
|
};
|
||||||
|
|
||||||
QByteArray getLocalFlist()
|
QByteArray getLocalFlist()
|
||||||
|
|
|
@ -13,6 +13,8 @@ TEMPLATE = app
|
||||||
|
|
||||||
CONFIG += c++11
|
CONFIG += c++11
|
||||||
|
|
||||||
|
QMAKE_CXXFLAGS += -fno-exceptions
|
||||||
|
|
||||||
SOURCES += main.cpp\
|
SOURCES += main.cpp\
|
||||||
widget.cpp \
|
widget.cpp \
|
||||||
settingsDir.cpp \
|
settingsDir.cpp \
|
||||||
|
|
|
@ -115,6 +115,7 @@ void Widget::update()
|
||||||
setProgress(1);
|
setProgress(1);
|
||||||
|
|
||||||
QList<UpdateFileMeta> updateFlist = parseFlist(updateFlistData);
|
QList<UpdateFileMeta> updateFlist = parseFlist(updateFlistData);
|
||||||
|
|
||||||
setProgress(2);
|
setProgress(2);
|
||||||
QList<UpdateFileMeta> diff = genUpdateDiff(updateFlist);
|
QList<UpdateFileMeta> diff = genUpdateDiff(updateFlist);
|
||||||
setProgress(4);
|
setProgress(4);
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string><a href="https://tox.im">https://tox.im</a></string>
|
<string><html><head/><body><p><a href="https://tox.im"><span style=" text-decoration: underline; color:#0000ff;">https://tox.chat</span></a></p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignCenter</set>
|
<set>Qt::AlignCenter</set>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user