From b22e059f3100ac5f827a16bb9cd2c581772d6a6b Mon Sep 17 00:00:00 2001 From: Guido Günther Date: Sat, 22 Mar 2014 22:27:40 +0100 Subject: Allow to query trips by arrival instead of departure --- libplanfahr/lpf-provider.c | 4 ++-- libplanfahr/lpf-provider.h | 19 +++++++++++++++++-- libplanfahr/providers/hafas-bin6.c | 8 +++----- 3 files changed, 22 insertions(+), 9 deletions(-) (limited to 'libplanfahr') diff --git a/libplanfahr/lpf-provider.c b/libplanfahr/lpf-provider.c index 2697a88..fc2acc4 100644 --- a/libplanfahr/lpf-provider.c +++ b/libplanfahr/lpf-provider.c @@ -132,7 +132,7 @@ lpf_provider_free_locs(LpfProvider *self, GSList *locs) * @start: start of trip location * @end: end of trip location * @date: Date and time the trip starts as #GDateTime - * @flags: flags + * @flags: #LpfProviderGetTripsFlags for trip lookups * @callback: (scope async): #LpfProviderGotTripsNotify to invoke * once trips are available * @user_data: (allow-none): User data for the callback @@ -147,7 +147,7 @@ lpf_provider_free_locs(LpfProvider *self, GSList *locs) */ gint -lpf_provider_get_trips (LpfProvider *self, LpfLoc *start, LpfLoc *end, GDateTime *date, guint64 flags, LpfProviderGotLocsNotify callback, gpointer user_data) +lpf_provider_get_trips (LpfProvider *self, LpfLoc *start, LpfLoc *end, GDateTime *date, LpfProviderGetTripsFlags flags, LpfProviderGotLocsNotify callback, gpointer user_data) { g_return_val_if_fail (LPF_IS_PROVIDER (self), -1); g_return_val_if_fail (start, -1); diff --git a/libplanfahr/lpf-provider.h b/libplanfahr/lpf-provider.h index 8e706a4..fb05a70 100644 --- a/libplanfahr/lpf-provider.h +++ b/libplanfahr/lpf-provider.h @@ -64,6 +64,21 @@ typedef enum } LpfProviderGetLocsFlags; +/** + * LpfProviderGetTripsFlags: + * @LPF_PROVIDER_GET_TRIPS_NONE: No flags + * @LPF_PROVIDER_GET_TRIPS_ARRIVAL: Look for arrivals instead of departures + * at that date and time + * + * Flags passed to #lpf_provider_get_tips. + */ +typedef enum +{ + LPF_PROVIDER_GET_TRIPS_NONE = 0, + LPF_PROVIDER_GET_TRIPS_ARRIVAL = 1 << 1, +} LpfProviderGetTripsFlags; + + #define LPF_TYPE_PROVIDER (lpf_provider_get_type()) #define LPF_PROVIDER(obj) \ @@ -91,7 +106,7 @@ typedef struct { const gchar* (*get_name) (LpfProvider *self); gint (*get_locs) (LpfProvider *self, const gchar *match, LpfProviderGetLocsFlags flags, LpfProviderGotLocsNotify callback, gpointer user_data); - gint (*get_trips) (LpfProvider *self, LpfLoc *start, LpfLoc *end, GDateTime *date, guint64 flags, LpfProviderGotLocsNotify callback, gpointer user_data); + gint (*get_trips) (LpfProvider *self, LpfLoc *start, LpfLoc *end, GDateTime *date, LpfProviderGetTripsFlags flags, LpfProviderGotLocsNotify callback, gpointer user_data); } LpfProviderInterface; GType lpf_provider_get_type (void); @@ -107,7 +122,7 @@ GQuark lpf_provider_error_quark (void); gint lpf_provider_get_locs (LpfProvider *self, const gchar* match, LpfProviderGetLocsFlags flags, LpfProviderGotLocsNotify callback, gpointer user_data); void lpf_provider_free_locs (LpfProvider *self, GSList *locs); -gint lpf_provider_get_trips (LpfProvider *self, LpfLoc *start, LpfLoc *end, GDateTime *date, guint64 flags, LpfProviderGotLocsNotify callback, gpointer user_data); +gint lpf_provider_get_trips (LpfProvider *self, LpfLoc *start, LpfLoc *end, GDateTime *date, LpfProviderGetTripsFlags flags, LpfProviderGotLocsNotify callback, gpointer user_data); void lpf_provider_free_trips (LpfProvider *self, GSList *trips); diff --git a/libplanfahr/providers/hafas-bin6.c b/libplanfahr/providers/hafas-bin6.c index 595c9c7..3389983 100644 --- a/libplanfahr/providers/hafas-bin6.c +++ b/libplanfahr/providers/hafas-bin6.c @@ -643,7 +643,7 @@ lpf_provider_hafas_bin6_get_trips (LpfProvider *self, LpfLoc *start, LpfLoc *end, GDateTime *date, - guint64 flags, + LpfProviderGetTripsFlags flags, LpfProviderGotTripsNotify callback, gpointer user_data) { @@ -656,7 +656,7 @@ lpf_provider_hafas_bin6_get_trips (LpfProvider *self, /* allowed vehicle types */ const gchar *train_restriction = "11111111111111"; /* whether time is arrival or departure time */ - const gchar *by_departure = "1"; + const gchar *by_departure; char *start_id = NULL, *end_id = NULL; g_return_val_if_fail (start, -1); @@ -665,8 +665,6 @@ lpf_provider_hafas_bin6_get_trips (LpfProvider *self, g_return_val_if_fail (priv->session, -1); g_return_val_if_fail (date, -1); - g_return_val_if_fail (!flags, 0); - g_object_ref (start); g_object_ref (end); g_date_time_ref (date); @@ -684,9 +682,9 @@ lpf_provider_hafas_bin6_get_trips (LpfProvider *self, g_warning ("Details missing."); goto out; } + by_departure = (flags & LPF_PROVIDER_GET_TRIPS_ARRIVAL) ? "0" : "1"; uri = soup_uri_new (lpf_provider_hafas_bin6_trips_url(LPF_PROVIDER_HAFAS_BIN6(self))); - soup_uri_set_query_from_fields (uri, "start", "Suchen", "REQ0JourneyStopsS0ID", start_id, -- cgit v1.2.3