Skip to content

Commit

Permalink
Prevent obsolete analysis calculation in TracksComparator
Browse files Browse the repository at this point in the history
  • Loading branch information
sonora committed May 15, 2024
1 parent a6e896f commit fc76219
Showing 1 changed file with 28 additions and 5 deletions.
33 changes: 28 additions & 5 deletions OsmAnd/src/net/osmand/plus/configmap/tracks/TracksComparator.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,8 @@ public int compare(Object o1, Object o2) {
}

private int compareTrackFolders(@NonNull ComparableTracksGroup folder1, @NonNull ComparableTracksGroup folder2) {
TrackFolderAnalysis folderAnalysis1 = folder1.getFolderAnalysis();
TrackFolderAnalysis folderAnalysis2 = folder2.getFolderAnalysis();

TrackFolderAnalysis folderAnalysis1;
TrackFolderAnalysis folderAnalysis2;
switch (sortMode) {
case NAME_ASCENDING:
return compareTrackFolderNames(folder1, folder2);
Expand All @@ -91,18 +90,26 @@ private int compareTrackFolders(@NonNull ComparableTracksGroup folder1, @NonNull
case LAST_MODIFIED:
return compareFolderFilesByLastModified(folder1, folder2);
case DISTANCE_DESCENDING:
folderAnalysis1 = folder1.getFolderAnalysis();
folderAnalysis2 = folder2.getFolderAnalysis();
if (Math.abs(folderAnalysis1.totalDistance - folderAnalysis2.totalDistance) >= EQUIVALENT_TOLERANCE) {
return -Float.compare(folderAnalysis1.totalDistance, folderAnalysis2.totalDistance);
}
case DISTANCE_ASCENDING:
folderAnalysis1 = folder1.getFolderAnalysis();
folderAnalysis2 = folder2.getFolderAnalysis();
if (Math.abs(folderAnalysis1.totalDistance - folderAnalysis2.totalDistance) >= EQUIVALENT_TOLERANCE) {
return Float.compare(folderAnalysis1.totalDistance, folderAnalysis2.totalDistance);
}
case DURATION_DESCENDING:
folderAnalysis1 = folder1.getFolderAnalysis();
folderAnalysis2 = folder2.getFolderAnalysis();
if (folderAnalysis1.timeSpan != folderAnalysis2.timeSpan) {
return -Long.compare(folderAnalysis1.timeSpan, folderAnalysis2.timeSpan);
}
case DURATION_ASCENDING:
folderAnalysis1 = folder1.getFolderAnalysis();
folderAnalysis2 = folder2.getFolderAnalysis();
if (folderAnalysis1.timeSpan != folderAnalysis2.timeSpan) {
return Long.compare(folderAnalysis1.timeSpan, folderAnalysis2.timeSpan);
}
Expand All @@ -118,10 +125,12 @@ private int compareTrackItems(@NonNull TrackItem item1, @NonNull TrackItem item2

GpxDataItem dataItem1 = item1.getDataItem();
GpxDataItem dataItem2 = item2.getDataItem();
GPXTrackAnalysis analysis1 = dataItem1 != null ? dataItem1.getAnalysis() : null;
GPXTrackAnalysis analysis2 = dataItem2 != null ? dataItem2.getAnalysis() : null;
GPXTrackAnalysis analysis1;
GPXTrackAnalysis analysis2;

if (shouldCheckAnalysis()) {
analysis1 = dataItem1 != null ? dataItem1.getAnalysis() : null;
analysis2 = dataItem2 != null ? dataItem2.getAnalysis() : null;
Integer analysis = checkItemsAnalysis(item1, item2, analysis1, analysis2);
if (analysis != null) {
return analysis;
Expand All @@ -130,12 +139,16 @@ private int compareTrackItems(@NonNull TrackItem item1, @NonNull TrackItem item2

switch (sortMode) {
case NEAREST:
analysis1 = dataItem1 != null ? dataItem1.getAnalysis() : null;
analysis2 = dataItem2 != null ? dataItem2.getAnalysis() : null;
return compareNearestItems(item1, item2, analysis1, analysis2);
case NAME_ASCENDING:
return compareTrackItemNames(item1, item2);
case NAME_DESCENDING:
return -compareTrackItemNames(item1, item2);
case DATE_ASCENDING:
analysis1 = dataItem1 != null ? dataItem1.getAnalysis() : null;
analysis2 = dataItem2 != null ? dataItem2.getAnalysis() : null;
long startTime1_asc = analysis1 == null ? 0 : analysis1.getStartTime();
long startTime2_asc = analysis2 == null ? 0 : analysis2.getStartTime();
long time1_asc = dataItem1 == null ? startTime1_asc : (long) dataItem1.getParameter(FILE_CREATION_TIME);
Expand All @@ -150,6 +163,8 @@ private int compareTrackItems(@NonNull TrackItem item1, @NonNull TrackItem item2
}
return -Long.compare(time1_asc, time2_asc);
case DATE_DESCENDING:
analysis1 = dataItem1 != null ? dataItem1.getAnalysis() : null;
analysis2 = dataItem2 != null ? dataItem2.getAnalysis() : null;
long startTime1_desc = analysis1 == null ? 0 : analysis1.getStartTime();
long startTime2_desc = analysis2 == null ? 0 : analysis2.getStartTime();
long time1_desc = dataItem1 == null ? startTime1_desc : (long) dataItem1.getParameter(FILE_CREATION_TIME);
Expand All @@ -166,21 +181,29 @@ private int compareTrackItems(@NonNull TrackItem item1, @NonNull TrackItem item2
case LAST_MODIFIED:
return compareItemFilesByLastModified(item1, item2);
case DISTANCE_DESCENDING:
analysis1 = dataItem1 != null ? dataItem1.getAnalysis() : null;
analysis2 = dataItem2 != null ? dataItem2.getAnalysis() : null;
if (Math.abs(analysis1.getTotalDistance() - analysis2.getTotalDistance()) < EQUIVALENT_TOLERANCE) {
return compareTrackItemNames(item1, item2);
}
return -Float.compare(analysis1.getTotalDistance(), analysis2.getTotalDistance());
case DISTANCE_ASCENDING:
analysis1 = dataItem1 != null ? dataItem1.getAnalysis() : null;
analysis2 = dataItem2 != null ? dataItem2.getAnalysis() : null;
if (Math.abs(analysis1.getTotalDistance() - analysis2.getTotalDistance()) < EQUIVALENT_TOLERANCE) {
return compareTrackItemNames(item1, item2);
}
return Float.compare(analysis1.getTotalDistance(), analysis2.getTotalDistance());
case DURATION_DESCENDING:
analysis1 = dataItem1 != null ? dataItem1.getAnalysis() : null;
analysis2 = dataItem2 != null ? dataItem2.getAnalysis() : null;
if (analysis1.getDurationInSeconds() == analysis2.getDurationInSeconds()) {
return compareTrackItemNames(item1, item2);
}
return -Long.compare(analysis1.getDurationInSeconds(), analysis2.getDurationInSeconds());
case DURATION_ASCENDING:
analysis1 = dataItem1 != null ? dataItem1.getAnalysis() : null;
analysis2 = dataItem2 != null ? dataItem2.getAnalysis() : null;
if (analysis1.getDurationInSeconds() == analysis2.getDurationInSeconds()) {
return compareTrackItemNames(item1, item2);
}
Expand Down

0 comments on commit fc76219

Please sign in to comment.