mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Fix an issue with trips that have dives from multiple input files
The existing code didn't handle the case of different trips for the same date coming from different sources. It also got confused if the first dive processed (which is, chronologically, the last dive) happened to be a "NOTRIP" dive. This commit adds a bit of debugging infrastructure for the trip handling, too. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
6500e943c1
commit
9cf961249e
3 changed files with 38 additions and 6 deletions
33
dive.h
33
dive.h
|
|
@ -278,9 +278,40 @@ static inline int dive_date_cmp(gconstpointer _a, gconstpointer _b) {
|
|||
return ((struct dive *)(_a))->when - ((struct dive *)(_b))->when;
|
||||
}
|
||||
|
||||
#define INSERT_TRIP(_trip, _list) g_list_insert_sorted((_list), (_trip), dive_date_cmp)
|
||||
#define FIND_TRIP(_trip, _list) g_list_find_custom((_list), (_trip), dive_date_cmp)
|
||||
|
||||
#ifdef DEBUG_TRIP
|
||||
static void dump_trip_list(void)
|
||||
{
|
||||
GList *p = NULL;
|
||||
int i=0;
|
||||
while ((p = NEXT_TRIP(p, dive_trip_list))) {
|
||||
struct tm *tm = gmtime(&DIVE_TRIP(p)->when);
|
||||
printf("trip %d to \"%s\" on %04u-%02u-%02u\n", ++i, DIVE_TRIP(p)->location,
|
||||
tm->tm_year + 1900, tm->tm_mon+1, tm->tm_mday);
|
||||
}
|
||||
printf("-----\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
/* insert the trip into the list - but ensure you don't have two trips
|
||||
* for the same date; but if you have, make sure you don't keep the
|
||||
* one with less information */
|
||||
static inline GList *insert_trip(struct dive *_trip, GList *_list)
|
||||
{
|
||||
GList *result = FIND_TRIP(_trip, _list);
|
||||
if (result) {
|
||||
if (! DIVE_TRIP(result)->location)
|
||||
DIVE_TRIP(result)->location = _trip->location;
|
||||
} else {
|
||||
result = g_list_insert_sorted((_list), (_trip), dive_date_cmp);
|
||||
}
|
||||
#ifdef DEBUG_TRIP
|
||||
dump_trip_list();
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* We keep our internal data in well-specified units, but
|
||||
* the input and output may come in some random format. This
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue