OSDN Git Service

UpdateChecker: Parse and forward the new "DownloadChecksum" entry from update info...
[mutilities/MUtilities.git] / src / UpdateChecker.cpp
index 1f0502e..9942c77 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // MuldeR's Utilities for Qt
-// Copyright (C) 2004-2014 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2015 LoRd_MuldeR <MuldeR2@GMX.de>
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -53,11 +53,11 @@ static const char *update_mirrors_prim[] =
        "http://mulder.bplaced.net/",
        "http://mulder.cwsurf.de/",
        "http://mulder.6te.net/",
-       "http://mulder.webuda.com/",
-       "http://mulder.byethost13.com/",
-       "http://muldersoft.kilu.de/",
-       "http://mulder.pe.hu/",
-       "http://muldersoft.zxq.net/",
+       "http://mulder.webuda.com/",                    //"http://mulder.byethost13.com/",
+       "http://mulder.pe.hu/",                                 //"http://muldersoft.kilu.de/",
+       "http://muldersoft.square7.ch/",                //"http://muldersoft.zxq.net/",
+       "http://muldersoft.co.nf/",
+       "http://muldersoft.eu.pn/",
        "http://lamexp.sourceforge.net/",
        "http://lordmulder.github.io/LameXP/",
        "http://lord_mulder.bitbucket.org/",
@@ -82,6 +82,8 @@ static const char *known_hosts[] =            //Taken form: http://www.alexa.com/topsites
        "http://www.apache.org/",
        "http://www.apple.com/",
        "http://www.adobe.com/",
+       "http://web.audacityteam.org/",
+       "http://automattic.com/",
        "http://www.avidemux.org/",
        "http://www.babylon.com/",
        "http://www.baidu.com/",
@@ -89,70 +91,83 @@ static const char *known_hosts[] =          //Taken form: http://www.alexa.com/topsites
        "http://www.bbc.co.uk/",
        "http://www.berlios.de/",
        "http://www.bing.com/",
+       "http://www.bucketheadpikes.com/",
+       "http://www.ccc.de/",
+       "http://www.citizeninsomniac.com/WMV/",
        "http://www.cnet.com/",
        "http://cnzz.com/",
        "http://www.codeplex.com/",
-       "http://qt.digia.com/",
+       "http://www.der-postillon.com/",
        "http://www.ebay.com/",
        "http://www.equation.com/",
        "http://fc2.com/",
-       "http://fedoraproject.org/",
+       "http://fedoraproject.org/wiki/Fedora_Project_Wiki",
+       "http://blog.fefe.de/",
        "http://www.ffmpeg.org/",
        "http://blog.flickr.net/en",
        "http://free-codecs.com/",
-       "http://blog.gitorious.org/",
        "http://git-scm.com/",
+       "http://status.gitlab.com/",
        "http://www.gmx.net/",
-       "http://www.gnome.org/",
+       "http://news.gnome.org/",
        "http://www.gnu.org/",
        "http://go.com/",
        "http://code.google.com/",
+       "http://haali.su/mkv/",
        "http://www.heise.de/",
        "http://www.huffingtonpost.co.uk/",
        "http://www.iana.org/",
        "http://www.imdb.com/",
        "http://www.imgburn.com/",
        "http://imgur.com/",
-       "http://en.jd.com/",
+       "http://www.jd.com/contact/",
        "http://kannmanumdieuhrzeitschonnbierchentrinken.de/",
        "http://mirrors.kernel.org/",
+       "http://komisar.gin.by/",
        "http://lame.sourceforge.net/",
        "http://www.libav.org/",
-       "http://www.linkedin.com/about-us",
+       "http://blog.linkedin.com/",
        "http://www.linuxmint.com/",
        "http://www.livedoor.com/",
        "http://www.livejournal.com/",
        "http://go.mail.ru/",
-       "http://www.mediafire.com/",
+       "http://www.mediafire.com/about/",
        "http://ftp.mozilla.org/",
        "http://mplayerhq.hu/",
-       "http://www.msn.com/?st=1",
+       "http://www.msn.com/en-us/",
+       "http://wiki.multimedia.cx/",
+       "http://www.nch.com.au/",
        "http://oss.netfarm.it/",
        "http://www.nytimes.com/",
        "http://www.opera.com/",
+       "http://www.partha.com/",
        "http://pastie.org/",
        "http://www.portablefreeware.com/",
-       "http://qt-project.org/",
+       "http://www.qt.io/",
        "http://www.quakelive.com/",
        "http://www.seamonkey-project.org/",
+       "http://www.shspvr.com/",
        "http://www.sina.com.cn/",
        "http://www.sohu.com/",
-       "http://www.soso.com/",
+       "http://www.sogou.com/",
        "http://sourceforge.net/",
        "http://www.spiegel.de/",
+       "http://stackoverflow.com/",
        "http://tdm-gcc.tdragon.net/",
        "http://www.tdrsmusic.com/",
        "http://www.ubuntu.com/",
-       "http://status.twitter.com/",
        "http://www.uol.com.br/",
        "http://www.videohelp.com/",
        "http://www.videolan.org/",
        "http://virtualdub.org/",
        "http://blog.virustotal.com/",
-       "http://weibo.com/login.php",
-       "http://www.wikipedia.org/",
+       "http://www.warr.org/buckethead.html",
+       "http://www.weibo.com/login.php",
+       "http://status.wikimedia.org/",
        "http://www.winamp.com/",
-       "http://wordpress.com/about/",
+       "http://wpde.org/",
+       "http://x265.org/",
+       "http://xhmikosr.1f0.de/",
        "http://xiph.org/",
        "http://us.mail.yahoo.com/",
        "http://www.yandex.ru/",
@@ -192,6 +207,20 @@ void UpdateCheckerInfo::resetInfo(void)
        m_downloadAddress.clear();
        m_downloadFilename.clear();
        m_downloadFilecode.clear();
+       m_downloadChecksum.clear();
+}
+
+bool UpdateCheckerInfo::isComplete(void)
+{
+       if(this->m_buildNo < 1)                return false;
+       if(this->m_buildDate.year() < 2010)    return false;
+       if(this->m_downloadSite.isEmpty())     return false;
+       if(this->m_downloadAddress.isEmpty())  return false;
+       if(this->m_downloadFilename.isEmpty()) return false;
+       if(this->m_downloadFilecode.isEmpty()) return false;
+       if(this->m_downloadChecksum.isEmpty()) return false;
+
+       return true;
 }
 
 ////////////////////////////////////////////////////////////
@@ -222,7 +251,6 @@ UpdateChecker::UpdateChecker(const QString &binWGet, const QString &binGnuPG, co
 
 UpdateChecker::~UpdateChecker(void)
 {
-       delete m_updateInfo;
 }
 
 ////////////////////////////////////////////////////////////
@@ -325,7 +353,7 @@ void UpdateChecker::checkForUpdates(void)
                setProgress(m_progress + 1);
                if(!m_success)
                {
-                       if(tryUpdateMirror(m_updateInfo, currentMirror))
+                       if(tryUpdateMirror(m_updateInfo.data(), currentMirror))
                        {
                                m_success = true;
                        }
@@ -585,6 +613,7 @@ bool UpdateChecker::checkSignature(const QString &file, const QString &signature
                qWarning("CheckSignature: File and signature should be in same folder!");
                return false;
        }
+
        if(QFileInfo(file).absolutePath().compare(QFileInfo(m_binaryKeys).absolutePath(), Qt::CaseInsensitive) != 0)
        {
                qWarning("CheckSignature: File and keyring should be in same folder!");
@@ -653,12 +682,12 @@ bool UpdateChecker::parseVersionInfo(const QString &file, UpdateCheckerInfo *upd
                        if(value.cap(1).compare("BuildNo", Qt::CaseInsensitive) == 0)
                        {
                                bool ok = false;
-                               unsigned int temp = value.cap(2).toUInt(&ok);
+                               const unsigned int temp = value.cap(2).toUInt(&ok);
                                if(ok) updateInfo->m_buildNo = temp;
                        }
                        else if(value.cap(1).compare("BuildDate", Qt::CaseInsensitive) == 0)
                        {
-                               QDate temp = QDate::fromString(value.cap(2).trimmed(), Qt::ISODate);
+                               const QDate temp = QDate::fromString(value.cap(2).trimmed(), Qt::ISODate);
                                if(temp.isValid()) updateInfo->m_buildDate = temp;
                        }
                        else if(value.cap(1).compare("DownloadSite", Qt::CaseInsensitive) == 0)
@@ -677,6 +706,10 @@ bool UpdateChecker::parseVersionInfo(const QString &file, UpdateCheckerInfo *upd
                        {
                                updateInfo->m_downloadFilecode = value.cap(2).trimmed();
                        }
+                       else if(value.cap(1).compare("DownloadChecksum", Qt::CaseInsensitive) == 0)
+                       {
+                               updateInfo->m_downloadChecksum = value.cap(2).trimmed();
+                       }
                }
                if(inHdr && (value.indexIn(line) >= 0))
                {
@@ -708,22 +741,14 @@ bool UpdateChecker::parseVersionInfo(const QString &file, UpdateCheckerInfo *upd
                log("Version info is from the future, take care!");
                qWarning("Version info is from the future, take care!");
        }
-
-       bool complete = true;
-
-       if(!(updateInfo->m_buildNo > 0)) complete = false;
-       if(!(updateInfo->m_buildDate.year() >= 2010)) complete = false;
-       if(updateInfo->m_downloadSite.isEmpty()) complete = false;
-       if(updateInfo->m_downloadAddress.isEmpty()) complete = false;
-       if(updateInfo->m_downloadFilename.isEmpty()) complete = false;
-       if(updateInfo->m_downloadFilecode.isEmpty()) complete = false;
        
-       if(!complete)
+       if(!updateInfo->isComplete())
        {
                log("WARNING: Version info is incomplete!");
+               return false;
        }
 
-       return complete;
+       return true;
 }
 
 ////////////////////////////////////////////////////////////