aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--divesitehelpers.cpp17
-rw-r--r--taxonomy.c4
-rw-r--r--taxonomy.h3
3 files changed, 21 insertions, 3 deletions
diff --git a/divesitehelpers.cpp b/divesitehelpers.cpp
index 1f323a537..775951855 100644
--- a/divesitehelpers.cpp
+++ b/divesitehelpers.cpp
@@ -85,7 +85,7 @@ void ReverseGeoLookupThread::run() {
QVariantList geoNames = geoNamesObject.toList();
if (geoNames.count() > 0) {
QVariantMap firstData = geoNames.at(0).toMap();
- int ri = 0;
+ int ri = 0, l3 = -1, lt = -1;
if (ds->taxonomy.category == NULL)
ds->taxonomy.category = alloc_taxonomy();
// get all the data - OCEAN is special, so start at COUNTRY
@@ -98,6 +98,21 @@ void ReverseGeoLookupThread::run() {
ri++;
}
}
+ for (int j = ri - 1; j >= 0; j--) {
+ if (ds->taxonomy.category[j].category == TC_ADMIN_L3)
+ l3 = j;
+ else if (ds->taxonomy.category[j].category == TC_LOCALNAME)
+ lt = j;
+ }
+ if (l3 == -1 && lt != -1) {
+ // basically this means we did get a local name (what we call town), but just like most places
+ // we didn't get an adminName_3 - which in some regions is the actual city that town belongs to,
+ // then we copy the town into the city
+ ds->taxonomy.category[ri].value = copy_string(ds->taxonomy.category[lt].value);
+ ds->taxonomy.category[ri].origin = taxonomy::COPIED;
+ ds->taxonomy.category[ri].category = TC_ADMIN_L3;
+ ri++;
+ }
ds->taxonomy.nr = ri;
mark_divelist_changed(true);
} else {
diff --git a/taxonomy.c b/taxonomy.c
index 2b71648c1..b72616faf 100644
--- a/taxonomy.c
+++ b/taxonomy.c
@@ -8,6 +8,7 @@ char *taxonomy_category_names[TC_NR_CATEGORIES] = {
QT_TRANSLATE_NOOP("getTextFromC", "Country"),
QT_TRANSLATE_NOOP("getTextFromC", "State"),
QT_TRANSLATE_NOOP("getTextFromC", "County"),
+ QT_TRANSLATE_NOOP("getTextFromC", "Town"),
QT_TRANSLATE_NOOP("getTextFromC", "City")
};
@@ -18,7 +19,8 @@ char *taxonomy_api_names[TC_NR_CATEGORIES] = {
"countryName",
"adminName1",
"adminName2",
- "toponymName"
+ "toponymName",
+ "adminName3"
};
struct taxonomy *alloc_taxonomy()
diff --git a/taxonomy.h b/taxonomy.h
index b6a062a08..9831cfe19 100644
--- a/taxonomy.h
+++ b/taxonomy.h
@@ -12,6 +12,7 @@ enum taxonomy_category {
TC_ADMIN_L1,
TC_ADMIN_L2,
TC_LOCALNAME,
+ TC_ADMIN_L3,
TC_NR_CATEGORIES
};
@@ -21,7 +22,7 @@ extern char *taxonomy_api_names[TC_NR_CATEGORIES];
struct taxonomy {
int category; /* the category for this tag: ocean, country, admin_l1, admin_l2, localname, etc */
const char *value; /* the value returned, parsed, or manually entered for that category */
- enum { GEOCODED, PARSED, MANUAL } origin;
+ enum { GEOCODED, PARSED, MANUAL, COPIED } origin;
};
/* the data block contains 3 taxonomy structures - unused ones have a tag value of NONE */