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