Add database helper for wikivoyage
This commit is contained in:
parent
2ebca53e25
commit
ae700b3eae
4 changed files with 133 additions and 1 deletions
|
@ -54,6 +54,7 @@ public class IndexConstants {
|
||||||
public static final String SRTM_INDEX_DIR = "srtm/"; //$NON-NLS-1$
|
public static final String SRTM_INDEX_DIR = "srtm/"; //$NON-NLS-1$
|
||||||
public static final String ROADS_INDEX_DIR = "roads/"; //$NON-NLS-1$
|
public static final String ROADS_INDEX_DIR = "roads/"; //$NON-NLS-1$
|
||||||
public static final String WIKI_INDEX_DIR = "wiki/"; //$NON-NLS-1$
|
public static final String WIKI_INDEX_DIR = "wiki/"; //$NON-NLS-1$
|
||||||
|
public static final String WIKIVOYAGE_INDEX_DIR = "wikivoyage/";
|
||||||
public static final String AV_INDEX_DIR = "avnotes/"; //$NON-NLS-1$
|
public static final String AV_INDEX_DIR = "avnotes/"; //$NON-NLS-1$
|
||||||
public static final String FONT_INDEX_DIR = "fonts/"; //$NON-NLS-1$
|
public static final String FONT_INDEX_DIR = "fonts/"; //$NON-NLS-1$
|
||||||
public static final String VOICE_INDEX_DIR = "voice/"; //$NON-NLS-1$
|
public static final String VOICE_INDEX_DIR = "voice/"; //$NON-NLS-1$
|
||||||
|
|
|
@ -47,6 +47,7 @@ import net.osmand.plus.voice.CommandPlayer;
|
||||||
import net.osmand.plus.voice.CommandPlayerException;
|
import net.osmand.plus.voice.CommandPlayerException;
|
||||||
import net.osmand.plus.voice.MediaCommandPlayerImpl;
|
import net.osmand.plus.voice.MediaCommandPlayerImpl;
|
||||||
import net.osmand.plus.voice.TTSCommandPlayerImpl;
|
import net.osmand.plus.voice.TTSCommandPlayerImpl;
|
||||||
|
import net.osmand.plus.wikivoyage.data.WikivoyageDbHelper;
|
||||||
import net.osmand.render.RenderingRulesStorage;
|
import net.osmand.render.RenderingRulesStorage;
|
||||||
import net.osmand.router.RoutingConfiguration;
|
import net.osmand.router.RoutingConfiguration;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
@ -445,6 +446,7 @@ public class AppInitializer implements IProgress {
|
||||||
app.mapMarkersDbHelper = startupInit(new MapMarkersDbHelper(app), MapMarkersDbHelper.class);
|
app.mapMarkersDbHelper = startupInit(new MapMarkersDbHelper(app), MapMarkersDbHelper.class);
|
||||||
app.mapMarkersHelper = startupInit(new MapMarkersHelper(app), MapMarkersHelper.class);
|
app.mapMarkersHelper = startupInit(new MapMarkersHelper(app), MapMarkersHelper.class);
|
||||||
app.searchUICore = startupInit(new QuickSearchHelper(app), QuickSearchHelper.class);
|
app.searchUICore = startupInit(new QuickSearchHelper(app), QuickSearchHelper.class);
|
||||||
|
app.wikivoyageDbHelper = startupInit(new WikivoyageDbHelper(app), WikivoyageDbHelper.class);
|
||||||
|
|
||||||
initOpeningHoursParser();
|
initOpeningHoursParser();
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@ import net.osmand.plus.resources.ResourceManager;
|
||||||
import net.osmand.plus.routing.RoutingHelper;
|
import net.osmand.plus.routing.RoutingHelper;
|
||||||
import net.osmand.plus.search.QuickSearchHelper;
|
import net.osmand.plus.search.QuickSearchHelper;
|
||||||
import net.osmand.plus.voice.CommandPlayer;
|
import net.osmand.plus.voice.CommandPlayer;
|
||||||
|
import net.osmand.plus.wikivoyage.data.WikivoyageDbHelper;
|
||||||
import net.osmand.router.RoutingConfiguration;
|
import net.osmand.router.RoutingConfiguration;
|
||||||
import net.osmand.search.SearchUICore;
|
import net.osmand.search.SearchUICore;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
@ -117,6 +118,7 @@ public class OsmandApplication extends MultiDexApplication {
|
||||||
OsmandRegions regions;
|
OsmandRegions regions;
|
||||||
GeocodingLookupService geocodingLookupService;
|
GeocodingLookupService geocodingLookupService;
|
||||||
QuickSearchHelper searchUICore;
|
QuickSearchHelper searchUICore;
|
||||||
|
WikivoyageDbHelper wikivoyageDbHelper;
|
||||||
|
|
||||||
RoutingConfiguration.Builder defaultRoutingConfig;
|
RoutingConfiguration.Builder defaultRoutingConfig;
|
||||||
private Locale preferredLocale = null;
|
private Locale preferredLocale = null;
|
||||||
|
@ -390,6 +392,10 @@ public class OsmandApplication extends MultiDexApplication {
|
||||||
return searchUICore;
|
return searchUICore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public WikivoyageDbHelper getWikivoyageDbHelper() {
|
||||||
|
return wikivoyageDbHelper;
|
||||||
|
}
|
||||||
|
|
||||||
public CommandPlayer getPlayer() {
|
public CommandPlayer getPlayer() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,123 @@
|
||||||
|
package net.osmand.plus.wikivoyage.data;
|
||||||
|
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
|
||||||
|
import net.osmand.IndexConstants;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.api.SQLiteAPI.SQLiteConnection;
|
||||||
|
import net.osmand.plus.api.SQLiteAPI.SQLiteCursor;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class WikivoyageDbHelper {
|
||||||
|
|
||||||
|
private static final String DB_NAME = "wikivoyage.sqlite";
|
||||||
|
|
||||||
|
private static final String ARTICLES_TABLE_NAME = "wikivoyage_articles";
|
||||||
|
private static final String ARTICLES_COL_ID = "article_id";
|
||||||
|
private static final String ARTICLES_COL_TITLE = "title";
|
||||||
|
private static final String ARTICLES_COL_CONTENT = "content_gzblob";
|
||||||
|
private static final String ARTICLES_COL_IS_PART_OF = "is_part_of";
|
||||||
|
private static final String ARTICLES_COL_LAT = "lat";
|
||||||
|
private static final String ARTICLES_COL_LON = "lon";
|
||||||
|
private static final String ARTICLES_COL_IMAGE_TITLE = "image_title";
|
||||||
|
private static final String ARTICLES_COL_GPX_GZ = "gpx_gz";
|
||||||
|
private static final String ARTICLES_COL_CITY_ID = "city_id";
|
||||||
|
private static final String ARTICLES_COL_ORIGINAL_ID = "original_id";
|
||||||
|
private static final String ARTICLES_COL_LANG = "lang";
|
||||||
|
|
||||||
|
private static final String ARTICLES_TABLE_SELECT = "SELECT " +
|
||||||
|
ARTICLES_COL_ID + ", " +
|
||||||
|
ARTICLES_COL_TITLE + ", " +
|
||||||
|
ARTICLES_COL_CONTENT + ", " +
|
||||||
|
ARTICLES_COL_IS_PART_OF + ", " +
|
||||||
|
ARTICLES_COL_LAT + ", " +
|
||||||
|
ARTICLES_COL_LON + ", " +
|
||||||
|
ARTICLES_COL_IMAGE_TITLE + ", " +
|
||||||
|
ARTICLES_COL_GPX_GZ + ", " +
|
||||||
|
ARTICLES_COL_CITY_ID + ", " +
|
||||||
|
ARTICLES_COL_ORIGINAL_ID + ", " +
|
||||||
|
ARTICLES_COL_LANG +
|
||||||
|
" FROM " + ARTICLES_TABLE_NAME;
|
||||||
|
|
||||||
|
private static final String SEARCH_TABLE_NAME = "wikivoyage_search";
|
||||||
|
private static final String SEARCH_COL_SEARCH_TERM = "search_term";
|
||||||
|
private static final String SEARCH_COL_CITY_ID = "city_id";
|
||||||
|
private static final String SEARCH_COL_ARTICLE_TITLE = "article_title";
|
||||||
|
private static final String SEARCH_COL_LANG = "lang";
|
||||||
|
|
||||||
|
private static final String SEARCH_TABLE_SELECT = "SELECT " +
|
||||||
|
SEARCH_COL_SEARCH_TERM + ", " +
|
||||||
|
SEARCH_COL_CITY_ID + ", " +
|
||||||
|
SEARCH_COL_ARTICLE_TITLE + ", " +
|
||||||
|
SEARCH_COL_LANG +
|
||||||
|
" FROM " + SEARCH_TABLE_NAME;
|
||||||
|
|
||||||
|
private final OsmandApplication application;
|
||||||
|
|
||||||
|
public WikivoyageDbHelper(OsmandApplication application) {
|
||||||
|
this.application = application;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SearchResult> search(String searchQuery) {
|
||||||
|
List<SearchResult> res = new ArrayList<>();
|
||||||
|
SQLiteConnection conn = openConnection();
|
||||||
|
if (conn != null) {
|
||||||
|
try {
|
||||||
|
String dbQuery = SEARCH_TABLE_SELECT + " WHERE " + SEARCH_COL_SEARCH_TERM + " LIKE " + "'%" + searchQuery + "%'";
|
||||||
|
SQLiteCursor cursor = conn.rawQuery(dbQuery, null);
|
||||||
|
if (cursor.moveToFirst()) {
|
||||||
|
do {
|
||||||
|
res.add(readSearchResult(cursor));
|
||||||
|
} while (cursor.moveToNext());
|
||||||
|
}
|
||||||
|
cursor.close();
|
||||||
|
} finally {
|
||||||
|
conn.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private SQLiteConnection openConnection() {
|
||||||
|
String path = application.getAppPath(IndexConstants.WIKIVOYAGE_INDEX_DIR + DB_NAME).getAbsolutePath();
|
||||||
|
return application.getSQLiteAPI().openByAbsolutePath(path, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private SearchResult readSearchResult(SQLiteCursor query) {
|
||||||
|
SearchResult res = new SearchResult();
|
||||||
|
|
||||||
|
res.searchTerm = query.getString(0);
|
||||||
|
res.cityId = query.getLong(1);
|
||||||
|
res.articleTitle = query.getString(2);
|
||||||
|
res.lang = query.getString(3);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class SearchResult {
|
||||||
|
|
||||||
|
private String searchTerm;
|
||||||
|
private long cityId;
|
||||||
|
private String articleTitle;
|
||||||
|
private String lang;
|
||||||
|
|
||||||
|
public String getSearchTerm() {
|
||||||
|
return searchTerm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getCityId() {
|
||||||
|
return cityId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getArticleTitle() {
|
||||||
|
return articleTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLang() {
|
||||||
|
return lang;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue