Cleanup: remove ReverseGeoLookupThread

Fetching the taxonomy from GPS coordinates was implemented in
a QThread. But the only access to the main function was a
direct call to run(). Thus, the thread was *never* started.
The function call was always asynchronous [it was using an
event loop though, so the UI doesn't hang]. Notably this
means that the signals connected to the thread would never
fire. And the spinner would never be activated.

Thus:
1) Turn the thread into a simple function.
2) Remove the spinner.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2018-10-11 18:44:05 +02:00 committed by Dirk Hohndel
parent 76e5c5ac67
commit ce8199cdfd
7 changed files with 8 additions and 70 deletions

View file

@ -20,17 +20,7 @@
#include <QEventLoop>
#include <QTimer>
ReverseGeoLookupThread* ReverseGeoLookupThread::instance()
{
static ReverseGeoLookupThread* self = new ReverseGeoLookupThread();
return self;
}
ReverseGeoLookupThread::ReverseGeoLookupThread(QObject *obj) : QThread(obj)
{
}
void ReverseGeoLookupThread::run()
void reverseGeoLookup()
{
QNetworkRequest request;
QNetworkAccessManager *rgl = new QNetworkAccessManager();
@ -41,7 +31,7 @@ void ReverseGeoLookupThread::run()
request.setRawHeader("Accept", "text/json");
request.setRawHeader("User-Agent", getUserAgent().toUtf8());
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
struct dive_site *ds = &displayed_dive_site;
@ -50,7 +40,7 @@ void ReverseGeoLookupThread::run()
QNetworkReply *reply = rgl->get(request);
timer.setSingleShot(true);
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
timer.start(5000); // 5 secs. timeout
loop.exec();
@ -119,13 +109,13 @@ void ReverseGeoLookupThread::run()
}
} else {
report_error("timeout accessing geonames.org");
disconnect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
QObject::disconnect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
reply->abort();
}
// next check the oceans API to figure out the body of water
request.setUrl(geonamesOceanURL.arg(uiLanguage(NULL).section(QRegExp("[-_ ]"), 0, 0)).arg(ds->latitude.udeg / 1000000.0).arg(ds->longitude.udeg / 1000000.0));
reply = rgl->get(request);
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
timer.start(5000); // 5 secs. timeout
loop.exec();
if (timer.isActive()) {
@ -165,7 +155,7 @@ void ReverseGeoLookupThread::run()
}
} else {
report_error("timeout accessing geonames.org");
disconnect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
QObject::disconnect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
reply->abort();
}

View file

@ -2,18 +2,6 @@
#ifndef DIVESITEHELPERS_H
#define DIVESITEHELPERS_H
#include "units.h"
#include <QThread>
class ReverseGeoLookupThread : public QThread {
Q_OBJECT
public:
static ReverseGeoLookupThread *instance();
void lookup(struct dive_site *ds);
void run() override;
private:
ReverseGeoLookupThread(QObject *parent = 0);
};
void reverseGeoLookup();
#endif // DIVESITEHELPERS_H