diff options
-rw-r--r-- | divesitehelpers.cpp | 17 | ||||
-rw-r--r-- | taxonomy.c | 4 | ||||
-rw-r--r-- | taxonomy.h | 3 |
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 */ |