diff --git a/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java b/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java
index f7be034cbe..1759e79034 100644
--- a/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java
+++ b/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java
@@ -43,6 +43,7 @@ public class Amenity extends MapObject {
public static final String IS_PART = "is_part";
public static final String IS_AGGR_PART = "is_aggr_part";
public static final String CONTENT_JSON = "content_json";
+ public static final String ROUTE_ID = "route_id";
private String subType;
diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml
index c218ee7f72..e4937c35f5 100644
--- a/OsmAnd/res/values-ar/strings.xml
+++ b/OsmAnd/res/values-ar/strings.xml
@@ -3987,4 +3987,5 @@
لا يمكن تحميل الصورة، من فضلك، حاول مرة أخرى في وقت لاحق
تحديد صورة
%1$s * %2$s
+ الألمانية (تقليدية)
\ No newline at end of file
diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml
index 2d58674ff2..eeaea93c09 100644
--- a/OsmAnd/res/values-eo/strings.xml
+++ b/OsmAnd/res/values-eo/strings.xml
@@ -3999,4 +3999,5 @@
Ne povas alŝuti la bildon, reprovu poste
Elektu bildon
%1$s * %2$s
+ Germana (ordinara)
\ No newline at end of file
diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml
index e92749d57b..ad7cfd72c1 100644
--- a/OsmAnd/res/values-es-rAR/strings.xml
+++ b/OsmAnd/res/values-es-rAR/strings.xml
@@ -4004,4 +4004,6 @@
Usar dev.openstreetmap.org
No se puede subir la imagen, inténtalo más tarde
Elegir imagen
+ Alemán (casual)
+ %1$s * %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml
index 9e64844dfd..7973ff27cd 100644
--- a/OsmAnd/res/values-fr/strings.xml
+++ b/OsmAnd/res/values-fr/strings.xml
@@ -3976,4 +3976,5 @@
Impossible d\'envoyer l\'image, veuillez réessayer plus tard
Sélectionnez une image
%1$s * %2$s
+ Allemand (courant)
\ No newline at end of file
diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml
index 495bb2bca2..ec57f089ad 100644
--- a/OsmAnd/res/values-hu/strings.xml
+++ b/OsmAnd/res/values-hu/strings.xml
@@ -3990,4 +3990,6 @@
A dev.openstreetmap.org használata
Nem lehet feltölteni a képet, kérjük, próbálja meg később
Kép kijelölése
+ német (tegeződő)
+ %1$s * %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml
index c83c5e1385..0a6aae70fe 100644
--- a/OsmAnd/res/values-it/strings.xml
+++ b/OsmAnd/res/values-it/strings.xml
@@ -3952,7 +3952,7 @@
Aggiungi foto
Registrati su
\nOpenPlaceReviews.org
- Per contribuire delle altre foto autenticati nel sito del progetto a sorgente aperto OpenPlaceReviews.org.
+ Le foto sono fornite dal progetto open data OpenPlaceReviews.org. Per caricare le tue foto devi registrarti sul sito web.
Crea un nuovo account
Ho già un account
Cronologia di ricerca
@@ -3960,7 +3960,7 @@
Motoscafo
Connettiti a OpenStreetMap
Connettiti a OpenStreetMap.org
- Registrati con OpenStreetMap
+ Accedi con OpenStreetMap
Devi fare il login per inviare nuove modifiche o dei cambiamenti.
\n
\nPuoi fare login utilizzando il metodo sicuro OAuth o il nomeutente e password.
@@ -3998,4 +3998,5 @@
Impossibile caricare l\'immagine, riprovare in seguito
Scegli la foto
%1$s * %2$s
+ German (casual)
\ No newline at end of file
diff --git a/OsmAnd/res/values-iw/strings.xml b/OsmAnd/res/values-iw/strings.xml
index 179d8ee142..f8d10bfa90 100644
--- a/OsmAnd/res/values-iw/strings.xml
+++ b/OsmAnd/res/values-iw/strings.xml
@@ -3982,7 +3982,7 @@
היסטוריית חיפוש
קיאק
סירת מנוע
-
+
משאבים
גודל קובץ משוערך
נא לבחור את הנתונים שייוצאו לקובץ.
@@ -4001,4 +4001,6 @@
להשתמש ב־dev.openstreetmap.org
לא ניתן להעלות תמונה, נא לנסות שוב מאוחר יותר
בחירת תמונה
+ גרמנית (עממית)
+ %1$s * %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-nb/strings.xml b/OsmAnd/res/values-nb/strings.xml
index c2f36f8a9e..e0c2624bce 100644
--- a/OsmAnd/res/values-nb/strings.xml
+++ b/OsmAnd/res/values-nb/strings.xml
@@ -2799,8 +2799,9 @@
\n• Andre feilrettinger
\n
Sender inn vei…
- Vi kommer til å sende inn ditt søk \"%1$s\", sammen med din plassering.
-\nIngen personlig informasjon samles inn, søkedata brukes kun for å forbedre søkealgoritmen.
+ Vi kommer til å sende inn ditt søk «%1$s», sammen med din plassering.
+\n
+\nIngen personlig info samles inn, søkedata brukes kun for å forbedre søkealgoritmen.
Trykk på en knapp og lytt til den tilhørende talemeldingen for å høre om den mangler eller er feil
• Fikset krasj ved oppstart som skjedde på noen enheter
\n
diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml
index 2d58273576..e0572077bc 100644
--- a/OsmAnd/res/values-pl/strings.xml
+++ b/OsmAnd/res/values-pl/strings.xml
@@ -3369,7 +3369,7 @@
Szacuje czas przyjazdu dla nieznanego rodzaju dróg i ograniczenia prędkości na wszystkich drogach (może zmienić trasę)
Odwróć początek i cel
Zapisano ślad
- Nazwa pliku jest pusta
+ Pusta nazwa pliku
Przywróć
Przycisk umożliwiający wyśrodkowanie ekranu w punkcie wyjścia. Następnie poprosi o ustawienie miejsca docelowego lub uruchomi obliczanie trasy.
Wyczyścić %1$s\?
@@ -3958,26 +3958,26 @@
Musisz dodać co najmniej dwa punkty
Wystąpił problem z Twoją subskrypcją. Kliknij przycisk, aby przejść do ustawień subskrypcji Google Play i naprawić metodę płatności.
Subskrypcja OsmAnd Live jest wstrzymana
- Nazwa użytkownika
+ Login
Zaloguj się do OpenStreetMap
Zaloguj się do OpenStreetMap.org
Zaloguj się za pomocą OpenStreetMap
Zaloguj się, aby przesłać nowe lub zmodyfikowane zmiany,
\n
\nza pomocą protokołu OAuth lub nazwy użytkownika i hasła.
- Zaloguj się za pomocą nazwy użytkownika i hasła
+ Użyj loginu i hasła
Konto
Zamknij uwagę OSM
Skomentuj uwagę OSM
Historia znaczników
Wyślij plik GPX do OpenStreetMap
Wpisz tagi oddzielone przecinkami.
- Możliwość śledzenia oznacza, że ślad nie pojawi się na żadnej publicznej liście, ale punkty śledzenia będą nadal dostępne za pośrednictwem publicznego API GPS ze znacznikami czasu. Inni użytkownicy będą mogli pobrać tylko te przetworzone punkty śledzenia z Twojego śladu, których nie można powiązać bezpośrednio z Tobą.
- Zaloguj się przy użyciu bezpiecznej metody autoryzacji OAuth lub użyj swojej nazwy użytkownika i hasła.
+ „Śledzenie” oznacza, że ślad nie pojawia się w żadnych publicznych wykazach, ale przetworzone punkty śledzenia z sygnaturami czasowymi (których nie można bezpośrednio powiązać z Tobą) są pobierane z publicznego interfejsu GPS API.
+ Możesz zalogować się za pomocą bezpiecznej metody autoryzacji OAuth lub przy użyciu swojego loginu i hasła.
Dodaj zdjęcie
Zarejestruj się w
\nOpenPlaceReviews.org
- Zaloguj się na stronie projektu otwartych danych OpenPlaceReviews.org, aby przesłać jeszcze więcej zdjęć.
+ Zdjęcia są dostarczane przez otwarty projekt OpenPlaceReviews.org. Aby przesłać swoje zdjęcia, musisz zarejestrować się na stronie.
Utwórz nowe konto
Mam już konto
Wybierz grupy, które zostaną zaimportowane.
@@ -3999,4 +3999,9 @@
Motorówka
Dodaj do Mapillary
Dodaj do OpenPlaceReviews
+ „Prywatny” oznacza, że ślad nie pojawia się w żadnych publicznych wykazach, ale punkty śledzenia z niego w kolejności niechronologicznej są dostępne za pośrednictwem publicznego interfejsu API GPS bez sygnatur czasowych.
+ \"Możliwe do zidentyfikowania\" oznacza, że ślad zostanie podany publicznie w śladach GPS i w publicznych wykazach śledzenia GPS, czyli inni użytkownicy będą mogli pobrać surowy ślad i skojarzyć go z twoją nazwą użytkownika. Publiczne dane śledzenia sygnatury czasowej z interfejsu API GPS obsługiwane za pośrednictwem interfejsu API punktów śladowych będą odwoływać się do oryginalnej strony śledzenia.
+ Wybierz zdjęcie
+ Nie można przesłać obrazu, spróbuj ponownie później
+ %1$s * %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml
index 5a6b16d427..408aa0149c 100644
--- a/OsmAnd/res/values-pt-rBR/strings.xml
+++ b/OsmAnd/res/values-pt-rBR/strings.xml
@@ -3995,4 +3995,5 @@
Não é possível carregar a imagem, por favor, tente novamente mais tarde
Selecione a foto
%1$s * %2$s
+ Alemão (casual)
\ No newline at end of file
diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml
index 8d461da61d..9ea89f1e1d 100644
--- a/OsmAnd/res/values-sc/strings.xml
+++ b/OsmAnd/res/values-sc/strings.xml
@@ -3997,4 +3997,5 @@
Impossìbile carrigare s\'immàgine, torra a proare prus a tardu
Ischerta un\'immàgine
%1$s * %2$s
+ Tedescu (informale)
\ No newline at end of file
diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml
index 840c817c8e..54f7a87f39 100644
--- a/OsmAnd/res/values-sk/strings.xml
+++ b/OsmAnd/res/values-sk/strings.xml
@@ -3953,13 +3953,13 @@
Predplatné OsmAnd Live skončilo
Predplatné OsmAnd Live je pozastavené
Predplatné OsmAnd Live je zablokované
- Prihlásenie pre OpenStreetMap
- Prihlásenie pre OpenStreetMap.org
- Prihlásiť sa do OpenStreetMap
- Prihláste sa pre odoslanie nových alebo zmenených údajov,
+ Prihlásiť sa do OpenStreetMap
+ Prihlásiť sa do OpenStreetMap.org
+ Zaregistrovať sa do OpenStreetMap
+ Musíte sa prihlásiť pre odoslanie nových alebo zmenených údajov.
\n
-\nbuď pomocou metódy OAuth alebo pomocou mena a hesla.
- Prihlásiť sa menom a heslom
+\nMôžete sa prihlásiť pomocou bezpečnej metódy OAuth alebo pomocou mena a hesla.
+ Použiť meno a heslo
Účet
Prihlasovacie meno
História značiek
@@ -3967,11 +3967,11 @@
Zadajte značky oddelené čiarkou.
Zatvoriť OSM poznámku
Komentovať OSM poznámku
- Prihláste sa bezpečnou metódou OAuth alebo použite meno a heslo.
+ Môžete sa prihlásiť bezpečnou metódou OAuth alebo použite meno a heslo.
Pridať foto
Zaregistrovať na
\nOpenPlaceReviews.org
- Prihláste sa na webstránke projektu OpenPlaceReviews.org s otvorenými dátami pre odoslanie ďalších fotografií.
+ Fotografie sú poskytované projektom OpenPlaceReviews.org s otvorenými dátami. Na odoslanie vašich fotiek sa musíte zaregistrovať na webovej stránke.
Vytvoriť nový účet
Už mám účet
História hľadania
@@ -3993,6 +3993,8 @@
Zvoľte položky, ktoré budú importované.
Prepnúť na dev.openstreetmap.org namiesto openstreetmap.org pre otestovanie odosielania OSM poznámok / bodov záujmu / GPX stôp.
Použiť dev.openstreetmap.org
-
-
+ Nedá sa odoslať obrázok, prosím skúste neskôr
+ Zvoľte obrázok
+ Nemecky (Deutsch) úsporne
+ %1$s * %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-sr/phrases.xml b/OsmAnd/res/values-sr/phrases.xml
index 69b1046618..e511263c30 100644
--- a/OsmAnd/res/values-sr/phrases.xml
+++ b/OsmAnd/res/values-sr/phrases.xml
@@ -3329,7 +3329,7 @@
Највиша тачка
Ледени језик
Остатак
- Полица
+ Плато
Стена
Ледопад
Висећи
@@ -3421,8 +3421,8 @@
Пречник круне
Обим
Пењачке руте
- Дневник врха пењања: не
- Дневник врха пењања: да
+ Брвно врха пењања: не
+ Брвно врха пењања: да
Оријентација зида: СЗ
Оријентација зида: З
Оријентација зида: ЈЗ
@@ -3774,7 +3774,7 @@
Цев
Мрежа за поновно доливање питке воде
Доливање воде за пиће: не
- Доливање воде за пиће: да
+ Да
Опструкција
Ниво воде: испод средњег нивоа
Ниво воде: изнад средњег нивоа
@@ -3789,7 +3789,7 @@
Примитивно
Контрастно
Дозвољено је само при ходању
- Сигнал за проналазак пола
+ Приступ интернету: купци
Не
Да
Тип кабине
diff --git a/OsmAnd/res/values-sr/strings.xml b/OsmAnd/res/values-sr/strings.xml
index 734562aaca..5b5058fea5 100644
--- a/OsmAnd/res/values-sr/strings.xml
+++ b/OsmAnd/res/values-sr/strings.xml
@@ -1648,7 +1648,7 @@
Холандски
Грузијски
Хебрејски
- Хинди
+ Индијски
Мађарски (званични)
Канада
Летонски
@@ -3993,4 +3993,5 @@
Пређите на употребу dev.openstreetmap.org уместо на openstreetmap.org да бисте тестирали отпремање ОСМ белешке / ПОИ / ГПКС.
Употреби dev.openstreetmap.org
%1$s * %2$s
+ Немачки (говорни)
\ No newline at end of file
diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml
index 3e9e76b023..2a9bae4b58 100644
--- a/OsmAnd/res/values-uk/strings.xml
+++ b/OsmAnd/res/values-uk/strings.xml
@@ -3996,4 +3996,5 @@
Не вдається завантажити зображення, повторіть спробу пізніше
Вибрати зображення
%1$s * %2$s
+ Німецька (неформальна)
\ No newline at end of file
diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml
index 1b6bd9fee5..a5994b6225 100644
--- a/OsmAnd/res/values-zh-rTW/strings.xml
+++ b/OsmAnd/res/values-zh-rTW/strings.xml
@@ -3994,4 +3994,6 @@
使用 dev.openstreetmap.org
無法上傳圖片,請稍後再試
選取圖片
+ 德語(非正式)
+ %1$s * %2$s
\ No newline at end of file
diff --git a/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java b/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java
index da5f6359b0..c2b1c25591 100644
--- a/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java
+++ b/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java
@@ -31,8 +31,6 @@ import net.osmand.data.PointDescription;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
-import net.osmand.plus.mapmarkers.MapMarkersHelper;
-import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
@@ -41,6 +39,8 @@ import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.MapActivity.ShowQuickSearchMode;
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
+import net.osmand.plus.mapmarkers.MapMarker;
+import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
import net.osmand.plus.quickaction.QuickAction;
import net.osmand.plus.quickaction.QuickActionRegistry;
@@ -160,14 +160,6 @@ public class ExternalApiHelper {
public static final String PARAM_QUICK_ACTION_PARAMS = "quick_action_params";
public static final String PARAM_QUICK_ACTION_NUMBER = "quick_action_number";
- public static final ApplicationMode[] VALID_PROFILES = new ApplicationMode[]{
- ApplicationMode.CAR,
- ApplicationMode.BICYCLE,
- ApplicationMode.PEDESTRIAN
- };
-
- public static final ApplicationMode DEFAULT_PROFILE = ApplicationMode.CAR;
-
// RESULT_OK == -1
// RESULT_CANCELED == 0
// RESULT_FIRST_USER == 1
@@ -258,15 +250,8 @@ public class ExternalApiHelper {
} else if (API_CMD_NAVIGATE.equals(cmd)) {
String profileStr = uri.getQueryParameter(PARAM_PROFILE);
- final ApplicationMode profile = ApplicationMode.valueOfStringKey(profileStr, DEFAULT_PROFILE);
- boolean validProfile = false;
- for (ApplicationMode mode : VALID_PROFILES) {
- if (mode == profile) {
- validProfile = true;
- break;
- }
- }
- if (!validProfile) {
+ final ApplicationMode profile = findNavigationProfile(app, profileStr);
+ if (profile == null) {
resultCode = RESULT_CODE_ERROR_INVALID_PROFILE;
} else {
String startName = uri.getQueryParameter(PARAM_START_NAME);
@@ -325,19 +310,12 @@ public class ExternalApiHelper {
} else if (API_CMD_NAVIGATE_SEARCH.equals(cmd)) {
String profileStr = uri.getQueryParameter(PARAM_PROFILE);
- final ApplicationMode profile = ApplicationMode.valueOfStringKey(profileStr, DEFAULT_PROFILE);
- boolean validProfile = false;
- for (ApplicationMode mode : VALID_PROFILES) {
- if (mode == profile) {
- validProfile = true;
- break;
- }
- }
+ final ApplicationMode profile = findNavigationProfile(app, profileStr);
final boolean showSearchResults = uri.getBooleanQueryParameter(PARAM_SHOW_SEARCH_RESULTS, false);
final String searchQuery = uri.getQueryParameter(PARAM_DEST_SEARCH_QUERY);
if (Algorithms.isEmpty(searchQuery)) {
resultCode = RESULT_CODE_ERROR_EMPTY_SEARCH_QUERY;
- } else if (!validProfile) {
+ } else if (profile == null) {
resultCode = RESULT_CODE_ERROR_INVALID_PROFILE;
} else {
String startName = uri.getQueryParameter(PARAM_START_NAME);
@@ -642,6 +620,18 @@ public class ExternalApiHelper {
return result;
}
+ private ApplicationMode findNavigationProfile(@NonNull OsmandApplication app, @Nullable String profileStr) {
+ if (!ApplicationMode.DEFAULT.getStringKey().equals(profileStr)) {
+ ApplicationMode profile = ApplicationMode.valueOfStringKey(profileStr, ApplicationMode.CAR);
+ for (ApplicationMode mode : ApplicationMode.values(app)) {
+ if (mode == profile && !Algorithms.isEmpty(mode.getRoutingProfile())) {
+ return mode;
+ }
+ }
+ }
+ return null;
+ }
+
public static void saveAndNavigateGpx(MapActivity mapActivity, final GPXFile gpxFile, final boolean force) {
final WeakReference mapActivityRef = new WeakReference<>(mapActivity);
@@ -732,10 +722,10 @@ public class ExternalApiHelper {
}
static private void startNavigation(MapActivity mapActivity,
- GPXFile gpx,
- LatLon from, PointDescription fromDesc,
- LatLon to, PointDescription toDesc,
- ApplicationMode mode) {
+ GPXFile gpx,
+ LatLon from, PointDescription fromDesc,
+ LatLon to, PointDescription toDesc,
+ ApplicationMode mode) {
OsmandApplication app = mapActivity.getMyApplication();
RoutingHelper routingHelper = app.getRoutingHelper();
if (gpx == null) {
diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java
index 3f6b27129e..0b9398a908 100644
--- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java
+++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java
@@ -25,10 +25,13 @@ import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
+import gnu.trove.map.TLongObjectMap;
+import gnu.trove.map.hash.TLongObjectHashMap;
public class TravelObfHelper implements TravelHelper{
@@ -46,13 +49,14 @@ public class TravelObfHelper implements TravelHelper{
private List existingTravelBooks = new ArrayList<>();
private List popularArticles = new ArrayList();
- private BinaryMapIndexReader index = null;
+ private TLongObjectMap cachedArticles;
public TravelObfHelper(OsmandApplication application) {
this.application = application;
collator = OsmAndCollator.primaryCollator();
localDataHelper = new TravelLocalDataHelper(application);
+ cachedArticles = new TLongObjectHashMap<>();
}
public static boolean checkIfObfFileExists(OsmandApplication app) {
@@ -194,18 +198,18 @@ public class TravelObfHelper implements TravelHelper{
while (it.hasNext()) {
Amenity a = it.next();
if (!a.getName(language).equals("")) {
- popularArticles.add(readArticle(a, language));
+ TravelArticle article = readArticle(a, language);
+ popularArticles.add(article);
+ writeToCache(article);
}
}
}
} catch (Exception e) {
- e.printStackTrace();
+ LOG.error(e.getMessage());
}
-
return popularArticles;
}
-
private TravelArticle readArticle(Amenity amenity, String lang) {
TravelArticle res = new TravelArticle();
@@ -215,13 +219,13 @@ public class TravelObfHelper implements TravelHelper{
res.lat = amenity.getLocation().getLatitude();
res.lon = amenity.getLocation().getLongitude();
res.imageTitle = amenity.getTagContent(Amenity.IMAGE_TITLE, lang) == null ? "" : amenity.getTagContent(Amenity.IMAGE_TITLE, lang);
- res.tripId = amenity.getId(); //?
+ res.tripId = getTripId(amenity);
res.originalId = 0; //?
res.lang = lang;
res.contentsJson = amenity.getTagContent(Amenity.CONTENT_JSON, lang) == null ? "" : amenity.getTagContent(Amenity.CONTENT_JSON, lang);
res.aggregatedPartOf = amenity.getTagContent(Amenity.IS_AGGR_PART, lang) == null ? "" : amenity.getTagContent(Amenity.IS_AGGR_PART, lang);
-// crash in some places, need to fix it
+// occasional crashes
// try {
// String gpxContent = amenity.getAdditionalInfo("gpx_info");
// res.gpxFile = GPXUtilities.loadGPXFile(new ByteArrayInputStream(gpxContent.getBytes("UTF-8")));
@@ -232,6 +236,19 @@ public class TravelObfHelper implements TravelHelper{
return res;
}
+ private long getTripId(Amenity amenity) {
+ long tripId = -1;
+ String val = amenity.getTagContent(Amenity.ROUTE_ID, null);
+ if (val != null && val.startsWith("Q")) {
+ try {
+ tripId = Long.parseLong(val.substring(1));
+ } catch (NumberFormatException nfe) {
+ LOG.error(nfe.getMessage());
+ }
+ }
+ return tripId;
+ }
+
private BinaryMapIndexReader getBookBinaryIndex() throws IOException {
application.getSettings().SELECTED_TRAVEL_BOOK.set(selectedTravelBook.getName());
try {
@@ -254,14 +271,71 @@ public class TravelObfHelper implements TravelHelper{
return null;
}
- @Override
- public TravelArticle getArticle(long cityId, String lang) {
- return null;
+ private void writeToCache(TravelArticle article) {
+ cachedArticles.put(article.tripId, article);
+ }
+
+ private TravelArticle getArticleFromCache(long tripId, String lang) {
+
+ TravelArticle article = cachedArticles.get(tripId);
+// if (aa != null) {
+// article = readArticle(aa, lang);
+// }
+ return article;
}
@Override
- public TravelArticle getArticle(String title, String lang) {
- return null;
+ public TravelArticle getArticle(long resId, String lang) {
+ TravelArticle article = getArticleFromCache(resId, lang);
+ if (article != null) {
+ return article;
+ }
+ String name = ""; //???
+ return getArticle(name, lang);
+ }
+
+ @Override
+ public TravelArticle getArticle(final String title, final String lang) {
+ TravelArticle res = null;
+ List amenities = Collections.emptyList();
+ try {
+ BinaryMapIndexReader indexReader = getBookBinaryIndex();
+ if (indexReader != null) {
+ int left = 0;
+ int top = 0;
+ int right = Integer.MAX_VALUE;
+ int bottom = Integer.MAX_VALUE;
+ LatLon ll = application.getMapViewTrackingUtilities().getMapLocation();
+ BinaryMapIndexReader.SearchRequest req = BinaryMapIndexReader.buildSearchPoiRequest(
+ MapUtils.get31TileNumberX(ll.getLongitude()),
+ MapUtils.get31TileNumberY(ll.getLatitude()), title,
+ left, top, right, bottom,
+ new ResultMatcher() {
+ @Override
+ public boolean publish(Amenity object) {
+ if (object.getName(lang).equals(title)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return false;
+ }
+ });
+
+ amenities = indexReader.searchPoiByName(req);
+ }
+ } catch (IOException e) {
+ //todo
+ }
+ if (!amenities.isEmpty()) {
+ for (Amenity a : amenities) {
+ LOG.debug("searched article: " + a);
+ }
+ }
+ return res;
}
@Override
@@ -269,9 +343,19 @@ public class TravelObfHelper implements TravelHelper{
return 0;
}
+
+ //TODO finish stub
@Override
public ArrayList getArticleLangs(long cityId) {
- return null;
+ ArrayList res = new ArrayList<>();
+ res.add("en");
+
+ for (TravelArticle article : popularArticles) {
+ if (article.getTripId() == cityId) {
+ res.add(article.getLang());
+ }
+ }
+ return res;
}
@Override