diff options
author | Guido Günther <agx@sigxcpu.org> | 2014-03-02 15:52:14 +0100 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2014-03-02 22:09:44 +0100 |
commit | b0ba2fa850d6f7278796cac9d13b2617f0e2c4d2 (patch) | |
tree | 69ad5ef5574f0f568698bf381c0e71a150214ed3 | |
parent | 9a4888952c10655b752a9e45a9907813c646d972 (diff) |
Make LpfProvider an interface
This allows us to have different base classes for different providers
-rw-r--r-- | src/lpf-provider.c | 102 | ||||
-rw-r--r-- | src/lpf-provider.h | 24 | ||||
-rw-r--r-- | src/providers/de-db.c | 87 | ||||
-rw-r--r-- | src/providers/de-db.h | 6 |
4 files changed, 105 insertions, 114 deletions
diff --git a/src/lpf-provider.c b/src/lpf-provider.c index 18a6789..9333303 100644 --- a/src/lpf-provider.c +++ b/src/lpf-provider.c @@ -20,14 +20,11 @@ #include "lpf-provider.h" -G_DEFINE_TYPE (LpfProvider, lpf_provider, G_TYPE_OBJECT) - -#define GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), LPF_TYPE_PROVIDER, LpfProviderPrivate)) +G_DEFINE_INTERFACE (LpfProvider, lpf_provider, G_TYPE_OBJECT) /** * SECTION:lpf-provider - * @short_description: Public transport information provider + * @short_description: Public transport information provider interface * @see_also: #LpfProvider * * A #LpfProvider represents a provider of public transport @@ -52,16 +49,6 @@ G_DEFINE_TYPE (LpfProvider, lpf_provider, G_TYPE_OBJECT) * received. In case of an error @trips is #NULL. */ -enum { - PROP_0, - PROP_NAME, - LAST_PROP -}; - -typedef struct _LpfProviderPrivate LpfProviderPrivate; -struct _LpfProviderPrivate { - char *name; -}; GQuark lpf_provider_error_quark (void) @@ -79,68 +66,25 @@ const char* lpf_provider_get_name (LpfProvider *self) { g_return_val_if_fail (LPF_IS_PROVIDER (self), NULL); - LpfProviderPrivate *priv = GET_PRIVATE (self); - - return priv->name; -} - -static void -set_property (GObject *object, guint prop_id, - const GValue *value, GParamSpec *pspec) -{ - LpfProviderPrivate *priv = GET_PRIVATE (object); - - switch (prop_id) { - case PROP_NAME: - /* construct only */ - priv->name = g_value_dup_string (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - - -static void -get_property (GObject *object, guint prop_id, - GValue *value, GParamSpec *pspec) -{ - LpfProviderPrivate *priv = GET_PRIVATE (object); - switch (prop_id) { - case PROP_NAME: - g_value_set_string (value, priv->name); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + return LPF_PROVIDER_GET_INTERFACE (self)->get_name (self); } -static void -finalize (GObject *object) -{ - LpfProviderPrivate *priv = GET_PRIVATE (object); - - g_free (priv->name); -} - /* invoked by LprManager to activate the provider */ void lpf_provider_activate (LpfProvider *self, GObject *obj) { - LpfProviderPrivate *priv = GET_PRIVATE (self); gchar *cache_dir = NULL; + LpfProviderInterface *iface = LPF_PROVIDER_GET_INTERFACE (self); g_return_if_fail (LPF_IS_PROVIDER (self)); - cache_dir = g_strdup_printf("%s/%s/%s/", g_get_user_cache_dir (), PACKAGE_NAME, priv->name); + cache_dir = g_strdup_printf("%s/%s/%s/", g_get_user_cache_dir (), PACKAGE_NAME, iface->get_name(self)); if (cache_dir) g_mkdir_with_parents (cache_dir, 0700); - LPF_PROVIDER_GET_CLASS (self)->activate (self, obj); + iface->activate (self, obj); g_free (cache_dir); } @@ -151,7 +95,7 @@ lpf_provider_deactivate (LpfProvider *self, GObject *obj) { g_return_if_fail (LPF_IS_PROVIDER (self)); - LPF_PROVIDER_GET_CLASS (self)->deactivate (self, obj); + LPF_PROVIDER_GET_INTERFACE (self)->deactivate (self, obj); } /** @@ -176,7 +120,7 @@ lpf_provider_get_locs (LpfProvider *self, const char* match, LpfProviderGotLocsN g_return_val_if_fail (match, -1); g_return_val_if_fail (callback, -1); - return LPF_PROVIDER_GET_CLASS (self)->get_locs (self, match, callback, user_data); + return LPF_PROVIDER_GET_INTERFACE (self)->get_locs (self, match, callback, user_data); } /** @@ -221,35 +165,21 @@ lpf_provider_get_trips (LpfProvider *self, LpfLoc *start, LpfLoc *end, GDateTime g_return_val_if_fail (date, -1); g_return_val_if_fail (callback, -1); - return LPF_PROVIDER_GET_CLASS (self)->get_trips (self, start, end, date, flags, callback, user_data); + return LPF_PROVIDER_GET_INTERFACE (self)->get_trips (self, start, end, date, flags, callback, user_data); } static void -lpf_provider_class_init (LpfProviderClass *klass) +lpf_provider_default_init (LpfProviderInterface *iface) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (klass, sizeof (LpfProviderPrivate)); - - object_class->get_property = get_property; - object_class->set_property = set_property; - object_class->finalize = finalize; - - g_object_class_install_property - (object_class, PROP_NAME, - g_param_spec_string (LPF_PROVIDER_PROP_NAME, - "Name", - "Provider Name", - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_interface_install_property + (iface, g_param_spec_string (LPF_PROVIDER_PROP_NAME, + "Name", + "Provider Name", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); } -static void -lpf_provider_init (LpfProvider *self G_GNUC_UNUSED) -{ -} - /** * lpf_provider_create: (skip) * diff --git a/src/lpf-provider.h b/src/lpf-provider.h index 4f6b07b..aa810f9 100644 --- a/src/lpf-provider.h +++ b/src/lpf-provider.h @@ -46,46 +46,38 @@ typedef enum { LPF_PROVIDER_ERROR_PARSE_FAILED, } LpfProviderError; -#define LPF_TYPE_PROVIDER lpf_provider_get_type() +#define LPF_TYPE_PROVIDER (lpf_provider_get_type()) #define LPF_PROVIDER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), LPF_TYPE_PROVIDER, LpfProvider)) -#define LPF_PROVIDER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), LPF_TYPE_PROVIDER, LpfProviderClass)) - #define LPF_IS_PROVIDER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LPF_TYPE_PROVIDER)) -#define LPF_IS_PROVIDER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), LPF_TYPE_PROVIDER)) - -#define LPF_PROVIDER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), LPF_TYPE_PROVIDER, LpfProviderClass)) +#define LPF_PROVIDER_GET_INTERFACE(obj) \ + (G_TYPE_INSTANCE_GET_INTERFACE ((obj), LPF_TYPE_PROVIDER, LpfProviderInterface)) #define LPF_PROVIDER_PROP_NAME "name" typedef void (*LpfProviderGotLocsNotify) (GSList *locs, gpointer user_data, GError *err); typedef void (*LpfProviderGotTripsNotify) (GSList *trips, gpointer user_data, GError *err); -typedef struct { - GObject parent; -} LpfProvider; +typedef struct _LpfProvider LpfProvider; typedef struct { - GObjectClass parent_class; + GTypeInterface parent; void (*activate) (LpfProvider *self, GObject *obj); void (*deactivate) (LpfProvider *self, GObject *obj); + const gchar* (*get_name) (LpfProvider *self); + gint (*get_locs) (LpfProvider *self, const gchar *match, LpfProviderGotLocsNotify callback, gpointer user_data); gint (*get_trips) (LpfProvider *self, LpfLoc *start, LpfLoc *end, GDateTime *date, guint64 flags, LpfProviderGotLocsNotify callback, gpointer user_data); -} LpfProviderClass; +} LpfProviderInterface; GType lpf_provider_get_type (void); -LpfProvider *lpf_provider_new (void); - typedef LpfProvider *(*LpfProviderCreateFunc) (void); LpfProvider *lpf_provider_create (void); diff --git a/src/providers/de-db.c b/src/providers/de-db.c index 8ac9bd9..72e8baa 100644 --- a/src/providers/de-db.c +++ b/src/providers/de-db.c @@ -31,6 +31,7 @@ n */ #include "lpf-priv.h" #include "lpf-loc.h" +#include "lpf-provider.h" #include "lpf-trip.h" #include "lpf-trip-part.h" #include "lpf-stop.h" @@ -42,6 +43,12 @@ n */ #define PROVIDER_NAME "de_db" +enum { + PROP_0, + PROP_NAME, + LAST_PROP +}; + /* transfers data between invocation and passed in callback */ typedef struct _LpfProviderGotItUserData { LpfProvider *self; @@ -49,7 +56,11 @@ typedef struct _LpfProviderGotItUserData { gpointer user_data; } LpfProviderGotItUserData; -G_DEFINE_TYPE (LpfProviderDeDb, lpf_provider_de_db, LPF_TYPE_PROVIDER) +static void lpf_provider_de_db_interface_init (LpfProviderInterface *iface); + +G_DEFINE_TYPE_WITH_CODE (LpfProviderDeDb, lpf_provider_de_db, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (LPF_TYPE_PROVIDER, lpf_provider_de_db_interface_init)); + #define GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LPF_TYPE_PROVIDER_DE_DB, LpfProviderDeDbPrivate)) @@ -65,15 +76,64 @@ lpf_provider_create (void) typedef struct _LpfProviderDeDbPrivate LpfProviderDeDbPrivate; struct _LpfProviderDeDbPrivate { + gchar *name; SoupSession *session; char *logdir; gboolean debug; }; + +static const char* +lpf_provider_de_db_get_name (LpfProvider *self) +{ + LpfProviderDeDbPrivate *priv = GET_PRIVATE (self); + + return priv->name; +} + + static void -lpf_provider_de_db_finalize (GObject *object) +set_property (GObject *object, guint prop_id, + const GValue *value, GParamSpec *pspec) { - G_OBJECT_CLASS (lpf_provider_de_db_parent_class)->finalize (object); + LpfProviderDeDbPrivate *priv = GET_PRIVATE (object); + + switch (prop_id) { + case PROP_NAME: + /* construct only */ + priv->name = g_value_dup_string (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + + +static void +get_property (GObject *object, guint prop_id, + GValue *value, GParamSpec *pspec) +{ + LpfProviderDeDbPrivate *priv = GET_PRIVATE (object); + + switch (prop_id) { + case PROP_NAME: + g_value_set_string (value, priv->name); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + + +static void +lpf_provider_de_db_finalize (GObject *self) +{ + LpfProviderDeDbPrivate *priv = GET_PRIVATE(self); + + g_free (priv->name); + G_OBJECT_CLASS (lpf_provider_de_db_parent_class)->finalize (self); } static void @@ -733,15 +793,26 @@ static void lpf_provider_de_db_class_init (LpfProviderDeDbClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - LpfProviderClass *plugin_class = LPF_PROVIDER_CLASS (klass); g_type_class_add_private (klass, sizeof (LpfProviderDeDbPrivate)); - plugin_class->activate = lpf_provider_de_db_activate; - plugin_class->deactivate = lpf_provider_de_db_deactivate; - plugin_class->get_locs = lpf_provider_de_db_get_locs; - plugin_class->get_trips = lpf_provider_de_db_get_trips; + object_class->get_property = get_property; + object_class->set_property = set_property; object_class->finalize = lpf_provider_de_db_finalize; + + g_object_class_override_property (object_class, + PROP_NAME, + "name"); +} + +static void +lpf_provider_de_db_interface_init (LpfProviderInterface *iface) +{ + iface->get_name = lpf_provider_de_db_get_name; + iface->activate = lpf_provider_de_db_activate; + iface->deactivate = lpf_provider_de_db_deactivate; + iface->get_locs = lpf_provider_de_db_get_locs; + iface->get_trips = lpf_provider_de_db_get_trips; } static void diff --git a/src/providers/de-db.h b/src/providers/de-db.h index a0278c9..0c06ba1 100644 --- a/src/providers/de-db.h +++ b/src/providers/de-db.h @@ -19,8 +19,6 @@ #ifndef _LPF_PROVIDER_DE_DB_H #define _LPF_PROVIDER_DE_DB_H -#include "lpf-provider.h" - G_BEGIN_DECLS #define LPF_TYPE_PROVIDER_DE_DB lpf_provider_de_db_get_type() #define LPF_PROVIDER_DE_DB(obj) \ @@ -35,11 +33,11 @@ G_BEGIN_DECLS (G_TYPE_INSTANCE_GET_CLASS ((obj), LPF_TYPE_PROVIDER_DE_DB, LpfProviderDe_DbClass)) typedef struct { - LpfProvider parent; + GObject parent; } LpfProviderDeDb; typedef struct { - LpfProviderClass parent_class; + GObjectClass parent_class; } LpfProviderDeDbClass; GType lpf_provider_de_db_get_type (void); |