summaryrefslogtreecommitdiffstats
path: root/core/divelist.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/divelist.c')
-rw-r--r--core/divelist.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/core/divelist.c b/core/divelist.c
index 1dc4e3d8a..ee7986466 100644
--- a/core/divelist.c
+++ b/core/divelist.c
@@ -47,6 +47,8 @@
* int find_next_visible_dive(timestamp_t when);
* void clear_dive_file_data()
* void clear_table(struct dive_table *table)
+ * bool trip_is_single_day(const struct dive_trip *trip)
+ * int trip_shown_dives(const struct dive_trip *trip)
*/
#include <unistd.h>
#include <stdio.h>
@@ -1875,3 +1877,37 @@ struct dive *find_next_visible_dive(timestamp_t when)
return NULL;
}
+
+static bool is_same_day(timestamp_t trip_when, timestamp_t dive_when)
+{
+ static timestamp_t twhen = (timestamp_t) 0;
+ static struct tm tmt;
+ struct tm tmd;
+
+ utc_mkdate(dive_when, &tmd);
+
+ if (twhen != trip_when) {
+ twhen = trip_when;
+ utc_mkdate(twhen, &tmt);
+ }
+
+ return (tmd.tm_mday == tmt.tm_mday) && (tmd.tm_mon == tmt.tm_mon) && (tmd.tm_year == tmt.tm_year);
+}
+
+bool trip_is_single_day(const struct dive_trip *trip)
+{
+ if (trip->dives.nr <= 1)
+ return true;
+ return is_same_day(trip->dives.dives[0]->when,
+ trip->dives.dives[trip->dives.nr - 1]->when);
+}
+
+int trip_shown_dives(const struct dive_trip *trip)
+{
+ int res = 0;
+ for (int i = 0; i < trip->dives.nr; ++i) {
+ if (!trip->dives.dives[i]->hidden_by_filter)
+ res++;
+ }
+ return res;
+}