2011-03-03 18:29:20 +01:00
/* ============================================================
* QupZilla - WebKit based browser
2012-01-01 15:29:55 +01:00
* Copyright ( C ) 2010 - 2012 David Rosca < nowrep @ gmail . com >
2011-03-03 18:29:20 +01:00
*
* 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
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
2011-03-02 16:57:41 +01:00
# include "updater.h"
# include "qupzilla.h"
2012-01-21 23:19:38 +01:00
# include "mainapplication.h"
2011-03-02 16:57:41 +01:00
# include "tabwidget.h"
2011-04-24 22:40:35 +02:00
# include "desktopnotificationsfactory.h"
2011-03-02 16:57:41 +01:00
2012-02-29 18:33:50 +01:00
# include <QTimer>
# include <QNetworkAccessManager>
# include <QNetworkRequest>
# include <QNetworkReply>
2011-12-12 21:14:43 +01:00
Updater : : Updater ( QupZilla * mainClass , QObject * parent )
: QObject ( parent )
2011-11-06 17:01:23 +01:00
, p_QupZilla ( mainClass )
2011-03-02 16:57:41 +01:00
{
2011-11-06 17:01:23 +01:00
QTimer : : singleShot ( 60 * 1000 , this , SLOT ( start ( ) ) ) ; //Start checking after 1 minute
2011-03-02 16:57:41 +01:00
}
2011-10-05 16:48:23 +02:00
Updater : : Version Updater : : parseVersionFromString ( const QString & string )
{
Version ver ;
ver . isValid = false ;
QStringList v = string . split ( " . " ) ;
2011-11-06 17:01:23 +01:00
if ( v . count ( ) ! = 3 ) {
2011-10-05 16:48:23 +02:00
return ver ;
2011-11-06 17:01:23 +01:00
}
2011-10-05 16:48:23 +02:00
QStringList r = v . at ( 2 ) . split ( " - " ) ;
ver . majorVersion = v . at ( 0 ) . toInt ( ) ;
ver . minorVersion = v . at ( 1 ) . toInt ( ) ;
ver . revisionNumber = r . at ( 0 ) . toInt ( ) ;
2011-11-06 17:01:23 +01:00
if ( r . count ( ) = = 2 ) {
2011-10-05 16:48:23 +02:00
ver . specialSymbol = r . at ( 1 ) ;
2011-11-06 17:01:23 +01:00
}
2011-10-05 16:48:23 +02:00
ver . isValid = true ;
return ver ;
}
bool Updater : : isBiggerThan_SpecialSymbol ( QString one , QString two )
{
2011-11-06 17:01:23 +01:00
if ( one . contains ( " rc " ) & & two . contains ( " b " ) ) {
2011-10-05 16:48:23 +02:00
return true ;
2011-11-06 17:01:23 +01:00
}
2011-10-05 16:48:23 +02:00
2011-11-06 17:01:23 +01:00
if ( one . contains ( " b " ) & & two . contains ( " rc " ) ) {
2011-10-05 16:48:23 +02:00
return false ;
2011-11-06 17:01:23 +01:00
}
2011-10-05 16:48:23 +02:00
2011-11-06 17:01:23 +01:00
if ( one . isEmpty ( ) ) {
2011-10-18 14:30:17 +02:00
return true ;
2011-11-06 17:01:23 +01:00
}
2011-10-18 14:30:17 +02:00
2011-11-06 17:01:23 +01:00
if ( two . isEmpty ( ) ) {
2011-10-18 14:30:17 +02:00
return false ;
2011-11-06 17:01:23 +01:00
}
2011-10-18 14:30:17 +02:00
2011-10-05 16:48:23 +02:00
if ( one . contains ( " b " ) ) {
int o = one . remove ( " b " ) . toInt ( ) ;
int t = two . remove ( " b " ) . toInt ( ) ;
return o > t ;
}
if ( one . contains ( " rc " ) ) {
int o = one . remove ( " rc " ) . toInt ( ) ;
int t = two . remove ( " rc " ) . toInt ( ) ;
return o > t ;
}
return false ;
}
2011-03-02 16:57:41 +01:00
void Updater : : start ( )
{
2011-10-05 16:48:23 +02:00
startDownloadingUpdateInfo ( QUrl ( QupZilla : : WWWADDRESS + " /update.php?v= " + QupZilla : : VERSION ) ) ;
2011-03-02 16:57:41 +01:00
}
void Updater : : startDownloadingUpdateInfo ( const QUrl & url )
{
QNetworkAccessManager * manager = new QNetworkAccessManager ( ) ;
2011-07-11 20:30:49 +02:00
manager - > get ( QNetworkRequest ( QUrl ( url ) ) ) ;
2011-03-02 16:57:41 +01:00
2011-03-17 17:03:04 +01:00
connect ( manager , SIGNAL ( finished ( QNetworkReply * ) ) , this , SLOT ( downCompleted ( QNetworkReply * ) ) ) ;
2011-03-02 16:57:41 +01:00
}
void Updater : : downCompleted ( QNetworkReply * reply )
{
QString html = QString ( reply - > readAll ( ) ) ;
2011-11-06 17:01:23 +01:00
if ( html . startsWith ( " Version: " ) ) {
2011-03-02 16:57:41 +01:00
html . remove ( " Version: " ) ;
2011-10-05 16:48:23 +02:00
Version current = parseVersionFromString ( QupZilla : : VERSION ) ;
Version updated = parseVersionFromString ( html ) ;
if ( current < updated ) {
2012-01-12 21:38:38 +01:00
mApp - > desktopNotifications ( ) - > showNotifications ( QPixmap ( " :icons/qupzillaupdate.png " ) , tr ( " Update available " ) , tr ( " New version of QupZilla is ready to download. " ) ) ;
2011-10-02 17:39:59 +02:00
// QAction* action = new QAction(QIcon(":icons/qupzillaupdate.png"), "Update", this);
// connect(action, SIGNAL(triggered()), this, SLOT(downloadNewVersion()));
// p_QupZilla->menuBar()->addAction(action);
2011-04-25 15:06:59 +02:00
}
2011-04-24 22:40:35 +02:00
}
2011-03-02 16:57:41 +01:00
reply - > manager ( ) - > deleteLater ( ) ;
}
2011-04-25 15:06:59 +02:00
void Updater : : downloadNewVersion ( )
{
2012-01-21 23:19:38 +01:00
p_QupZilla - > tabWidget ( ) - > addView ( QUrl ( QupZilla : : WWWADDRESS + " /download " ) , tr ( " Update " ) , Qz : : NT_NotSelectedTab ) ;
2011-04-25 15:06:59 +02:00
}
2011-03-02 16:57:41 +01:00
Updater : : ~ Updater ( )
{
}