SVN commit 961956 by coles: After chatting to the iplocationtools.com guys, I've managed to get them to make a change to their API so that calling without an IP, rather than failing, returns the visitor's location information. As such, if we now just go to:
http://iplocationtools.com/ip_query.php ...we get IP geolocation straight away, without needing the 'whatismyip.org' step first to find our world-visible IP. Three plusses: - whatismyip was sometimes unreliable - the whole process is a heck of a lot quicker due to it only being one network job - the code is much much simpler :) - the diff is only big due to the sheer number of lines removed Enjoy, Andrew CCMAIL: se...@kde.org CCMAIL: plasma-devel@kde.org M +11 -51 location_ip.cpp M +0 -3 location_ip.h --- trunk/kdereview/plasma/dataengines/geolocation/location_ip.cpp #961955:961956 @@ -29,7 +29,6 @@ public: QString m_data; - QString m_ip; QXmlStreamReader m_xmlReader; void populateDataEngineData(Plasma::DataEngine::Data & outd) { @@ -87,15 +86,18 @@ bool Ip::updateLocation() { -// kDebug() << "Getting IP data from http://www.whatismyip.org/";; - KIO::TransferJob *job = KIO::get(KUrl("http://www.whatismyip.org/";), - KIO::NoReload, KIO::HideProgressInfo); + d->m_xmlReader.clear(); + d->m_data.clear(); - if (job) { - connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)), this, - SLOT(IPreadData(KIO::Job *, const QByteArray &))); - connect(job, SIGNAL(result(KJob *)), this, SLOT(IPresult(KJob *))); - return true; + KIO::TransferJob *datajob = KIO::get(KUrl("http://iplocationtools.com/ip_query.php";), + KIO::NoReload, KIO::HideProgressInfo); + + if (datajob) { + kDebug() << "Fetching http://iplocationtools.com/ip_query.php";; + connect(datajob, SIGNAL(data(KIO::Job *, const QByteArray &)), this, + SLOT(readData(KIO::Job *, const QByteArray &))); + connect(datajob, SIGNAL(result(KJob *)), this, SLOT(result(KJob *))); + return true; } kDebug() << "Could not create job"; @@ -104,48 +106,6 @@ } -void Ip::IPreadData(KIO::Job* job, const QByteArray& data) -{ - Q_UNUSED(job) - d->m_data += QString(data); -} - -void Ip::IPresult(KJob *job) -{ - if(job && !job->error()) { - QStringList lines = d->m_data.split('\n'); - if (lines.count() == 1) { - -// kDebug() << "Got IP: " + lines[0]; - d->m_xmlReader.clear(); - - d->m_ip = lines[0]; - KIO::TransferJob *datajob = KIO::get(KUrl("http://iplocationtools.com/ip_query.php?ip="+d->m_ip), - KIO::NoReload, KIO::HideProgressInfo); - - d->m_data.clear(); - - if (datajob) { - kDebug() << "Fetching http://iplocationtools.com/ip_query.php?ip="+d->m_ip; - connect(datajob, SIGNAL(data(KIO::Job *, const QByteArray &)), this, - SLOT(readData(KIO::Job *, const QByteArray &))); - connect(datajob, SIGNAL(result(KJob *)), this, SLOT(result(KJob *))); - return; - } -// kDebug() << "Could not spawn job to fetch http://iplocationtools.com/ip_query.php?ip="+d->m_ip; - - } else { -// kDebug() << "Too many lines returned from IP source"; - } - } else { -// if (job) kDebug() << "Error was " + job->errorString(); - } -// kDebug() << "Error some point prior to fetching IP location information"; - d->m_data.clear(); - Plasma::DataEngine::Data outd; - emit dataReady(pluginName(), outd); -} - void Ip::readData(KIO::Job* job, const QByteArray& data) { Q_UNUSED(job) --- trunk/kdereview/plasma/dataengines/geolocation/location_ip.h #961955:961956 @@ -35,9 +35,6 @@ virtual bool updateLocation(); protected slots: - void IPreadData(KIO::Job* job, const QByteArray& data); - void IPresult(KJob* job); - void readData(KIO::Job *, const QByteArray& data); void result(KJob* job); _______________________________________________ Plasma-devel mailing list Plasma-devel@kde.org https://mail.kde.org/mailman/listinfo/plasma-devel