Fix saving id with alias

This commit is contained in:
Vitaliy 2021-04-22 17:58:27 +03:00
parent c1e6654319
commit 0256796d23
3 changed files with 30 additions and 19 deletions

View file

@ -30,11 +30,13 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.TimeZone; import java.util.TimeZone;
import static net.osmand.GPXUtilities.writeNotNullText; import static net.osmand.GPXUtilities.writeNotNullText;
import static net.osmand.plus.FavouritesDbHelper.backup; import static net.osmand.plus.FavouritesDbHelper.backup;
import static net.osmand.util.MapUtils.createShortLinkString;
public class ItineraryDataHelper { public class ItineraryDataHelper {
@ -48,8 +50,8 @@ public class ItineraryDataHelper {
private static final String FILE_TO_BACKUP = "itinerary_bak.gpx"; private static final String FILE_TO_BACKUP = "itinerary_bak.gpx";
private static final String ITINERARY_ID = "itinerary_id"; private static final String ITINERARY_ID = "itinerary_id";
private static final String ITINERARY_GROUP = "itinerary_group"; private static final String ITINERARY_GROUP = "itinerary_group";
private static final String GPX_ORIGIN = "gpx_origin"; private static final String GPX_KEY = "gpx";
private static final String FAVOURITES_ORIGIN = "favourites_origin"; private static final String FAVOURITES_KEY = "favourites_group";
private static final SimpleDateFormat GPX_TIME_FORMAT = new SimpleDateFormat(GPXUtilities.GPX_TIME_FORMAT, Locale.US); private static final SimpleDateFormat GPX_TIME_FORMAT = new SimpleDateFormat(GPXUtilities.GPX_TIME_FORMAT, Locale.US);
@ -105,6 +107,7 @@ public class ItineraryDataHelper {
writeNotNullText(serializer, "osmand:name", group.name); writeNotNullText(serializer, "osmand:name", group.name);
writeNotNullText(serializer, "osmand:type", group.type); writeNotNullText(serializer, "osmand:type", group.type);
writeNotNullText(serializer, "osmand:path", group.path); writeNotNullText(serializer, "osmand:path", group.path);
writeNotNullText(serializer, "osmand:alias", group.alias);
writeNotNullText(serializer, "osmand:categories", group.categories); writeNotNullText(serializer, "osmand:categories", group.categories);
serializer.endTag(null, "osmand:" + ITINERARY_GROUP); serializer.endTag(null, "osmand:" + ITINERARY_GROUP);
@ -162,18 +165,17 @@ public class ItineraryDataHelper {
for (MapMarker marker : group.getMarkers()) { for (MapMarker marker : group.getMarkers()) {
WptPt wptPt = toWpt(marker); WptPt wptPt = toWpt(marker);
String markerId = marker.id; Map<String, String> extensions = wptPt.getExtensionsToWrite();
String name = marker.getName(app); if (group.getType() != ItineraryType.FAVOURITES) {
int index = markerId.indexOf(name); String itineraryId = createShortLinkString(wptPt.lat, wptPt.lon, 15);
if (index != -1) { extensions.put(ITINERARY_ID, groupInfo.alias + ":" + itineraryId);
markerId = markerId.substring(index + name.length());
}
wptPt.getExtensionsToWrite().put(ITINERARY_ID, groupInfo.type + ":" + markerId);
if (group.getType() == ItineraryType.TRACK) {
wptPt.getExtensionsToWrite().put(GPX_ORIGIN, groupInfo.path);
} else { } else {
wptPt.getExtensionsToWrite().put(FAVOURITES_ORIGIN, groupInfo.name); extensions.put(ITINERARY_ID, groupInfo.alias + ":" + marker.getName(app));
}
if (group.getType() == ItineraryType.TRACK) {
extensions.put(GPX_KEY, groupInfo.path);
} else if (group.getType() == ItineraryType.FAVOURITES && !Algorithms.isEmpty(groupInfo.name)) {
extensions.put(FAVOURITES_KEY, groupInfo.name);
} }
gpxFile.addPoint(wptPt); gpxFile.addPoint(wptPt);
} }
@ -234,12 +236,13 @@ public class ItineraryDataHelper {
public String name; public String name;
public String type; public String type;
public String path; public String path;
public String alias;
public String categories; public String categories;
public static ItineraryGroupInfo createGroupInfo(OsmandApplication app, MapMarkersGroup group) { public static ItineraryGroupInfo createGroupInfo(OsmandApplication app, MapMarkersGroup group) {
ItineraryGroupInfo groupInfo = new ItineraryGroupInfo(); ItineraryGroupInfo groupInfo = new ItineraryGroupInfo();
groupInfo.name = group.getName();
groupInfo.type = group.getType().getTypeName(); groupInfo.type = group.getType().getTypeName();
groupInfo.name = !Algorithms.isEmpty(group.getName()) ? group.getName() : null;
Set<String> wptCategories = group.getWptCategories(); Set<String> wptCategories = group.getWptCategories();
if (!Algorithms.isEmpty(wptCategories)) { if (!Algorithms.isEmpty(wptCategories)) {
@ -253,6 +256,9 @@ public class ItineraryDataHelper {
path = path.substring(gpxDir.length() + 1); path = path.substring(gpxDir.length() + 1);
} }
groupInfo.path = path; groupInfo.path = path;
groupInfo.alias = groupInfo.type + ":" + path.replace(IndexConstants.GPX_FILE_EXT, "");
} else {
groupInfo.alias = groupInfo.type + (groupInfo.name == null ? "" : ":" + groupInfo.name);
} }
return groupInfo; return groupInfo;
} }

View file

@ -18,8 +18,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import static net.osmand.util.MapUtils.createShortLinkString;
public class MapMarkersDbHelper { public class MapMarkersDbHelper {
private static final int DB_VERSION = 13; private static final int DB_VERSION = 13;
@ -304,7 +302,7 @@ public class MapMarkersDbHelper {
private void insertLast(SQLiteConnection db, MapMarker marker) { private void insertLast(SQLiteConnection db, MapMarker marker) {
long currentTime = System.currentTimeMillis(); long currentTime = System.currentTimeMillis();
if (marker.id == null) { if (marker.id == null) {
marker.id = marker.getName(context) + createShortLinkString(marker.point.getLatitude(), marker.point.getLongitude(), 15); marker.id = MapMarkersHelper.getMarkerId(context, marker);
} }
marker.creationDate = currentTime; marker.creationDate = currentTime;
String descr = PointDescription.serializeToString(marker.getOriginalPointDescription()); String descr = PointDescription.serializeToString(marker.getOriginalPointDescription());

View file

@ -43,6 +43,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import static net.osmand.data.PointDescription.POINT_TYPE_MAP_MARKER; import static net.osmand.data.PointDescription.POINT_TYPE_MAP_MARKER;
import static net.osmand.util.MapUtils.createShortLinkString;
public class MapMarkersHelper { public class MapMarkersHelper {
@ -186,6 +187,7 @@ public class MapMarkersHelper {
runSynchronization(gr); runSynchronization(gr);
} }
} }
saveGroups();
} }
public void lookupAddressAll() { public void lookupAddressAll() {
@ -640,7 +642,7 @@ public class MapMarkersHelper {
Iterator<MapMarker> iterator = groupMarkers.iterator(); Iterator<MapMarker> iterator = groupMarkers.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
MapMarker marker = iterator.next(); MapMarker marker = iterator.next();
if (marker.id.equals(group.getId() + name + MapUtils.createShortLinkString(latLon.getLatitude(), latLon.getLongitude(), 15))) { if (marker.id.equals(getMarkerId(app, marker))) {
exists = true; exists = true;
marker.favouritePoint = favouritePoint; marker.favouritePoint = favouritePoint;
marker.wptPt = wptPt; marker.wptPt = wptPt;
@ -907,7 +909,7 @@ public class MapMarkersHelper {
MapMarker marker = new MapMarker(point, pointDescription, colorIndex, false, 0); MapMarker marker = new MapMarker(point, pointDescription, colorIndex, false, 0);
if (group != null) { if (group != null) {
marker.id = group.getId() + marker.getName(app) + MapUtils.createShortLinkString(marker.point.getLatitude(), marker.point.getLongitude(), 15); marker.id = getMarkerId(app, marker);
if (markersDbHelper.getMarker(marker.id) != null) { if (markersDbHelper.getMarker(marker.id) != null) {
continue; continue;
} }
@ -929,6 +931,11 @@ public class MapMarkersHelper {
} }
} }
public static String getMarkerId(OsmandApplication app, MapMarker marker) {
String groupId = marker.groupKey == null ? "" : marker.groupKey;
return groupId + marker.getName(app) + createShortLinkString(marker.point.getLatitude(), marker.point.getLongitude(), 15);
}
public void updateMapMarker(MapMarker marker, boolean refresh) { public void updateMapMarker(MapMarker marker, boolean refresh) {
if (marker != null) { if (marker != null) {
markersDbHelper.updateMarker(marker); markersDbHelper.updateMarker(marker);