@ -19,26 +19,51 @@
# include "src/net/updatecheck.h"
# include "src/net/updatecheck.h"
# include "src/persistence/settings.h"
# include "src/persistence/settings.h"
# ifndef APPIMAGE_UPDATER_BRIDGE_ENABLED
# include <QNetworkAccessManager>
# include <QNetworkAccessManager>
# else
# include <QApplication>
# include <QScreen>
# include <AppImageUpdaterBridge>
# include <AppImageUpdaterDialog>
# endif
# include <QDebug>
# include <QJsonDocument>
# include <QJsonDocument>
# include <QJsonObject>
# include <QJsonObject>
# include <QRegularExpression>
# include <QNetworkReply>
# include <QNetworkReply>
# include <QObject>
# include <QObject>
# include <QRegularExpression>
# include <QTimer>
# include <QTimer>
# include <QDebug>
# include <cassert>
# include <cassert>
# ifndef APPIMAGE_UPDATER_BRIDGE_ENABLED
namespace {
namespace {
const QString versionUrl { QStringLiteral ( " https://api.github.com/repos/qTox/qTox/releases/latest " ) } ;
const QString versionUrl { QStringLiteral ( " https://api.github.com/repos/qTox/qTox/releases/latest " ) } ;
} // namespace
} // namespace
# else
using AppImageUpdaterBridge : : AppImageDeltaRevisioner ;
using AppImageUpdaterBridge : : AppImageUpdaterDialog ;
# endif
UpdateCheck : : UpdateCheck ( const Settings & settings )
UpdateCheck : : UpdateCheck ( const Settings & settings )
: settings ( settings )
: settings ( settings )
{
{
updateTimer . start ( 1000 * 60 * 60 * 24 /* 1 day */ ) ;
updateTimer . start ( 1000 * 60 * 60 * 24 /* 1 day */ ) ;
connect ( & updateTimer , & QTimer : : timeout , this , & UpdateCheck : : checkForUpdate ) ;
connect ( & updateTimer , & QTimer : : timeout , this , & UpdateCheck : : checkForUpdate ) ;
# ifndef APPIMAGE_UPDATER_BRIDGE_ENABLED
connect ( & manager , & QNetworkAccessManager : : finished , this , & UpdateCheck : : handleResponse ) ;
connect ( & manager , & QNetworkAccessManager : : finished , this , & UpdateCheck : : handleResponse ) ;
# else
connect ( & revisioner , & AppImageDeltaRevisioner : : updateAvailable , this , & UpdateCheck : : handleUpdate ) ;
connect ( & revisioner , & AppImageDeltaRevisioner : : error , this , & UpdateCheck : : updateCheckFailed ,
Qt : : DirectConnection ) ;
updateDialog . reset ( new AppImageUpdaterDialog ( QPixmap ( " :/img/icons/qtox.svg " ) ) ) ;
connect ( updateDialog . data ( ) , & AppImageUpdaterDialog : : quit , QApplication : : instance ( ) ,
& QApplication : : quit , Qt : : QueuedConnection ) ;
connect ( updateDialog . data ( ) , & AppImageUpdaterDialog : : canceled , this , & UpdateCheck : : handleUpdateEnd ) ;
connect ( updateDialog . data ( ) , & AppImageUpdaterDialog : : finished , this , & UpdateCheck : : handleUpdateEnd ) ;
connect ( updateDialog . data ( ) , & AppImageUpdaterDialog : : error , this , & UpdateCheck : : handleUpdateEnd ) ;
# endif
}
}
void UpdateCheck : : checkForUpdate ( )
void UpdateCheck : : checkForUpdate ( )
@ -47,11 +72,30 @@ void UpdateCheck::checkForUpdate()
// still run the timer to check periodically incase setting changes
// still run the timer to check periodically incase setting changes
return ;
return ;
}
}
# ifndef APPIMAGE_UPDATER_BRIDGE_ENABLED
manager . setProxy ( settings . getProxy ( ) ) ;
manager . setProxy ( settings . getProxy ( ) ) ;
QNetworkRequest request { versionUrl } ;
QNetworkRequest request { versionUrl } ;
manager . get ( request ) ;
manager . get ( request ) ;
# else
revisioner . clear ( ) ;
revisioner . setProxy ( settings . getProxy ( ) ) ;
revisioner . checkForUpdate ( ) ;
# endif
}
}
# ifdef APPIMAGE_UPDATER_BRIDGE_ENABLED
void UpdateCheck : : initUpdate ( )
{
disconnect ( & revisioner , & AppImageDeltaRevisioner : : updateAvailable , this ,
& UpdateCheck : : handleUpdate ) ;
disconnect ( & revisioner , & AppImageDeltaRevisioner : : error , this , & UpdateCheck : : updateCheckFailed ) ;
updateDialog - > move ( QGuiApplication : : primaryScreen ( ) - > geometry ( ) . center ( )
- updateDialog - > rect ( ) . center ( ) ) ;
updateDialog - > init ( & revisioner ) ;
}
# endif
# ifndef APPIMAGE_UPDATER_BRIDGE_ENABLED
void UpdateCheck : : handleResponse ( QNetworkReply * reply )
void UpdateCheck : : handleResponse ( QNetworkReply * reply )
{
{
assert ( reply ! = nullptr ) ;
assert ( reply ! = nullptr ) ;
@ -85,10 +129,29 @@ void UpdateCheck::handleResponse(QNetworkReply *reply)
qInfo ( ) < < " Update available to version " < < latestVersion ;
qInfo ( ) < < " Update available to version " < < latestVersion ;
QUrl link { mainMap [ " html_url " ] . toString ( ) } ;
QUrl link { mainMap [ " html_url " ] . toString ( ) } ;
emit updateAvailable ( latestVersion , link ) ;
emit updateAvailable ( latestVersion , link ) ;
}
} else {
else {
qInfo ( ) < < " qTox is up to date " ;
qInfo ( ) < < " qTox is up to date " ;
emit upToDate ( ) ;
emit upToDate ( ) ;
}
}
reply - > deleteLater ( ) ;
reply - > deleteLater ( ) ;
}
}
# else
void UpdateCheck : : handleUpdate ( bool aval )
{
if ( aval ) {
qInfo ( ) < < " Update available " ;
emit updateAvailable ( ) ;
return ;
}
qInfo ( ) < < " qTox is up to date " ;
emit upToDate ( ) ;
}
void UpdateCheck : : handleUpdateEnd ( )
{
connect ( & revisioner , & AppImageDeltaRevisioner : : error , this , & UpdateCheck : : updateCheckFailed ,
( Qt : : ConnectionType ) ( Qt : : DirectConnection | Qt : : UniqueConnection ) ) ;
connect ( & revisioner , & AppImageDeltaRevisioner : : updateAvailable , this ,
& UpdateCheck : : handleUpdate , Qt : : UniqueConnection ) ;
}
# endif // APPIMAGE_UPDATER_BRIDGE_ENABLED