Check InternetGetConnectedState() in an asynchronous way + update list of mirrors.

This commit is contained in:
LoRd_MuldeR 2011-07-10 21:46:43 +02:00
parent 8c95b78e68
commit 3a7129cbf4
2 changed files with 48 additions and 11 deletions

View File

@ -29,8 +29,8 @@
#define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_HI 0
#define VER_LAMEXP_MINOR_LO 3 #define VER_LAMEXP_MINOR_LO 3
#define VER_LAMEXP_TYPE Alpha #define VER_LAMEXP_TYPE Alpha
#define VER_LAMEXP_PATCH 2 #define VER_LAMEXP_PATCH 3
#define VER_LAMEXP_BUILD 595 #define VER_LAMEXP_BUILD 599
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Tools versions // Tools versions

View File

@ -37,6 +37,7 @@
#include <QUrl> #include <QUrl>
#include <QCloseEvent> #include <QCloseEvent>
#include <QMovie> #include <QMovie>
#include <QtConcurrentRun>
#include <time.h> #include <time.h>
#include <MMSystem.h> #include <MMSystem.h>
@ -54,14 +55,20 @@ static const char *mirror_url_postfix[] =
NULL NULL
}; };
static const char *update_mirrors[] = static const char *update_mirrors_prim[] =
{ {
"http://mulder.dummwiedeutsch.de/",
"http://mulder.brhack.net/", "http://mulder.brhack.net/",
"http://mulder.bplaced.net/",
"http://lamexp.sourceforge.net/", "http://lamexp.sourceforge.net/",
"http://free.pages.at/borschdfresser/", "http://free.pages.at/borschdfresser/",
NULL
};
static const char *update_mirrors_back[] =
{
"http://mplayer.savedonthe.net/", "http://mplayer.savedonthe.net/",
"http://www.tricksoft.de/", "http://www.tricksoft.de/",
"http://mulder.dummwiedeutsch.de/",
"http://mplayer.somestuff.org/", "http://mplayer.somestuff.org/",
NULL NULL
}; };
@ -110,6 +117,13 @@ static const int MIN_CONNSCORE = 3;
static const int VERSION_INFO_EXPIRES_MONTHS = 6; static const int VERSION_INFO_EXPIRES_MONTHS = 6;
static char *USER_AGENT_STR = "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.12) Gecko/20101101 IceCat/3.6.12 (like Firefox/3.6.12)"; static char *USER_AGENT_STR = "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.12) Gecko/20101101 IceCat/3.6.12 (like Firefox/3.6.12)";
static BOOL getInternetConnectedState(void)
{
DWORD lpdwFlags = NULL;
BOOL result = InternetGetConnectedState(&lpdwFlags, NULL);
return result;
}
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
class UpdateInfo class UpdateInfo
@ -218,7 +232,8 @@ void UpdateDialog::showEvent(QShowEvent *event)
int counter = 2; int counter = 2;
for(int i = 0; known_hosts[i]; i++) counter++; for(int i = 0; known_hosts[i]; i++) counter++;
for(int i = 0; update_mirrors[i]; i++) counter++; for(int i = 0; update_mirrors_prim[i]; i++) counter++;
for(int i = 0; update_mirrors_back[i]; i++) counter++;
progressBar->setMaximum(counter); progressBar->setMaximum(counter);
progressBar->setValue(0); progressBar->setValue(0);
@ -262,6 +277,8 @@ void UpdateDialog::checkForUpdates(void)
bool success = false; bool success = false;
int connectionScore = 0; int connectionScore = 0;
// ----- Initialization ----- //
m_updateInfo = new UpdateInfo; m_updateInfo = new UpdateInfo;
progressBar->setValue(0); progressBar->setValue(0);
@ -279,13 +296,20 @@ void UpdateDialog::checkForUpdates(void)
QApplication::processEvents(); QApplication::processEvents();
QApplication::setOverrideCursor(Qt::WaitCursor); QApplication::setOverrideCursor(Qt::WaitCursor);
// ----- Test Internet Connection ----- //
statusLabel->setText(tr("Testing your internet connection, please wait...")); statusLabel->setText(tr("Testing your internet connection, please wait..."));
m_logFile->clear(); m_logFile->clear();
m_logFile->append("Checking internet connection..."); m_logFile->append("Checking internet connection...");
DWORD inetFlags = NULL; QFuture<BOOL> connectedState = QtConcurrent::run(getInternetConnectedState);
if(!InternetGetConnectedState(&inetFlags, NULL)) while(!connectedState.isFinished())
{
QApplication::processEvents(QEventLoop::WaitForMoreEvents);
}
if(!connectedState.result())
{ {
m_logFile->append(QStringList() << "" << "Operating system reports that the computer is currently offline !!!"); m_logFile->append(QStringList() << "" << "Operating system reports that the computer is currently offline !!!");
if(!retryButton->isVisible()) retryButton->show(); if(!retryButton->isVisible()) retryButton->show();
@ -309,6 +333,8 @@ void UpdateDialog::checkForUpdates(void)
return; return;
} }
// ----- Test Known Hosts Connectivity ----- //
QStringList hostList; QStringList hostList;
for(int i = 0; known_hosts[i]; i++) for(int i = 0; known_hosts[i]; i++)
{ {
@ -360,21 +386,30 @@ void UpdateDialog::checkForUpdates(void)
return; return;
} }
// ----- Build Mirror List ----- //
statusLabel->setText(tr("Checking for new updates online, please wait...")); statusLabel->setText(tr("Checking for new updates online, please wait..."));
m_logFile->append(QStringList() << "" << "----" << "" << "Checking for updates online..."); m_logFile->append(QStringList() << "" << "----" << "" << "Checking for updates online...");
QStringList mirrorList; QStringList mirrorList;
for(int i = 0; update_mirrors[i]; i++) for(int index = 0; update_mirrors_prim[index]; index++)
{ {
mirrorList << QString::fromLatin1(update_mirrors[i]); mirrorList << QString::fromLatin1(update_mirrors_prim[index]);
} }
qsrand(time(NULL)); qsrand(time(NULL));
for(int i = 0; i < 16; i++) for(int i = 0; i < 64; i++)
{ {
mirrorList.swap(i % 4, qrand() % 4); mirrorList.swap(i % mirrorList.count(), qrand() % mirrorList.count());
} }
for(int index = 0; update_mirrors_back[index]; index++)
{
mirrorList << QString::fromLatin1(update_mirrors_back[index]);
}
// ----- Fetch Update Info From Server ----- //
while(!mirrorList.isEmpty()) while(!mirrorList.isEmpty())
{ {
QString currentMirror = mirrorList.takeFirst(); QString currentMirror = mirrorList.takeFirst();
@ -417,6 +452,8 @@ void UpdateDialog::checkForUpdates(void)
return; return;
} }
// ----- Download New Program Version ----- //
labelVersionLatest->setText(QString("%1 %2 (%3)").arg(tr("Build"), QString::number(m_updateInfo->m_buildNo), m_updateInfo->m_buildDate.toString(Qt::ISODate))); labelVersionLatest->setText(QString("%1 %2 (%3)").arg(tr("Build"), QString::number(m_updateInfo->m_buildNo), m_updateInfo->m_buildDate.toString(Qt::ISODate)));
infoLabel->show(); infoLabel->show();
infoLabel->setText(QString("%1<br><a href=\"%2\">%2</a>").arg(tr("More information available at:"), m_updateInfo->m_downloadSite)); infoLabel->setText(QString("%1<br><a href=\"%2\">%2</a>").arg(tr("More information available at:"), m_updateInfo->m_downloadSite));