If I have a proper precise (GPS based) location (lat&long) in a scope from SearchMetadata.location().latitude()|longitude(), and then disable Location indicator > Location detection OR GPS, then reenable it and refresh the scope, I never get a precise location back. I am stuck with geo IP derived location.
To demo this, I wrote a simple scope that merely gets the lat and long and logs it, or a message if ! has_location().
Here's the relevant code:
void Query::run(us::SearchReplyProxy const& reply)
{
if (!metadata_.has_location())
{
qDebug() << "LOCTEST: no location: " + QDateTime::currentDateTime().toString();
return;
}
try{
auto lat = metadata_.location().latitude();
auto lng = metadata_.location().longitude();
qDebug() << "LOCTEST: lat long: " + QString::number(lat) + " " + QString::number(lng) + " " + QDateTime::currentDateTime().toString();
} catch(unity::scopes::NotFoundException &e) {
qWarning() << "==== Warning: Could not get location.";
}
}
"LOCTEST: lat long: 42.4062 -71.6038 Mon Nov 30 23:33:24 2015"
"LOCTEST: lat long: 42.4062 -71.6038 Mon Nov 30 23:33:34 2015"
"LOCTEST: lat long: 42.4062 -71.6038 Mon Nov 30 23:33:36 2015"
"LOCTEST: lat long: 42.4062 -71.6038 Mon Nov 30 23:33:37 2015"
COMMENT: Why am I still seeing a precise location? Normally for me geo IP based location is the next town over.
ACTION restart unity8-dash
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:33:59 2015"
COMMENT: That ^ is the geo IP based vague location, as expected.
"LOCTEST: no location: Mon Nov 30 23:34:07 2015"
COMMENT: why do I get no location?
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:34:24 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:35:58 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:36:03 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:36:10 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:36:13 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:36:16 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:36:54 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:36:56 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:37:02 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:37:04 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:37:11 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:37:15 2015"
COMMENT: Several minutes have passed. Why do I still see vague geo IP based location? I expected GPS precision.
ACTION: restart unity8-dash
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:37:40 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:37:53 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:38:01 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:38:03 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:38:05 2015"
COMMENT: still geo ip based.
ACTION: Wait a while
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:49:18 2015"
COMMENT: still geo IP based. So, all location indicator settings are on, location is enabled in scope, but still: geo IP.
I don't know whether this is a problem with the scope framework using a stale location in this case or if it is an underlying problem with the location service not understanding that it was re enabled, getting a new location, and refreshing unity...
If I have a proper precise (GPS based) location (lat&long) in a scope from SearchMetadata. location( ).latitude( )|longitude( ), and then disable Location indicator > Location detection OR GPS, then reenable it and refresh the scope, I never get a precise location back. I am stuck with geo IP derived location.
To demo this, I wrote a simple scope that merely gets the lat and long and logs it, or a message if ! has_location().
Here's the relevant code:
void Query:: run(us: :SearchReplyPro xy const& reply) .has_location( )) :currentDateTim e().toString( ); .location( ).latitude( ); .location( ).longitude( ); :number( lat) + " " + QString: :number( lng) + " " + QDateTime: :currentDateTim e().toString( ); :scopes: :NotFoundExcept ion &e) {
{
if (!metadata_
{
qDebug() << "LOCTEST: no location: " + QDateTime:
return;
}
try{
auto lat = metadata_
auto lng = metadata_
qDebug() << "LOCTEST: lat long: " + QString:
} catch(unity:
qWarning() << "==== Warning: Could not get location.";
}
}
Query::Query(const us::CannedQuery &query, const us::SearchMetadata & metadata, const QVariant accessToken, QString const& cacheDir_) : Base(query, metadata), (metadata) , (query) , (query. query_string( )), _(accessToken) , (cacheDir_ )
SearchQuery
metadata_
cannedQuery
query_
accessToken
cacheDir_
{
}
Here are the results from scope-registry log grepped with LOCTEST. COMMENTs and ACTIONs added:
COMMENT: starting lat/long are precise (GPS)
"LOCTEST: lat long: 42.4062 -71.6038 Mon Nov 30 23:32:46 2015"
"LOCTEST: lat long: 42.4062 -71.6038 Mon Nov 30 23:32:48 2015"
ACTION: disable indicator Location > Location detection
"LOCTEST: lat long: 42.4062 -71.6038 Mon Nov 30 23:33:24 2015"
"LOCTEST: lat long: 42.4062 -71.6038 Mon Nov 30 23:33:34 2015"
"LOCTEST: lat long: 42.4062 -71.6038 Mon Nov 30 23:33:36 2015"
"LOCTEST: lat long: 42.4062 -71.6038 Mon Nov 30 23:33:37 2015"
COMMENT: Why am I still seeing a precise location? Normally for me geo IP based location is the next town over.
ACTION restart unity8-dash
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:33:59 2015"
COMMENT: That ^ is the geo IP based vague location, as expected.
"LOCTEST: no location: Mon Nov 30 23:34:07 2015"
COMMENT: why do I get no location?
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:34:24 2015"
ACTION: indicator Location > Location detection enabled
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:35:58 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:36:03 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:36:10 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:36:13 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:36:16 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:36:54 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:36:56 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:37:02 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:37:04 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:37:11 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:37:15 2015"
COMMENT: Several minutes have passed. Why do I still see vague geo IP based location? I expected GPS precision.
ACTION: restart unity8-dash
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:37:40 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:37:53 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:38:01 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:38:03 2015"
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:38:05 2015"
COMMENT: still geo ip based.
ACTION: Wait a while
"LOCTEST: lat long: 42.5244 -71.7657 Mon Nov 30 23:49:18 2015"
COMMENT: still geo IP based. So, all location indicator settings are on, location is enabled in scope, but still: geo IP.
I don't know whether this is a problem with the scope framework using a stale location in this case or if it is an underlying problem with the location service not understanding that it was re enabled, getting a new location, and refreshing unity...