diff options
author | Leesoo Ahn <yisooan@fedoraproject.org> | 2020-05-31 19:12:33 +0900 |
---|---|---|
committer | Leesoo Ahn <yisooan@fedoraproject.org> | 2020-06-07 17:37:07 +0900 |
commit | 92d8da46cd034bbad3cd95722d4b157a9317bcd2 (patch) | |
tree | a90ed3d5e07fcca1c0685f574514c0c19a2fc255 | |
parent | eeba8bffe0e52f319d81adb226abb8333244237c (diff) | |
download | libgfbgraph-92d8da46cd034bbad3cd95722d4b157a9317bcd2.tar.gz |
Clean up codebase
- change indent to 2 spaces
- refactor
-rw-r--r-- | gfbgraph/gfbgraph-album.c | 393 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-album.h | 38 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-authorizer.c | 30 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-authorizer.h | 40 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-common.c | 21 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-common.h | 3 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-connectable.c | 172 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-connectable.h | 46 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-goa-authorizer.c | 283 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-goa-authorizer.h | 28 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-node.c | 783 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-node.h | 74 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-photo.c | 773 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-photo.h | 48 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-simple-authorizer.c | 224 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-simple-authorizer.h | 28 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-user.c | 498 | ||||
-rw-r--r-- | gfbgraph/gfbgraph-user.h | 61 | ||||
-rw-r--r-- | gfbgraph/gfbgraph.h | 3 | ||||
-rw-r--r-- | tests/autoptr.c | 42 | ||||
-rw-r--r-- | tests/gtestutils.c | 384 |
21 files changed, 2087 insertions, 1885 deletions
diff --git a/gfbgraph/gfbgraph-album.c b/gfbgraph/gfbgraph-album.c index 5ae726d..8f8cec4 100644 --- a/gfbgraph/gfbgraph-album.c +++ b/gfbgraph/gfbgraph-album.c @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -35,209 +36,206 @@ #include "gfbgraph-connectable.h" enum { - PROP_O, - - PROP_NAME, - PROP_DESCRIPTION, - PROP_COVER_PHOTO, - PROP_COUNT + PROP_O, + PROP_NAME, + PROP_DESCRIPTION, + PROP_COVER_PHOTO, + PROP_COUNT }; struct _GFBGraphAlbumPrivate { - gchar *name; - gchar *description; - gchar *cover_photo; - guint count; + gchar *name; + gchar *description; + gchar *cover_photo; + guint count; }; -static void gfbgraph_album_init (GFBGraphAlbum *obj); -static void gfbgraph_album_class_init (GFBGraphAlbumClass *klass); -static void gfbgraph_album_finalize (GObject *obj); -static void gfbgraph_album_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void gfbgraph_album_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); - -static void gfbgraph_album_connectable_iface_init (GFBGraphConnectableInterface *iface); -GHashTable* gfbgraph_album_get_connection_post_params (GFBGraphConnectable *self, GType node_type); - -#define GFBGRAPH_ALBUM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), GFBGRAPH_TYPE_ALBUM, GFBGraphAlbumPrivate)) +#define GFBGRAPH_ALBUM_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE((o), GFBGRAPH_TYPE_ALBUM, GFBGraphAlbumPrivate)) static GFBGraphNodeClass *parent_class = NULL; +static void connectable_iface_init (GFBGraphConnectableInterface *iface); + G_DEFINE_TYPE_WITH_CODE (GFBGraphAlbum, gfbgraph_album, GFBGRAPH_TYPE_NODE, - G_IMPLEMENT_INTERFACE (GFBGRAPH_TYPE_CONNECTABLE, gfbgraph_album_connectable_iface_init)); + G_IMPLEMENT_INTERFACE (GFBGRAPH_TYPE_CONNECTABLE, connectable_iface_init)); static void -gfbgraph_album_init (GFBGraphAlbum *obj) +gfbgraph_album_finalize (GObject *obj) { - obj->priv = GFBGRAPH_ALBUM_GET_PRIVATE(obj); + GFBGraphAlbumPrivate *priv = GFBGRAPH_ALBUM_GET_PRIVATE (obj); + + if (priv->name) + g_free (priv->name); + if (priv->description) + g_free (priv->description); + if (priv->cover_photo) + g_free (priv->cover_photo); + + G_OBJECT_CLASS(parent_class)->finalize (obj); } static void -gfbgraph_album_class_init (GFBGraphAlbumClass *klass) +gfbgraph_album_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) { - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - parent_class = g_type_class_peek_parent (klass); - - gobject_class->finalize = gfbgraph_album_finalize; - gobject_class->set_property = gfbgraph_album_set_property; - gobject_class->get_property = gfbgraph_album_get_property; - - g_type_class_add_private (gobject_class, sizeof(GFBGraphAlbumPrivate)); - - /** - * GFBGraphAlbum:name: - * - * The album name. - **/ - g_object_class_install_property (gobject_class, - PROP_NAME, - g_param_spec_string ("name", - "The title", "The name of the album", - "", - G_PARAM_READABLE | G_PARAM_WRITABLE)); - - /** - * GFBGraphAlbum:description: - * - * The album description given by the owner. - **/ - g_object_class_install_property (gobject_class, - PROP_DESCRIPTION, - g_param_spec_string ("description", - "The description", "The description of the album", - "", - G_PARAM_READABLE | G_PARAM_WRITABLE)); - - /** - * GFBGraphAlbum:cover_photo: - * - * The node ID for the album cover photo. It's an ID for a #GFBGraphPhoto node. - **/ - g_object_class_install_property (gobject_class, - PROP_COVER_PHOTO, - g_param_spec_string ("cover_photo", - "Cover photo", "The ID for the cover photo of the album", - "", - G_PARAM_READABLE | G_PARAM_WRITABLE)); - - /** - * GFBGraphAlbum:count: - * - * The number of photos in the album. - **/ - g_object_class_install_property (gobject_class, - PROP_COUNT, - g_param_spec_uint ("count", - "Number of photos", "The number of photos in the album", - 0, G_MAXUINT, 0, - G_PARAM_READABLE | G_PARAM_WRITABLE)); - + GFBGraphAlbumPrivate *priv = GFBGRAPH_ALBUM_GET_PRIVATE (object); + + switch (prop_id) { + case PROP_NAME: + if (priv->name) + g_free (priv->name); + priv->name = g_strdup (g_value_get_string (value)); + break; + case PROP_DESCRIPTION: + if (priv->description) + g_free (priv->description); + priv->description = g_strdup (g_value_get_string (value)); + break; + case PROP_COVER_PHOTO: + if (priv->cover_photo) + g_free (priv->cover_photo); + priv->cover_photo = g_strdup (g_value_get_string (value)); + break; + case PROP_COUNT: + priv->count = g_value_get_uint (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -gfbgraph_album_finalize (GObject *obj) +gfbgraph_album_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) { - GFBGraphAlbumPrivate *priv; - - priv = GFBGRAPH_ALBUM_GET_PRIVATE (obj); - - if (priv->name) - g_free (priv->name); - if (priv->description) - g_free (priv->description); - if (priv->cover_photo) - g_free (priv->cover_photo); - - G_OBJECT_CLASS(parent_class)->finalize (obj); + GFBGraphAlbumPrivate *priv = GFBGRAPH_ALBUM_GET_PRIVATE (object); + + switch (prop_id) { + case PROP_NAME: + g_value_set_string (value, priv->name); + break; + case PROP_DESCRIPTION: + g_value_set_string (value, priv->description); + break; + case PROP_COVER_PHOTO: + g_value_set_string (value, priv->cover_photo); + break; + case PROP_COUNT: + g_value_set_uint (value, priv->count); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -gfbgraph_album_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +gfbgraph_album_class_init (GFBGraphAlbumClass *klass) { - GFBGraphAlbumPrivate *priv; - - priv = GFBGRAPH_ALBUM_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_NAME: - if (priv->name) - g_free (priv->name); - priv->name = g_strdup (g_value_get_string (value)); - break; - case PROP_DESCRIPTION: - if (priv->description) - g_free (priv->description); - priv->description = g_strdup (g_value_get_string (value)); - break; - case PROP_COVER_PHOTO: - if (priv->cover_photo) - g_free (priv->cover_photo); - priv->cover_photo = g_strdup (g_value_get_string (value)); - break; - case PROP_COUNT: - priv->count = g_value_get_uint (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + gobject_class->finalize = gfbgraph_album_finalize; + gobject_class->set_property = gfbgraph_album_set_property; + gobject_class->get_property = gfbgraph_album_get_property; + + g_type_class_add_private (gobject_class, sizeof(GFBGraphAlbumPrivate)); + + /** + * GFBGraphAlbum:name: + * + * The album name. + **/ + g_object_class_install_property (gobject_class, + PROP_NAME, + g_param_spec_string ("name", + "The title", + "The name of the album", + "", + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + /** + * GFBGraphAlbum:description: + * + * The album description given by the owner. + **/ + g_object_class_install_property (gobject_class, + PROP_DESCRIPTION, + g_param_spec_string ("description", + "The description", + "The description of the album", + "", + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + /** + * GFBGraphAlbum:cover_photo: + * + * The node ID for the album cover photo. It's an ID for a #GFBGraphPhoto node. + **/ + g_object_class_install_property (gobject_class, + PROP_COVER_PHOTO, + g_param_spec_string ("cover_photo", + "Cover photo", + "The ID for the cover photo of the album", + "", + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + /** + * GFBGraphAlbum:count: + * + * The number of photos in the album. + **/ + g_object_class_install_property (gobject_class, + PROP_COUNT, + g_param_spec_uint ("count", + "Number of photos", + "The number of photos in the album", + 0, G_MAXUINT, 0, + G_PARAM_READABLE | G_PARAM_WRITABLE)); + } static void -gfbgraph_album_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +gfbgraph_album_init (GFBGraphAlbum *obj) { - GFBGraphAlbumPrivate *priv; - - priv = GFBGRAPH_ALBUM_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_NAME: - g_value_set_string (value, priv->name); - break; - case PROP_DESCRIPTION: - g_value_set_string (value, priv->description); - break; - case PROP_COVER_PHOTO: - g_value_set_string (value, priv->cover_photo); - break; - case PROP_COUNT: - g_value_set_uint (value, priv->count); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + obj->priv = GFBGRAPH_ALBUM_GET_PRIVATE(obj); } -static void -gfbgraph_album_connectable_iface_init (GFBGraphConnectableInterface *iface) +static GHashTable * +get_connection_post_params (GFBGraphConnectable *self, + GType node_type) { - GHashTable *connections; + GHashTable *params; + GFBGraphAlbumPrivate *priv = GFBGRAPH_ALBUM_GET_PRIVATE (self); - connections = g_hash_table_new (g_str_hash, g_str_equal); - g_hash_table_insert (connections, (gpointer) g_type_name (GFBGRAPH_TYPE_USER), (gpointer) "albums"); + params = g_hash_table_new (g_str_hash, g_str_equal); + g_hash_table_insert (params, "name", priv->name); + if (priv->description != NULL) + g_hash_table_insert (params, "message", priv->description); + /* TODO: Incorpate the "privacy" param */ - iface->connections = connections; - iface->get_connection_post_params = gfbgraph_album_get_connection_post_params; - iface->parse_connected_data = gfbgraph_connectable_default_parse_connected_data; + return params; } -GHashTable* -gfbgraph_album_get_connection_post_params (GFBGraphConnectable *self, GType node_type) +static void +connectable_iface_init (GFBGraphConnectableInterface *iface) { - GHashTable *params; - GFBGraphAlbumPrivate *priv; - - priv = GFBGRAPH_ALBUM_GET_PRIVATE (self); + GHashTable *connections = g_hash_table_new (g_str_hash, g_str_equal); - params = g_hash_table_new (g_str_hash, g_str_equal); - g_hash_table_insert (params, "name", priv->name); - if (priv->description != NULL) - g_hash_table_insert (params, "message", priv->description); - /* TODO: Incorpate the "privacy" param */ + g_hash_table_insert (connections, + (gpointer) g_type_name (GFBGRAPH_TYPE_USER), + (gpointer) "albums"); - return params; + iface->connections = connections; + iface->get_connection_post_params = get_connection_post_params; + iface->parse_connected_data = gfbgraph_connectable_default_parse_connected_data; } /** @@ -247,10 +245,10 @@ gfbgraph_album_get_connection_post_params (GFBGraphConnectable *self, GType node * * Returns: (transfer full): a new #GFBGraphAlbum; unref with g_object_unref() **/ -GFBGraphAlbum* +GFBGraphAlbum * gfbgraph_album_new (void) { - return GFBGRAPH_ALBUM (g_object_new(GFBGRAPH_TYPE_ALBUM, NULL)); + return GFBGRAPH_ALBUM (g_object_new (GFBGRAPH_TYPE_ALBUM, NULL)); } /** @@ -263,10 +261,15 @@ gfbgraph_album_new (void) * * Returns: (transfer full): a new #GFBGraphAlbum; unref with g_object_unref() **/ -GFBGraphAlbum* -gfbgraph_album_new_from_id (GFBGraphAuthorizer *authorizer, const gchar *id, GError **error) +GFBGraphAlbum * +gfbgraph_album_new_from_id (GFBGraphAuthorizer *authorizer, + const gchar *id, + GError **error) { - return GFBGRAPH_ALBUM (gfbgraph_node_new_from_id (authorizer, id, GFBGRAPH_TYPE_ALBUM, error)); + return GFBGRAPH_ALBUM (gfbgraph_node_new_from_id (authorizer, + id, + GFBGRAPH_TYPE_ALBUM, + error)); } /** @@ -275,12 +278,12 @@ gfbgraph_album_new_from_id (GFBGraphAuthorizer *authorizer, const gchar *id, GEr * * Returns: (transfer none): the @album name, or %NULL. **/ -const gchar* +const gchar * gfbgraph_album_get_name (GFBGraphAlbum *album) { - g_return_val_if_fail (GFBGRAPH_IS_ALBUM (album), NULL); + g_return_val_if_fail (GFBGRAPH_IS_ALBUM (album), NULL); - return album->priv->name; + return album->priv->name; } /** @@ -289,12 +292,12 @@ gfbgraph_album_get_name (GFBGraphAlbum *album) * * Returns: (transfer none): the @album description, or %NULL. **/ -const gchar* +const gchar * gfbgraph_album_get_description (GFBGraphAlbum *album) { - g_return_val_if_fail (GFBGRAPH_IS_ALBUM (album), NULL); + g_return_val_if_fail (GFBGRAPH_IS_ALBUM (album), NULL); - return album->priv->description; + return album->priv->description; } /** @@ -303,12 +306,12 @@ gfbgraph_album_get_description (GFBGraphAlbum *album) * * Returns: (transfer none): the cover photo node ID or %NULL. **/ -const gchar* +const gchar * gfbgraph_album_get_cover_photo_id (GFBGraphAlbum *album) { - g_return_val_if_fail (GFBGRAPH_IS_ALBUM (album), NULL); + g_return_val_if_fail (GFBGRAPH_IS_ALBUM (album), NULL); - return album->priv->cover_photo; + return album->priv->cover_photo; } /** @@ -320,9 +323,9 @@ gfbgraph_album_get_cover_photo_id (GFBGraphAlbum *album) guint gfbgraph_album_get_count (GFBGraphAlbum *album) { - g_return_val_if_fail (GFBGRAPH_IS_ALBUM (album), -1); + g_return_val_if_fail (GFBGRAPH_IS_ALBUM (album), -1); - return album->priv->count; + return album->priv->count; } /** @@ -333,14 +336,15 @@ gfbgraph_album_get_count (GFBGraphAlbum *album) * Sets the name for the @album. **/ void -gfbgraph_album_set_name (GFBGraphAlbum *album, const gchar *name) +gfbgraph_album_set_name (GFBGraphAlbum *album, + const gchar *name) { - g_return_if_fail (GFBGRAPH_IS_ALBUM (album)); - g_return_if_fail (name != NULL); + g_return_if_fail (GFBGRAPH_IS_ALBUM (album)); + g_return_if_fail (name != NULL); - g_object_set (G_OBJECT (album), - "name", name, - NULL); + g_object_set (G_OBJECT (album), + "name", name, + NULL); } /** @@ -351,12 +355,13 @@ gfbgraph_album_set_name (GFBGraphAlbum *album, const gchar *name) * Sets the description for the @album. **/ void -gfbgraph_album_set_description (GFBGraphAlbum *album, const gchar *description) +gfbgraph_album_set_description (GFBGraphAlbum *album, + const gchar *description) { - g_return_if_fail (GFBGRAPH_IS_ALBUM (album)); - g_return_if_fail (description != NULL); + g_return_if_fail (GFBGRAPH_IS_ALBUM (album)); + g_return_if_fail (description != NULL); - g_object_set (G_OBJECT (album), - "description", description, - NULL); + g_object_set (G_OBJECT (album), + "description", description, + NULL); } diff --git a/gfbgraph/gfbgraph-album.h b/gfbgraph/gfbgraph-album.h index e0528fb..b752e5b 100644 --- a/gfbgraph/gfbgraph-album.h +++ b/gfbgraph/gfbgraph-album.h @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,12 +26,17 @@ G_BEGIN_DECLS -#define GFBGRAPH_TYPE_ALBUM (gfbgraph_album_get_type()) -#define GFBGRAPH_ALBUM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GFBGRAPH_TYPE_ALBUM,GFBGraphAlbum)) -#define GFBGRAPH_ALBUM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GFBGRAPH_TYPE_ALBUM,GFBGraphAlbumClass)) -#define GFBGRAPH_IS_ALBUM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GFBGRAPH_TYPE_ALBUM)) -#define GFBGRAPH_IS_ALBUM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GFBGRAPH_TYPE_ALBUM)) -#define GFBGRAPH_ALBUM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GFBGRAPH_TYPE_ALBUM,GFBGraphAlbumClass)) +#define GFBGRAPH_TYPE_ALBUM (gfbgraph_album_get_type()) +#define GFBGRAPH_ALBUM(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), GFBGRAPH_TYPE_ALBUM,GFBGraphAlbum)) +#define GFBGRAPH_ALBUM_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), GFBGRAPH_TYPE_ALBUM,GFBGraphAlbumClass)) +#define GFBGRAPH_IS_ALBUM(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), GFBGRAPH_TYPE_ALBUM)) +#define GFBGRAPH_IS_ALBUM_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), GFBGRAPH_TYPE_ALBUM)) +#define GFBGRAPH_ALBUM_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), GFBGRAPH_TYPE_ALBUM,GFBGraphAlbumClass)) typedef struct _GFBGraphAlbum GFBGraphAlbum; typedef struct _GFBGraphAlbumClass GFBGraphAlbumClass; @@ -39,27 +45,31 @@ typedef struct _GFBGraphAlbumPrivate GFBGraphAlbumPrivate; G_DEFINE_AUTOPTR_CLEANUP_FUNC (GFBGraphAlbum, g_object_unref) struct _GFBGraphAlbum { - GFBGraphNode parent; + GFBGraphNode parent; - /*< private >*/ - GFBGraphAlbumPrivate *priv; + /*< private >*/ + GFBGraphAlbumPrivate *priv; }; struct _GFBGraphAlbumClass { - GFBGraphNodeClass parent_class; + GFBGraphNodeClass parent_class; }; GType gfbgraph_album_get_type (void) G_GNUC_CONST; GFBGraphAlbum* gfbgraph_album_new (void); -GFBGraphAlbum* gfbgraph_album_new_from_id (GFBGraphAuthorizer *authorizer, const gchar *id, GError **error); +GFBGraphAlbum* gfbgraph_album_new_from_id (GFBGraphAuthorizer *authorizer, + const gchar *id, + GError **error); const gchar* gfbgraph_album_get_name (GFBGraphAlbum *album); const gchar* gfbgraph_album_get_description (GFBGraphAlbum *album); const gchar* gfbgraph_album_get_cover_photo_id (GFBGraphAlbum *album); guint gfbgraph_album_get_count (GFBGraphAlbum *album); -void gfbgraph_album_set_name (GFBGraphAlbum *album, const gchar *name); -void gfbgraph_album_set_description (GFBGraphAlbum *album, const gchar *description); +void gfbgraph_album_set_name (GFBGraphAlbum *album, + const gchar *name); +void gfbgraph_album_set_description (GFBGraphAlbum *album, + const gchar *description); G_END_DECLS diff --git a/gfbgraph/gfbgraph-authorizer.c b/gfbgraph/gfbgraph-authorizer.c index 95cf06e..2ce2341 100644 --- a/gfbgraph/gfbgraph-authorizer.c +++ b/gfbgraph/gfbgraph-authorizer.c @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -46,10 +47,12 @@ gfbgraph_authorizer_default_init (GFBGraphAuthorizerInterface *iface) * This method modifies @call in place and is thread safe. */ void -gfbgraph_authorizer_process_call (GFBGraphAuthorizer *iface, RestProxyCall *call) +gfbgraph_authorizer_process_call (GFBGraphAuthorizer *iface, + RestProxyCall *call) { - g_return_if_fail (GFBGRAPH_IS_AUTHORIZER (iface)); - GFBGRAPH_AUTHORIZER_GET_IFACE (iface)->process_call (iface, call); + g_return_if_fail (GFBGRAPH_IS_AUTHORIZER (iface)); + + GFBGRAPH_AUTHORIZER_GET_IFACE (iface)->process_call (iface, call); } /** @@ -63,10 +66,12 @@ gfbgraph_authorizer_process_call (GFBGraphAuthorizer *iface, RestProxyCall *call * This method modifies @message in place and is thread safe. */ void -gfbgraph_authorizer_process_message (GFBGraphAuthorizer *iface, SoupMessage *message) +gfbgraph_authorizer_process_message (GFBGraphAuthorizer *iface, + SoupMessage *message) { - g_return_if_fail (GFBGRAPH_IS_AUTHORIZER (iface)); - GFBGRAPH_AUTHORIZER_GET_IFACE (iface)->process_message (iface, message); + g_return_if_fail (GFBGRAPH_IS_AUTHORIZER (iface)); + + GFBGRAPH_AUTHORIZER_GET_IFACE (iface)->process_message (iface, message); } /** @@ -83,8 +88,13 @@ gfbgraph_authorizer_process_message (GFBGraphAuthorizer *iface, SoupMessage *mes * Returns: %TRUE if the authorizer now has a valid token. */ gboolean -gfbgraph_authorizer_refresh_authorization (GFBGraphAuthorizer *iface, GCancellable *cancellable, GError **error) +gfbgraph_authorizer_refresh_authorization (GFBGraphAuthorizer *iface, + GCancellable *cancellable, + GError **error) { - g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (iface), FALSE); - return GFBGRAPH_AUTHORIZER_GET_IFACE (iface)->refresh_authorization (iface, cancellable, error); + g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (iface), FALSE); + + return GFBGRAPH_AUTHORIZER_GET_IFACE (iface)->refresh_authorization (iface, + cancellable, + error); } diff --git a/gfbgraph/gfbgraph-authorizer.h b/gfbgraph/gfbgraph-authorizer.h index 6100cbd..bc57d76 100644 --- a/gfbgraph/gfbgraph-authorizer.h +++ b/gfbgraph/gfbgraph-authorizer.h @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -27,10 +28,13 @@ G_BEGIN_DECLS -#define GFBGRAPH_TYPE_AUTHORIZER (gfbgraph_authorizer_get_type ()) -#define GFBGRAPH_AUTHORIZER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GFBGRAPH_TYPE_AUTHORIZER, GFBGraphAuthorizer)) -#define GFBGRAPH_IS_AUTHORIZER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GFBGRAPH_TYPE_AUTHORIZER)) -#define GFBGRAPH_AUTHORIZER_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), GFBGRAPH_TYPE_AUTHORIZER, GFBGraphAuthorizerInterface)) +#define GFBGRAPH_TYPE_AUTHORIZER (gfbgraph_authorizer_get_type ()) +#define GFBGRAPH_AUTHORIZER(o) \ + (G_TYPE_CHECK_INSTANCE_CAST ((o), GFBGRAPH_TYPE_AUTHORIZER, GFBGraphAuthorizer)) +#define GFBGRAPH_IS_AUTHORIZER(o) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((o), GFBGRAPH_TYPE_AUTHORIZER)) +#define GFBGRAPH_AUTHORIZER_GET_IFACE(o) \ + (G_TYPE_INSTANCE_GET_INTERFACE ((o), GFBGRAPH_TYPE_AUTHORIZER, GFBGraphAuthorizerInterface)) typedef struct _GFBGraphAuthorizer GFBGraphAuthorizer; typedef struct _GFBGraphAuthorizerInterface GFBGraphAuthorizerInterface; @@ -46,26 +50,26 @@ typedef struct _GFBGraphAuthorizerInterface GFBGraphAuthorizerInterface; * Interface structure for #GFBGraphAuthorizer. All methos should be thread safe. **/ struct _GFBGraphAuthorizerInterface { - GTypeInterface parent; + GTypeInterface parent; - void (*process_call) (GFBGraphAuthorizer *iface, - RestProxyCall *call); - void (*process_message) (GFBGraphAuthorizer *iface, - SoupMessage *message); - gboolean (*refresh_authorization) (GFBGraphAuthorizer *iface, - GCancellable *cancellable, - GError **error); + void (*process_call) (GFBGraphAuthorizer *iface, + RestProxyCall *call); + void (*process_message) (GFBGraphAuthorizer *iface, + SoupMessage *message); + gboolean (*refresh_authorization) (GFBGraphAuthorizer *iface, + GCancellable *cancellable, + GError **error); }; GType gfbgraph_authorizer_get_type (void) G_GNUC_CONST; void gfbgraph_authorizer_process_call (GFBGraphAuthorizer *iface, - RestProxyCall *call); + RestProxyCall *call); void gfbgraph_authorizer_process_message (GFBGraphAuthorizer *iface, - SoupMessage *message); -gboolean gfbgraph_authorizer_refresh_authorization (GFBGraphAuthorizer *iface, - GCancellable *cancellable, - GError **error); + SoupMessage *message); +gboolean gfbgraph_authorizer_refresh_authorization (GFBGraphAuthorizer *iface, + GCancellable *cancellable, + GError **error); G_END_DECLS diff --git a/gfbgraph/gfbgraph-common.c b/gfbgraph/gfbgraph-common.c index 137f880..c60e635 100644 --- a/gfbgraph/gfbgraph-common.c +++ b/gfbgraph/gfbgraph-common.c @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013-2015 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -32,20 +33,20 @@ * * Returns: (transfer full): a new #RestProxyCall or %NULL in case of error. **/ -RestProxyCall* +RestProxyCall * gfbgraph_new_rest_call (GFBGraphAuthorizer *authorizer) { - RestProxy *proxy; - RestProxyCall *rest_call; + RestProxy *proxy; + RestProxyCall *rest_call; - g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), NULL); + g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), NULL); - proxy = rest_proxy_new (FACEBOOK_ENDPOINT, FALSE); - rest_call = rest_proxy_new_call (proxy); + proxy = rest_proxy_new (FACEBOOK_ENDPOINT, FALSE); + rest_call = rest_proxy_new_call (proxy); - gfbgraph_authorizer_process_call (authorizer, rest_call); + gfbgraph_authorizer_process_call (authorizer, rest_call); - g_object_unref (proxy); + g_object_unref (proxy); - return rest_call; + return rest_call; } diff --git a/gfbgraph/gfbgraph-common.h b/gfbgraph/gfbgraph-common.h index b2bad18..4af3e85 100644 --- a/gfbgraph/gfbgraph-common.h +++ b/gfbgraph/gfbgraph-common.h @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public diff --git a/gfbgraph/gfbgraph-connectable.c b/gfbgraph/gfbgraph-connectable.c index 82b0765..b24be50 100644 --- a/gfbgraph/gfbgraph-connectable.c +++ b/gfbgraph/gfbgraph-connectable.c @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -39,27 +40,27 @@ G_DEFINE_INTERFACE (GFBGraphConnectable, gfbgraph_connectable, GFBGRAPH_TYPE_NOD static void gfbgraph_connectable_default_init (GFBGraphConnectableInterface *iface) { - iface->connections = NULL; + iface->connections = NULL; - iface->get_connection_post_params = NULL; - iface->parse_connected_data = NULL; + iface->get_connection_post_params = NULL; + iface->parse_connected_data = NULL; } -static GHashTable* +static GHashTable * get_connections (GFBGraphConnectableInterface *iface) { - /* The GHashTable contains the connections for a node. - * The key must be the g_type_name() of a GFBGRAPH_TYPE_NODE, and the value - * must be the function name to call in order to retrieve the nodes connected - * to the GFBGraphNode indicated by GFBGRAPH_TYPE_NODE. - */ - GHashTable *connections; - - connections = iface->connections; - /* If no connections... Why you implement this iface? */ - g_assert (g_hash_table_size (connections) > 0); - - return connections; + /* The GHashTable contains the connections for a node. + * The key must be the g_type_name() of a GFBGRAPH_TYPE_NODE, and the value + * must be the function name to call in order to retrieve the nodes connected + * to the GFBGraphNode indicated by GFBGRAPH_TYPE_NODE. + */ + GHashTable *connections; + + connections = iface->connections; + /* If no connections... Why you implement this iface? */ + g_assert (g_hash_table_size (connections) > 0); + + return connections; } /** @@ -72,19 +73,20 @@ get_connections (GFBGraphConnectableInterface *iface) * * Returns: (transfer full): A string based #GHashTable with the params and his values or %NULL. **/ -GHashTable* -gfbgraph_connectable_get_connection_post_params (GFBGraphConnectable *self, GType node_type) +GHashTable * +gfbgraph_connectable_get_connection_post_params (GFBGraphConnectable *self, + GType node_type) { - GFBGraphConnectableInterface *iface; + GFBGraphConnectableInterface *iface; - g_return_val_if_fail (GFBGRAPH_IS_CONNECTABLE (self), NULL); - g_return_val_if_fail (g_type_is_a (node_type, GFBGRAPH_TYPE_NODE), NULL); - g_return_val_if_fail (gfbgraph_connectable_is_connectable_to (self, node_type), NULL); + g_return_val_if_fail (GFBGRAPH_IS_CONNECTABLE (self), NULL); + g_return_val_if_fail (g_type_is_a (node_type, GFBGRAPH_TYPE_NODE), NULL); + g_return_val_if_fail (gfbgraph_connectable_is_connectable_to (self, node_type), NULL); - iface = GFBGRAPH_CONNECTABLE_GET_IFACE (self); - g_assert (iface->get_connection_post_params != NULL); + iface = GFBGRAPH_CONNECTABLE_GET_IFACE (self); + g_assert (iface->get_connection_post_params != NULL); - return iface->get_connection_post_params (self, node_type); + return iface->get_connection_post_params (self, node_type); } /** @@ -98,17 +100,19 @@ gfbgraph_connectable_get_connection_post_params (GFBGraphConnectable *self, GTyp * * Returns: (element-type GFBGraphNode) (transfer full): a newly-allocated #GList of #GFBGraphNode created from the @payload or %NULL. **/ -GList* -gfbgraph_connectable_parse_connected_data (GFBGraphConnectable *self, const gchar *payload, GError **error) +GList * +gfbgraph_connectable_parse_connected_data (GFBGraphConnectable *self, + const gchar *payload, + GError **error) { - GFBGraphConnectableInterface *iface; + GFBGraphConnectableInterface *iface; - g_return_val_if_fail (GFBGRAPH_IS_CONNECTABLE (self), NULL); + g_return_val_if_fail (GFBGRAPH_IS_CONNECTABLE (self), NULL); - iface = GFBGRAPH_CONNECTABLE_GET_IFACE (self); - g_assert (iface->parse_connected_data != NULL); + iface = GFBGRAPH_CONNECTABLE_GET_IFACE (self); + g_assert (iface->parse_connected_data != NULL); - return iface->parse_connected_data (self, payload, error); + return iface->parse_connected_data (self, payload, error); } @@ -124,18 +128,19 @@ gfbgraph_connectable_parse_connected_data (GFBGraphConnectable *self, const gcha * %FALSE otherwise. **/ gboolean -gfbgraph_connectable_is_connectable_to (GFBGraphConnectable *self, GType node_type) +gfbgraph_connectable_is_connectable_to (GFBGraphConnectable *self, + GType node_type) { - GFBGraphConnectableInterface *iface; - GHashTable *connections; + GFBGraphConnectableInterface *iface; + GHashTable *connections; - g_return_val_if_fail (GFBGRAPH_IS_CONNECTABLE (self), FALSE); - g_return_val_if_fail (g_type_is_a (node_type, GFBGRAPH_TYPE_NODE), FALSE); + g_return_val_if_fail (GFBGRAPH_IS_CONNECTABLE (self), FALSE); + g_return_val_if_fail (g_type_is_a (node_type, GFBGRAPH_TYPE_NODE), FALSE); - iface = GFBGRAPH_CONNECTABLE_GET_IFACE (self); + iface = GFBGRAPH_CONNECTABLE_GET_IFACE (self); + connections = get_connections (iface); - connections = get_connections (iface); - return g_hash_table_contains (connections, g_type_name (node_type)); + return g_hash_table_contains (connections, g_type_name (node_type)); } /** @@ -148,20 +153,21 @@ gfbgraph_connectable_is_connectable_to (GFBGraphConnectable *self, GType node_ty * * Returns: (transfer none): a const #gchar with the function path or %NULL. **/ -const gchar* -gfbgraph_connectable_get_connection_path (GFBGraphConnectable *self, GType node_type) +const gchar * +gfbgraph_connectable_get_connection_path (GFBGraphConnectable *self, + GType node_type) { - GFBGraphConnectableInterface *iface; - GHashTable *connections; + GFBGraphConnectableInterface *iface; + GHashTable *connections; - g_return_val_if_fail (GFBGRAPH_IS_CONNECTABLE (self), NULL); - g_return_val_if_fail (g_type_is_a (node_type, GFBGRAPH_TYPE_NODE), NULL); - g_return_val_if_fail (gfbgraph_connectable_is_connectable_to (self, node_type), NULL); + g_return_val_if_fail (GFBGRAPH_IS_CONNECTABLE (self), NULL); + g_return_val_if_fail (g_type_is_a (node_type, GFBGRAPH_TYPE_NODE), NULL); + g_return_val_if_fail (gfbgraph_connectable_is_connectable_to (self, node_type), NULL); - iface = GFBGRAPH_CONNECTABLE_GET_IFACE (self); + iface = GFBGRAPH_CONNECTABLE_GET_IFACE (self); + connections = get_connections (iface); - connections = get_connections (iface); - return (const gchar *) g_hash_table_lookup (connections, g_type_name (node_type)); + return (const gchar *) g_hash_table_lookup (connections, g_type_name (node_type)); } /** @@ -179,36 +185,38 @@ gfbgraph_connectable_get_connection_path (GFBGraphConnectable *self, GType node_ * * Returns: (element-type GFBGraphNode) (transfer full): a newly-allocated #GList of #GFBGraphNode with the same #GType as @self. **/ -GList* -gfbgraph_connectable_default_parse_connected_data (GFBGraphConnectable *self, const gchar *payload, GError **error) +GList * +gfbgraph_connectable_default_parse_connected_data (GFBGraphConnectable *self, + const gchar *payload, + GError **error) { - GList *nodes_list = NULL; - JsonParser *jparser; - GType node_type; - - node_type = G_OBJECT_TYPE (self); - - jparser = json_parser_new (); - if (json_parser_load_from_data (jparser, payload, -1, error)) { - JsonNode *root_jnode; - JsonObject *main_jobject; - JsonArray *nodes_jarray; - int i = 0; - - root_jnode = json_parser_get_root (jparser); - main_jobject = json_node_get_object (root_jnode); - nodes_jarray = json_object_get_array_member (main_jobject, "data"); - for (i = 0; i < json_array_get_length (nodes_jarray); i++) { - JsonNode *jnode; - GFBGraphNode *node; - - jnode = json_array_get_element (nodes_jarray, i); - node = GFBGRAPH_NODE (json_gobject_deserialize (node_type, jnode)); - nodes_list = g_list_append (nodes_list, node); - } - } - - g_clear_object (&jparser); - - return nodes_list; + GList *nodes_list = NULL; + JsonParser *jparser; + GType node_type; + + node_type = G_OBJECT_TYPE (self); + + jparser = json_parser_new (); + if (json_parser_load_from_data (jparser, payload, -1, error)) { + JsonNode *root_jnode; + JsonObject *main_jobject; + JsonArray *nodes_jarray; + int i = 0; + + root_jnode = json_parser_get_root (jparser); + main_jobject = json_node_get_object (root_jnode); + nodes_jarray = json_object_get_array_member (main_jobject, "data"); + for (i = 0; i < json_array_get_length (nodes_jarray); i++) { + JsonNode *jnode; + GFBGraphNode *node; + + jnode = json_array_get_element (nodes_jarray, i); + node = GFBGRAPH_NODE (json_gobject_deserialize (node_type, jnode)); + nodes_list = g_list_append (nodes_list, node); + } + } + + g_clear_object (&jparser); + + return nodes_list; } diff --git a/gfbgraph/gfbgraph-connectable.h b/gfbgraph/gfbgraph-connectable.h index 8b8a601..94cc27c 100644 --- a/gfbgraph/gfbgraph-connectable.h +++ b/gfbgraph/gfbgraph-connectable.h @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -24,32 +25,45 @@ G_BEGIN_DECLS -#define GFBGRAPH_TYPE_CONNECTABLE (gfbgraph_connectable_get_type ()) -#define GFBGRAPH_CONNECTABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GFBGRAPH_TYPE_CONNECTABLE, GFBGraphConnectable)) -#define GFBGRAPH_CONNECTABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GFBGRAPH_TYPE_CONNECTABLE, GFBGraphConnectableInterface)) -#define GFBGRAPH_IS_CONNECTABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GFBGRAPH_TYPE_CONNECTABLE)) -#define GFBGRAPH_CONNECTABLE_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), GFBGRAPH_TYPE_CONNECTABLE, GFBGraphConnectableInterface)) +#define GFBGRAPH_TYPE_CONNECTABLE (gfbgraph_connectable_get_type ()) +#define GFBGRAPH_CONNECTABLE(o) \ + (G_TYPE_CHECK_INSTANCE_CAST ((o), GFBGRAPH_TYPE_CONNECTABLE, GFBGraphConnectable)) +#define GFBGRAPH_CONNECTABLE_CLASS(k) \ + (G_TYPE_CHECK_CLASS_CAST((k), GFBGRAPH_TYPE_CONNECTABLE, GFBGraphConnectableInterface)) +#define GFBGRAPH_IS_CONNECTABLE(o) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((o), GFBGRAPH_TYPE_CONNECTABLE)) +#define GFBGRAPH_CONNECTABLE_GET_IFACE(o) \ + (G_TYPE_INSTANCE_GET_INTERFACE ((o), GFBGRAPH_TYPE_CONNECTABLE, GFBGraphConnectableInterface)) typedef struct _GFBGraphConnectable GFBGraphConnectable; typedef struct _GFBGraphConnectableInterface GFBGraphConnectableInterface; struct _GFBGraphConnectableInterface { - GTypeInterface parent; + GTypeInterface parent; - GHashTable *connections; + GHashTable * connections; - GHashTable *(*get_connection_post_params) (GFBGraphConnectable *self, GType node_type); - GList *(*parse_connected_data) (GFBGraphConnectable *self, const gchar *payload, GError **error); + GHashTable * (*get_connection_post_params) (GFBGraphConnectable *self, + GType node_type); + GList * (*parse_connected_data) (GFBGraphConnectable *self, + const gchar *payload, + GError **error); }; GType gfbgraph_connectable_get_type (void) G_GNUC_CONST; -GHashTable* gfbgraph_connectable_get_connection_post_params (GFBGraphConnectable *self, GType node_type); -GList* gfbgraph_connectable_parse_connected_data (GFBGraphConnectable *self, const gchar *payload, GError **error); - -gboolean gfbgraph_connectable_is_connectable_to (GFBGraphConnectable *self, GType node_type); -const gchar* gfbgraph_connectable_get_connection_path (GFBGraphConnectable *self, GType node_type); -GList* gfbgraph_connectable_default_parse_connected_data (GFBGraphConnectable *self, const gchar *payload, GError **error); +GHashTable* gfbgraph_connectable_get_connection_post_params (GFBGraphConnectable *self, + GType node_type); +GList* gfbgraph_connectable_parse_connected_data (GFBGraphConnectable *self, + const gchar *payload, + GError **error); +gboolean gfbgraph_connectable_is_connectable_to (GFBGraphConnectable *self, + GType node_type); +const gchar* gfbgraph_connectable_get_connection_path (GFBGraphConnectable *self, + GType node_type); +GList* gfbgraph_connectable_default_parse_connected_data (GFBGraphConnectable *self, + const gchar *payload, + GError **error); G_END_DECLS diff --git a/gfbgraph/gfbgraph-goa-authorizer.c b/gfbgraph/gfbgraph-goa-authorizer.c index 7d75244..935f3e5 100644 --- a/gfbgraph/gfbgraph-goa-authorizer.c +++ b/gfbgraph/gfbgraph-goa-authorizer.c @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -31,209 +32,201 @@ #include "gfbgraph-goa-authorizer.h" enum { - PROP_O, - - PROP_GOA_OBJECT + PROP_O, + PROP_GOA_OBJECT }; struct _GFBGraphGoaAuthorizerPrivate { - GMutex mutex; - GoaObject *goa_object; - gchar *access_token; + GMutex mutex; + GoaObject *goa_object; + gchar *access_token; }; -static void gfbgraph_goa_authorizer_class_init (GFBGraphGoaAuthorizerClass *klass); -static void gfbgraph_goa_authorizer_init (GFBGraphGoaAuthorizer *object); -static void gfbgraph_goa_authorizer_finalize (GObject *object); -static void gfbgraph_goa_authorizer_dispose (GObject *object); -static void gfbgraph_goa_authorizer_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void gfbgraph_goa_authorizer_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); - -static void gfbgraph_goa_authorizer_iface_init (GFBGraphAuthorizerInterface *iface); -void gfbgraph_goa_authorizer_process_call (GFBGraphAuthorizer *iface, RestProxyCall *call); -void gfbgraph_goa_authorizer_process_message (GFBGraphAuthorizer *iface, SoupMessage *message); -gboolean gfbgraph_goa_authorizer_refresh_authorization (GFBGraphAuthorizer *iface, GCancellable *cancellable, GError **error); - -static void gfbgraph_goa_authorizer_set_goa_object (GFBGraphGoaAuthorizer *self, GoaObject *goa_object); - -#define GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), GFBGRAPH_TYPE_GOA_AUTHORIZER, GFBGraphGoaAuthorizerPrivate)) +#define GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE((o), GFBGRAPH_TYPE_GOA_AUTHORIZER, GFBGraphGoaAuthorizerPrivate)) static GObjectClass *parent_class = NULL; +static void authorizer_iface_init (GFBGraphAuthorizerInterface *iface); + G_DEFINE_TYPE_WITH_CODE (GFBGraphGoaAuthorizer, gfbgraph_goa_authorizer, G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (GFBGRAPH_TYPE_AUTHORIZER, gfbgraph_goa_authorizer_iface_init)); + G_IMPLEMENT_INTERFACE (GFBGRAPH_TYPE_AUTHORIZER, authorizer_iface_init)); static void -gfbgraph_goa_authorizer_class_init (GFBGraphGoaAuthorizerClass *klass) +gfbgraph_goa_authorizer_finalize (GObject *object) { - GObjectClass *gobject_class; - gobject_class = (GObjectClass*) klass; - - parent_class = g_type_class_peek_parent (klass); - gobject_class->finalize = gfbgraph_goa_authorizer_finalize; - gobject_class->get_property = gfbgraph_goa_authorizer_get_property; - gobject_class->set_property = gfbgraph_goa_authorizer_set_property; - gobject_class->dispose = gfbgraph_goa_authorizer_dispose; - - /** - * GFBGraphGoaAuthorizer:goa-object: - * - * The GOA account providing authentication. - * - **/ - g_object_class_install_property (gobject_class, - PROP_GOA_OBJECT, - g_param_spec_object ("goa-object", - "GoaObject", - "The GOA account to authenticate.", - GOA_TYPE_OBJECT, - G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)); - - g_type_class_add_private (gobject_class, sizeof(GFBGraphGoaAuthorizerPrivate)); + G_OBJECT_CLASS(parent_class)->finalize (object); } static void -gfbgraph_goa_authorizer_init (GFBGraphGoaAuthorizer *object) +gfbgraph_goa_authorizer_dispose (GObject *object) { - object->priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE(object); - g_mutex_init (&object->priv->mutex); -} + GFBGraphGoaAuthorizerPrivate *priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE (object); -static void -gfbgraph_goa_authorizer_finalize (GObject *object) -{ - G_OBJECT_CLASS(parent_class)->finalize (object); + g_clear_object (&priv->goa_object); + + G_OBJECT_CLASS (parent_class)->dispose (object); } static void -gfbgraph_goa_authorizer_dispose (GObject *object) +set_goa_object (GFBGraphGoaAuthorizer *self, + GoaObject *goa_object) { - GFBGraphGoaAuthorizerPrivate *priv; + GoaAccount *account; + GoaOAuth2Based *oauth2_based; + GFBGraphGoaAuthorizerPrivate *priv; + + g_return_if_fail (GOA_IS_OBJECT (goa_object)); - priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE (object); + priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE (self); - g_clear_object (&priv->goa_object); + oauth2_based = goa_object_peek_oauth2_based (goa_object); + g_return_if_fail (oauth2_based != NULL && GOA_IS_OAUTH2_BASED (oauth2_based)); - G_OBJECT_CLASS (parent_class)->dispose (object); + account = goa_object_peek_account (goa_object); + g_return_if_fail (account != NULL && GOA_IS_ACCOUNT (account)); + + g_object_ref (goa_object); + priv->goa_object = goa_object; +} + +static void +gfbgraph_goa_authorizer_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (prop_id) { + case PROP_GOA_OBJECT: + set_goa_object (GFBGRAPH_GOA_AUTHORIZER (object), + GOA_OBJECT (g_value_get_object (value))); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -gfbgraph_goa_authorizer_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +gfbgraph_goa_authorizer_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) { - switch (prop_id) { - case PROP_GOA_OBJECT: - gfbgraph_goa_authorizer_set_goa_object (GFBGRAPH_GOA_AUTHORIZER (object), GOA_OBJECT (g_value_get_object (value))); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + GFBGraphGoaAuthorizerPrivate *priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE (object); + + switch (prop_id) { + case PROP_GOA_OBJECT: + g_value_set_object (value, priv->goa_object); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -gfbgraph_goa_authorizer_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +gfbgraph_goa_authorizer_class_init (GFBGraphGoaAuthorizerClass *klass) { - GFBGraphGoaAuthorizerPrivate *priv; - - priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_GOA_OBJECT: - g_value_set_object (value, priv->goa_object); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + GObjectClass *gobject_class = (GObjectClass*)klass; + + parent_class = g_type_class_peek_parent (klass); + gobject_class->finalize = gfbgraph_goa_authorizer_finalize; + gobject_class->dispose = gfbgraph_goa_authorizer_dispose; + gobject_class->get_property = gfbgraph_goa_authorizer_get_property; + gobject_class->set_property = gfbgraph_goa_authorizer_set_property; + + /** + * GFBGraphGoaAuthorizer:goa-object: + * + * The GOA account providing authentication. + * + **/ + g_object_class_install_property (gobject_class, + PROP_GOA_OBJECT, + g_param_spec_object ("goa-object", + "GoaObject", + "The GOA account to authenticate.", + GOA_TYPE_OBJECT, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)); + + g_type_class_add_private (gobject_class, sizeof(GFBGraphGoaAuthorizerPrivate)); } static void -gfbgraph_goa_authorizer_iface_init (GFBGraphAuthorizerInterface *iface) +gfbgraph_goa_authorizer_init (GFBGraphGoaAuthorizer *object) { - iface->process_call = gfbgraph_goa_authorizer_process_call; - iface->process_message = gfbgraph_goa_authorizer_process_message; - iface->refresh_authorization = gfbgraph_goa_authorizer_refresh_authorization; + object->priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE(object); + g_mutex_init (&object->priv->mutex); } -void -gfbgraph_goa_authorizer_process_call (GFBGraphAuthorizer *iface, RestProxyCall *call) +/* --- Authorizer Interface --- */ +static void +process_call (GFBGraphAuthorizer *iface, + RestProxyCall *call) { - GFBGraphGoaAuthorizerPrivate *priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE (GFBGRAPH_GOA_AUTHORIZER (iface)); + GFBGraphGoaAuthorizerPrivate *priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE (GFBGRAPH_GOA_AUTHORIZER (iface)); - g_mutex_lock (&priv->mutex); + g_mutex_lock (&priv->mutex); - if (priv->access_token != NULL) - rest_proxy_call_add_param (call, "access_token", priv->access_token); + if (priv->access_token != NULL) + rest_proxy_call_add_param (call, "access_token", priv->access_token); - g_mutex_unlock (&priv->mutex); + g_mutex_unlock (&priv->mutex); } -void -gfbgraph_goa_authorizer_process_message (GFBGraphAuthorizer *iface, SoupMessage *message) +static void +process_message (GFBGraphAuthorizer *iface, + SoupMessage *message) { - gchar *auth_value; - SoupURI *uri; - GFBGraphGoaAuthorizerPrivate *priv; - - priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE (GFBGRAPH_GOA_AUTHORIZER (iface)); + gchar *auth_value; + SoupURI *uri; + GFBGraphGoaAuthorizerPrivate *priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE (GFBGRAPH_GOA_AUTHORIZER (iface)); - g_mutex_lock (&priv->mutex); + g_mutex_lock (&priv->mutex); - uri = soup_message_get_uri (message); - auth_value = g_strconcat ("access_token=", priv->access_token, NULL); - soup_uri_set_query (uri, auth_value); + uri = soup_message_get_uri (message); + auth_value = g_strconcat ("access_token=", priv->access_token, NULL); + soup_uri_set_query (uri, auth_value); - g_free (auth_value); + g_free (auth_value); - g_mutex_unlock (&priv->mutex); + g_mutex_unlock (&priv->mutex); } -gboolean -gfbgraph_goa_authorizer_refresh_authorization (GFBGraphAuthorizer *iface, GCancellable *cancellable, GError **error) +static gboolean +refresh_authorization (GFBGraphAuthorizer *iface, + GCancellable *cancellable, + GError **error) { - GFBGraphGoaAuthorizerPrivate *priv; - GoaAccount *account; - GoaOAuth2Based *oauth2_based; - gboolean ret_val; + GoaAccount *account; + GoaOAuth2Based *oauth2_based; + gboolean ret_val = FALSE; + GFBGraphGoaAuthorizerPrivate *priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE (GFBGRAPH_GOA_AUTHORIZER (iface)); - priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE (GFBGRAPH_GOA_AUTHORIZER (iface)); - ret_val = FALSE; + g_mutex_lock (&priv->mutex); - g_mutex_lock (&priv->mutex); + g_free (priv->access_token); + priv->access_token = NULL; - g_free (priv->access_token); - priv->access_token = NULL; + account = goa_object_peek_account (priv->goa_object); + oauth2_based = goa_object_peek_oauth2_based (priv->goa_object); - account = goa_object_peek_account (priv->goa_object); - oauth2_based = goa_object_peek_oauth2_based (priv->goa_object); + if (goa_account_call_ensure_credentials_sync (account, NULL, cancellable, error)) + if (goa_oauth2_based_call_get_access_token_sync (oauth2_based, &priv->access_token, NULL, cancellable, error)) + ret_val = TRUE; - if (goa_account_call_ensure_credentials_sync (account, NULL, cancellable, error)) - if (goa_oauth2_based_call_get_access_token_sync (oauth2_based, &priv->access_token, NULL, cancellable, error)) - ret_val = TRUE; + g_mutex_unlock (&priv->mutex); - g_mutex_unlock (&priv->mutex); - return ret_val; + return ret_val; } static void -gfbgraph_goa_authorizer_set_goa_object (GFBGraphGoaAuthorizer *self, GoaObject *goa_object) +authorizer_iface_init (GFBGraphAuthorizerInterface *iface) { - GoaAccount *account; - GoaOAuth2Based *oauth2_based; - GFBGraphGoaAuthorizerPrivate *priv; - - g_return_if_fail (GOA_IS_OBJECT (goa_object)); - - priv = GFBGRAPH_GOA_AUTHORIZER_GET_PRIVATE (self); - - oauth2_based = goa_object_peek_oauth2_based (goa_object); - g_return_if_fail (oauth2_based != NULL && GOA_IS_OAUTH2_BASED (oauth2_based)); - - account = goa_object_peek_account (goa_object); - g_return_if_fail (account != NULL && GOA_IS_ACCOUNT (account)); - - g_object_ref (goa_object); - priv->goa_object = goa_object; + iface->process_call = process_call; + iface->process_message = process_message; + iface->refresh_authorization = refresh_authorization; } /** @@ -244,8 +237,10 @@ gfbgraph_goa_authorizer_set_goa_object (GFBGraphGoaAuthorizer *self, GoaObject * * * Returns: (transfer full): A new #GFBGraphGoaAuthorizer. Use g_object_unref() to free it. */ -GFBGraphGoaAuthorizer* +GFBGraphGoaAuthorizer * gfbgraph_goa_authorizer_new (GoaObject *goa_object) { - return GFBGRAPH_GOA_AUTHORIZER (g_object_new (GFBGRAPH_TYPE_GOA_AUTHORIZER, "goa-object", goa_object, NULL)); + return g_object_new (GFBGRAPH_TYPE_GOA_AUTHORIZER, + "goa-object", goa_object, + NULL); } diff --git a/gfbgraph/gfbgraph-goa-authorizer.h b/gfbgraph/gfbgraph-goa-authorizer.h index fa0fc99..36cf674 100644 --- a/gfbgraph/gfbgraph-goa-authorizer.h +++ b/gfbgraph/gfbgraph-goa-authorizer.h @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,26 +26,31 @@ G_BEGIN_DECLS -#define GFBGRAPH_TYPE_GOA_AUTHORIZER (gfbgraph_goa_authorizer_get_type()) -#define GFBGRAPH_GOA_AUTHORIZER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GFBGRAPH_TYPE_GOA_AUTHORIZER,GFBGraphGoaAuthorizer)) -#define GFBGRAPH_GOA_AUTHORIZER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GFBGRAPH_TYPE_GOA_AUTHORIZER,GFBGraphGoaAuthorizerClass)) -#define GFBGRAPH_IS_GOA_AUTHORIZER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GFBGRAPH_TYPE_GOA_AUTHORIZER)) -#define GFBGRAPH_IS_GOA_AUTHORIZER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GFBGRAPH_TYPE_GOA_AUTHORIZER)) -#define GFBGRAPH_GOA_AUTHORIZER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GFBGRAPH_TYPE_GOA_AUTHORIZER,GFBGraphGoaAuthorizerClass)) +#define GFBGRAPH_TYPE_GOA_AUTHORIZER (gfbgraph_goa_authorizer_get_type()) +#define GFBGRAPH_GOA_AUTHORIZER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GFBGRAPH_TYPE_GOA_AUTHORIZER,GFBGraphGoaAuthorizer)) +#define GFBGRAPH_GOA_AUTHORIZER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GFBGRAPH_TYPE_GOA_AUTHORIZER,GFBGraphGoaAuthorizerClass)) +#define GFBGRAPH_IS_GOA_AUTHORIZER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GFBGRAPH_TYPE_GOA_AUTHORIZER)) +#define GFBGRAPH_IS_GOA_AUTHORIZER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GFBGRAPH_TYPE_GOA_AUTHORIZER)) +#define GFBGRAPH_GOA_AUTHORIZER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj),GFBGRAPH_TYPE_GOA_AUTHORIZER,GFBGraphGoaAuthorizerClass)) typedef struct _GFBGraphGoaAuthorizer GFBGraphGoaAuthorizer; typedef struct _GFBGraphGoaAuthorizerClass GFBGraphGoaAuthorizerClass; typedef struct _GFBGraphGoaAuthorizerPrivate GFBGraphGoaAuthorizerPrivate; struct _GFBGraphGoaAuthorizer { - GObject parent; + GObject parent; - /*< private >*/ - GFBGraphGoaAuthorizerPrivate *priv; + /*< private >*/ + GFBGraphGoaAuthorizerPrivate *priv; }; struct _GFBGraphGoaAuthorizerClass { - GObjectClass parent_class; + GObjectClass parent_class; }; GType gfbgraph_goa_authorizer_get_type (void) G_GNUC_CONST; diff --git a/gfbgraph/gfbgraph-node.c b/gfbgraph/gfbgraph-node.c index 9ce84bf..6f83ba1 100644 --- a/gfbgraph/gfbgraph-node.c +++ b/gfbgraph/gfbgraph-node.c @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -41,215 +42,214 @@ enum { - PROP_0, - - PROP_ID, - PROP_LINK, - PROP_CREATEDTIME, - PROP_UPDATEDTIME + PROP_0, + PROP_ID, + PROP_LINK, + PROP_CREATEDTIME, + PROP_UPDATEDTIME }; struct _GFBGraphNodePrivate { - GList *connections; - gchar *id; - gchar *link; - gchar *created_time; - gchar *updated_time; + GList *connections; + gchar *id; + gchar *link; + gchar *created_time; + gchar *updated_time; }; typedef struct { - GList *list; - GType node_type; - GFBGraphAuthorizer *authorizer; + GList *list; + GType node_type; + GFBGraphAuthorizer *authorizer; } GFBGraphNodeConnectionAsyncData; -GQuark -gfbgraph_node_error_quark (void) -{ - return g_quark_from_static_string ("gfbgraph-node-error-quark"); -} - -static void gfbgraph_node_init (GFBGraphNode *obj); -static void gfbgraph_node_class_init (GFBGraphNodeClass *klass); -static void gfbgraph_node_finalize (GObject *object); -static void gfbgraph_node_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void gfbgraph_node_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); - -static void gfbgraph_node_connection_async_data_free (GFBGraphNodeConnectionAsyncData *data); -static void gfbgraph_node_get_connection_nodes_async_thread (GSimpleAsyncResult *simple_async, GFBGraphNode *node, GCancellable cancellable); - -#define GFBGRAPH_NODE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), GFBGRAPH_TYPE_NODE, GFBGraphNodePrivate)) +#define GFBGRAPH_NODE_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE((o), GFBGRAPH_TYPE_NODE, GFBGraphNodePrivate)) static GObjectClass *parent_class = NULL; G_DEFINE_TYPE (GFBGraphNode, gfbgraph_node, G_TYPE_OBJECT); -static void -gfbgraph_node_class_init (GFBGraphNodeClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - parent_class = g_type_class_peek_parent (klass); - - gobject_class->finalize = gfbgraph_node_finalize; - gobject_class->set_property = gfbgraph_node_set_property; - gobject_class->get_property = gfbgraph_node_get_property; - - g_type_class_add_private (gobject_class, sizeof(GFBGraphNodePrivate)); - - /** - * GFBGraphNode:id: - * - * The node ID. All nodes have one of this. - **/ - g_object_class_install_property (gobject_class, - PROP_ID, - g_param_spec_string ("id", - "The Facebook node ID", "Every node in the Facebook Graph is identified by his ID", - "", - G_PARAM_READABLE | G_PARAM_WRITABLE)); - - /** - * GFBGraphNode:link: - * - * The node link. An URL to the node on Facebook. - **/ - g_object_class_install_property (gobject_class, - PROP_LINK, - g_param_spec_string ("link", - "The link to the node", "A link (url) to the node on Facebook", - "", - G_PARAM_READABLE | G_PARAM_WRITABLE)); - - /** - * GFBGraphNode:created_time: - * - * The time the node was initially published. Is an ISO 8601 encoded date. - **/ - g_object_class_install_property (gobject_class, - PROP_CREATEDTIME, - g_param_spec_string ("created_time", - "The node creation time", "An ISO 8601 encoded date when the node was initially published", - "", - G_PARAM_READABLE | G_PARAM_WRITABLE)); - - /** - * GFBGraphNode:updated_time: - * - * The last time the node was updated. Is an ISO 8601 encoded date. - **/ - g_object_class_install_property (gobject_class, - PROP_UPDATEDTIME, - g_param_spec_string ("updated_time", - "The node updated time", "An ISO 8601 encoded date when the node was updated", - "", - G_PARAM_READABLE | G_PARAM_WRITABLE)); -} - -static void -gfbgraph_node_init (GFBGraphNode *obj) +GQuark +gfbgraph_node_error_quark (void) { - obj->priv = GFBGRAPH_NODE_GET_PRIVATE(obj); + return g_quark_from_static_string ("gfbgraph-node-error-quark"); } static void gfbgraph_node_finalize (GObject *object) { - GFBGraphNodePrivate *priv; - - priv = GFBGRAPH_NODE_GET_PRIVATE (object); + GFBGraphNodePrivate *priv = GFBGRAPH_NODE_GET_PRIVATE (object); - if (priv->id) - g_free (priv->id); - if (priv->link) - g_free (priv->link); - if (priv->created_time) - g_free (priv->created_time); + if (priv->id) + g_free (priv->id); + if (priv->link) + g_free (priv->link); + if (priv->created_time) + g_free (priv->created_time); - G_OBJECT_CLASS(parent_class)->finalize (object); + G_OBJECT_CLASS(parent_class)->finalize (object); } static void -gfbgraph_node_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +gfbgraph_node_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) { - GFBGraphNodePrivate *priv; - - priv = GFBGRAPH_NODE_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_ID: - if (priv->id) - g_free (priv->id); - priv->id = g_strdup (g_value_get_string (value)); - break; - case PROP_LINK: - if (priv->link) - g_free (priv->link); - priv->link = g_strdup (g_value_get_string (value)); - break; - case PROP_CREATEDTIME: - if (priv->created_time) - g_free (priv->created_time); - priv->created_time = g_strdup (g_value_get_string (value)); - break; - case PROP_UPDATEDTIME: - if (priv->updated_time) - g_free (priv->updated_time); - priv->updated_time = g_strdup (g_value_get_string (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + GFBGraphNodePrivate *priv = GFBGRAPH_NODE_GET_PRIVATE (object); + + switch (prop_id) { + case PROP_ID: + if (priv->id) + g_free (priv->id); + priv->id = g_strdup (g_value_get_string (value)); + break; + case PROP_LINK: + if (priv->link) + g_free (priv->link); + priv->link = g_strdup (g_value_get_string (value)); + break; + case PROP_CREATEDTIME: + if (priv->created_time) + g_free (priv->created_time); + priv->created_time = g_strdup (g_value_get_string (value)); + break; + case PROP_UPDATEDTIME: + if (priv->updated_time) + g_free (priv->updated_time); + priv->updated_time = g_strdup (g_value_get_string (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -gfbgraph_node_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +gfbgraph_node_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) { - GFBGraphNodePrivate *priv; - - priv = GFBGRAPH_NODE_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_ID: - g_value_set_string (value, priv->id); - break; - case PROP_LINK: - g_value_set_string (value, priv->link); - break; - case PROP_CREATEDTIME: - g_value_set_string (value, priv->created_time); - break; - case PROP_UPDATEDTIME: - g_value_set_string (value, priv->updated_time); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + GFBGraphNodePrivate *priv = GFBGRAPH_NODE_GET_PRIVATE (object); + + switch (prop_id) { + case PROP_ID: + g_value_set_string (value, priv->id); + break; + case PROP_LINK: + g_value_set_string (value, priv->link); + break; + case PROP_CREATEDTIME: + g_value_set_string (value, priv->created_time); + break; + case PROP_UPDATEDTIME: + g_value_set_string (value, priv->updated_time); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -gfbgraph_node_connection_async_data_free (GFBGraphNodeConnectionAsyncData *data) +gfbgraph_node_class_init (GFBGraphNodeClass *klass) { - g_list_free (data->list); - g_object_unref (data->authorizer); + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + gobject_class->finalize = gfbgraph_node_finalize; + gobject_class->set_property = gfbgraph_node_set_property; + gobject_class->get_property = gfbgraph_node_get_property; + + g_type_class_add_private (gobject_class, sizeof(GFBGraphNodePrivate)); + + /** + * GFBGraphNode:id: + * + * The node ID. All nodes have one of this. + **/ + g_object_class_install_property (gobject_class, + PROP_ID, + g_param_spec_string ("id", + "The Facebook node ID", + "Every node in the Facebook Graph is identified by his ID", + "", + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + /** + * GFBGraphNode:link: + * + * The node link. An URL to the node on Facebook. + **/ + g_object_class_install_property (gobject_class, + PROP_LINK, + g_param_spec_string ("link", + "The link to the node", + "A link (url) to the node on Facebook", + "", + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + /** + * GFBGraphNode:created_time: + * + * The time the node was initially published. Is an ISO 8601 encoded date. + **/ + g_object_class_install_property (gobject_class, + PROP_CREATEDTIME, + g_param_spec_string ("created_time", + "The node creation time", + "An ISO 8601 encoded date when the node was initially published", + "", + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + /** + * GFBGraphNode:updated_time: + * + * The last time the node was updated. Is an ISO 8601 encoded date. + **/ + g_object_class_install_property (gobject_class, + PROP_UPDATEDTIME, + g_param_spec_string ("updated_time", + "The node updated time", + "An ISO 8601 encoded date when the node was updated", + "", + G_PARAM_READABLE | G_PARAM_WRITABLE)); +} - g_slice_free (GFBGraphNodeConnectionAsyncData, data); +static void +gfbgraph_node_init (GFBGraphNode *obj) +{ + obj->priv = GFBGRAPH_NODE_GET_PRIVATE(obj); } +/* --- Private Functions --- */ static void -gfbgraph_node_get_connection_nodes_async_thread (GSimpleAsyncResult *simple_async, GFBGraphNode *node, GCancellable cancellable) +connection_async_data_free (GFBGraphNodeConnectionAsyncData *data) { - GFBGraphNodeConnectionAsyncData *data; - GError *error; + g_list_free (data->list); + g_object_unref (data->authorizer); - data = (GFBGraphNodeConnectionAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async); + g_slice_free (GFBGraphNodeConnectionAsyncData, data); +} - error = NULL; - data->list = gfbgraph_node_get_connection_nodes (node, data->node_type, data->authorizer, &error); - if (error != NULL) - g_simple_async_result_take_error (simple_async, error); +static void +get_connection_nodes_async_thread (GSimpleAsyncResult *simple_async, + GFBGraphNode *node, + GCancellable cancellable) +{ + GFBGraphNodeConnectionAsyncData *data; + GError *error = NULL; + + data = (GFBGraphNodeConnectionAsyncData *)g_simple_async_result_get_op_res_gpointer (simple_async); + data->list = gfbgraph_node_get_connection_nodes (node, + data->node_type, + data->authorizer, + &error); + if (error != NULL) + g_simple_async_result_take_error (simple_async, error); } /** @@ -259,10 +259,10 @@ gfbgraph_node_get_connection_nodes_async_thread (GSimpleAsyncResult *simple_asyn * * Returns: (transfer full): a new #GFBGraphNode; unref with g_object_unref() **/ -GFBGraphNode* +GFBGraphNode * gfbgraph_node_new (void) { - return GFBGRAPH_NODE (g_object_new (GFBGRAPH_TYPE_NODE, NULL)); + return GFBGRAPH_NODE (g_object_new (GFBGRAPH_TYPE_NODE, NULL)); } /** @@ -276,38 +276,41 @@ gfbgraph_node_new (void) * * Returns: (transfer full): a #GFBGraphNode or %NULL. **/ -GFBGraphNode* -gfbgraph_node_new_from_id (GFBGraphAuthorizer *authorizer, const gchar *id, GType node_type, GError **error) +GFBGraphNode * +gfbgraph_node_new_from_id (GFBGraphAuthorizer *authorizer, + const gchar *id, + GType node_type, + GError **error) { - GFBGraphNode *node; - RestProxyCall *rest_call; - - g_return_val_if_fail ((strlen (id) > 0), NULL); - g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), NULL); - g_return_val_if_fail (g_type_is_a (node_type, GFBGRAPH_TYPE_NODE), NULL); - - rest_call = gfbgraph_new_rest_call (authorizer); - rest_proxy_call_set_method (rest_call, "GET"); - rest_proxy_call_set_function (rest_call, id); - - node = NULL; - if (rest_proxy_call_sync (rest_call, error)) { - JsonParser *jparser; - JsonNode *jnode; - const gchar *payload; - - payload = rest_proxy_call_get_payload (rest_call); - jparser = json_parser_new (); - if (json_parser_load_from_data (jparser, payload, -1, error)) { - jnode = json_parser_get_root (jparser); - node = GFBGRAPH_NODE (json_gobject_deserialize (node_type, jnode)); - } - - g_object_unref (jparser); - } - - g_object_unref (rest_call); - return node; + GFBGraphNode *node = NULL; + RestProxyCall *rest_call; + + g_return_val_if_fail ((strlen (id) > 0), NULL); + g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), NULL); + g_return_val_if_fail (g_type_is_a (node_type, GFBGRAPH_TYPE_NODE), NULL); + + rest_call = gfbgraph_new_rest_call (authorizer); + rest_proxy_call_set_method (rest_call, "GET"); + rest_proxy_call_set_function (rest_call, id); + + if (rest_proxy_call_sync (rest_call, error)) { + JsonParser *jparser; + JsonNode *jnode; + const gchar *payload; + + payload = rest_proxy_call_get_payload (rest_call); + jparser = json_parser_new (); + if (json_parser_load_from_data (jparser, payload, -1, error)) { + jnode = json_parser_get_root (jparser); + node = GFBGRAPH_NODE (json_gobject_deserialize (node_type, jnode)); + } + + g_object_unref (jparser); + } + + g_object_unref (rest_call); + + return node; } /** @@ -318,12 +321,12 @@ gfbgraph_node_new_from_id (GFBGraphAuthorizer *authorizer, const gchar *id, GTyp * * Returns: (transfer none): the node ID. **/ -const gchar* +const gchar * gfbgraph_node_get_id (GFBGraphNode *node) { - g_return_val_if_fail (GFBGRAPH_IS_NODE (node), NULL); + g_return_val_if_fail (GFBGRAPH_IS_NODE (node), NULL); - return node->priv->id; + return node->priv->id; } /** @@ -334,12 +337,12 @@ gfbgraph_node_get_id (GFBGraphNode *node) * * Returns: (transfer none): the URL. **/ -const gchar* +const gchar * gfbgraph_node_get_link (GFBGraphNode *node) { - g_return_val_if_fail (GFBGRAPH_IS_NODE (node), NULL); + g_return_val_if_fail (GFBGRAPH_IS_NODE (node), NULL); - return node->priv->link; + return node->priv->link; } /** @@ -350,12 +353,12 @@ gfbgraph_node_get_link (GFBGraphNode *node) * * Returns: (transfer none): an ISO 8601 encoded date when the node was initially published. **/ -const gchar* +const gchar * gfbgraph_node_get_created_time (GFBGraphNode *node) { - g_return_val_if_fail (GFBGRAPH_IS_NODE (node), NULL); + g_return_val_if_fail (GFBGRAPH_IS_NODE (node), NULL); - return node->priv->created_time; + return node->priv->created_time; } /** @@ -366,12 +369,12 @@ gfbgraph_node_get_created_time (GFBGraphNode *node) * * Returns: (transfer none): an ISO 8601 encoded date when the node was updated. **/ -const gchar* +const gchar * gfbgraph_node_get_updated_time (GFBGraphNode *node) { - g_return_val_if_fail (GFBGRAPH_IS_NODE (node), NULL); + g_return_val_if_fail (GFBGRAPH_IS_NODE (node), NULL); - return node->priv->updated_time; + return node->priv->updated_time; } /** @@ -383,14 +386,15 @@ gfbgraph_node_get_updated_time (GFBGraphNode *node) * and the Graph API returns the ID of the new created node. **/ void -gfbgraph_node_set_id (GFBGraphNode *node, const gchar *id) +gfbgraph_node_set_id (GFBGraphNode *node, + const gchar *id) { - g_return_if_fail (GFBGRAPH_IS_NODE (node)); - g_return_if_fail (id != NULL); + g_return_if_fail (GFBGRAPH_IS_NODE (node)); + g_return_if_fail (id != NULL); - g_object_set (G_OBJECT (node), - "id", id, - NULL); + g_object_set (G_OBJECT (node), + "id", id, + NULL); } /** @@ -406,59 +410,61 @@ gfbgraph_node_set_id (GFBGraphNode *node, const gchar *id) * * Returns: (element-type GFBGraphNode) (transfer full): a newly-allocated #GList of type @node_type objects with the found nodes. **/ -GList* -gfbgraph_node_get_connection_nodes (GFBGraphNode *node, GType node_type, GFBGraphAuthorizer *authorizer, GError **error) +GList * +gfbgraph_node_get_connection_nodes (GFBGraphNode *node, + GType node_type, + GFBGraphAuthorizer *authorizer, + GError **error) { - GFBGraphNodePrivate *priv; - GList *nodes_list = NULL; - GFBGraphNode *connected_node; - RestProxyCall *rest_call; - gchar *function_path; - - g_return_val_if_fail (GFBGRAPH_IS_NODE (node), NULL); - g_return_val_if_fail (g_type_is_a (node_type, GFBGRAPH_TYPE_NODE), NULL); - g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), NULL); - - priv = GFBGRAPH_NODE_GET_PRIVATE (node); - - /* Dummy node just for test */ - connected_node = g_object_new (node_type, NULL); - if (GFBGRAPH_IS_CONNECTABLE (connected_node) == FALSE) { - g_set_error (error, GFBGRAPH_NODE_ERROR, - GFBGRAPH_NODE_ERROR_NO_CONNECTABLE, - "The given node type (%s) doesn't implement connectable interface", g_type_name (node_type)); - return NULL; - } - - if (gfbgraph_connectable_is_connectable_to (GFBGRAPH_CONNECTABLE (connected_node), G_OBJECT_TYPE (node)) == FALSE) { - g_set_error (error, GFBGRAPH_NODE_ERROR, - GFBGRAPH_NODE_ERROR_NO_CONNECTABLE, - "The given node type (%s) can't connect with the node", g_type_name (node_type)); - return NULL; - } - - rest_call = gfbgraph_new_rest_call (authorizer); - rest_proxy_call_set_method (rest_call, "GET"); - function_path = g_strdup_printf ("%s/%s", - priv->id, - gfbgraph_connectable_get_connection_path (GFBGRAPH_CONNECTABLE (connected_node), - G_OBJECT_TYPE (node))); - rest_proxy_call_set_function (rest_call, function_path); - g_free (function_path); - - if (rest_proxy_call_sync (rest_call, error)) { - const gchar *payload; - - payload = rest_proxy_call_get_payload (rest_call); - nodes_list = gfbgraph_connectable_parse_connected_data (GFBGRAPH_CONNECTABLE (connected_node), payload, error); - } - - /* We don't need this node again */ - g_object_unref (connected_node); - g_object_unref (rest_call); - - - return nodes_list; + GFBGraphNodePrivate *priv; + GList *nodes_list = NULL; + GFBGraphNode *connected_node; + RestProxyCall *rest_call; + gchar *function_path; + + g_return_val_if_fail (GFBGRAPH_IS_NODE (node), NULL); + g_return_val_if_fail (g_type_is_a (node_type, GFBGRAPH_TYPE_NODE), NULL); + g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), NULL); + + priv = GFBGRAPH_NODE_GET_PRIVATE (node); + + /* Dummy node just for test */ + connected_node = g_object_new (node_type, NULL); + if (GFBGRAPH_IS_CONNECTABLE (connected_node) == FALSE) { + g_set_error (error, GFBGRAPH_NODE_ERROR, + GFBGRAPH_NODE_ERROR_NO_CONNECTABLE, + "The given node type (%s) doesn't implement connectable interface", + g_type_name (node_type)); + return NULL; + } + + if (gfbgraph_connectable_is_connectable_to (GFBGRAPH_CONNECTABLE (connected_node), G_OBJECT_TYPE (node)) == FALSE) { + g_set_error (error, GFBGRAPH_NODE_ERROR, + GFBGRAPH_NODE_ERROR_NO_CONNECTABLE, + "The given node type (%s) can't connect with the node", + g_type_name (node_type)); + return NULL; + } + + rest_call = gfbgraph_new_rest_call (authorizer); + rest_proxy_call_set_method (rest_call, "GET"); + function_path = g_strdup_printf ("%s/%s", + priv->id, + gfbgraph_connectable_get_connection_path (GFBGRAPH_CONNECTABLE (connected_node), + G_OBJECT_TYPE (node))); + rest_proxy_call_set_function (rest_call, function_path); + g_free (function_path); + + if (rest_proxy_call_sync (rest_call, error)) { + const gchar *payload = rest_proxy_call_get_payload (rest_call); + nodes_list = gfbgraph_connectable_parse_connected_data (GFBGRAPH_CONNECTABLE (connected_node), payload, error); + } + + /* We don't need this node again */ + g_object_unref (connected_node); + g_object_unref (rest_call); + + return nodes_list; } /** @@ -477,28 +483,41 @@ gfbgraph_node_get_connection_nodes (GFBGraphNode *node, GType node_type, GFBGrap * to get the list of connected nodes. **/ void -gfbgraph_node_get_connection_nodes_async (GFBGraphNode *node, GType node_type, GFBGraphAuthorizer *authorizer, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) +gfbgraph_node_get_connection_nodes_async (GFBGraphNode *node, + GType node_type, + GFBGraphAuthorizer *authorizer, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { - GSimpleAsyncResult *result; - GFBGraphNodeConnectionAsyncData *data; - - g_return_if_fail (GFBGRAPH_IS_NODE (node)); - g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); - g_return_if_fail (callback != NULL); - - result = g_simple_async_result_new (G_OBJECT (node), callback, user_data, gfbgraph_node_get_connection_nodes_async); - g_simple_async_result_set_check_cancellable (result, cancellable); - - data = g_slice_new (GFBGraphNodeConnectionAsyncData); - data->list = NULL; - data->node_type = node_type; - data->authorizer = authorizer; - g_object_ref (data->authorizer); - - g_simple_async_result_set_op_res_gpointer (result, data, (GDestroyNotify) gfbgraph_node_connection_async_data_free); - g_simple_async_result_run_in_thread (result, (GSimpleAsyncThreadFunc) gfbgraph_node_get_connection_nodes_async_thread, G_PRIORITY_DEFAULT, cancellable); - - g_object_unref (result); + GSimpleAsyncResult *result; + GFBGraphNodeConnectionAsyncData *data; + + g_return_if_fail (GFBGRAPH_IS_NODE (node)); + g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); + g_return_if_fail (callback != NULL); + + result = g_simple_async_result_new (G_OBJECT (node), + callback, + user_data, + gfbgraph_node_get_connection_nodes_async); + g_simple_async_result_set_check_cancellable (result, cancellable); + + data = g_slice_new (GFBGraphNodeConnectionAsyncData); + data->list = NULL; + data->node_type = node_type; + data->authorizer = authorizer; + g_object_ref (data->authorizer); + + g_simple_async_result_set_op_res_gpointer (result, + data, + (GDestroyNotify)connection_async_data_free); + g_simple_async_result_run_in_thread (result, + (GSimpleAsyncThreadFunc)get_connection_nodes_async_thread, + G_PRIORITY_DEFAULT, + cancellable); + + g_object_unref (result); } /** @@ -513,21 +532,23 @@ gfbgraph_node_get_connection_nodes_async (GFBGraphNode *node, GType node_type, G * Returns: (element-type GFBGraphNode) (transfer full): a newly-allocated #GList of type #node_type objects with the found nodes. **/ GList* -gfbgraph_node_get_connection_nodes_async_finish (GFBGraphNode *node, GAsyncResult *result, GError **error) +gfbgraph_node_get_connection_nodes_async_finish (GFBGraphNode *node, + GAsyncResult *result, + GError **error) { - GSimpleAsyncResult *simple_async; - GFBGraphNodeConnectionAsyncData *data; + GSimpleAsyncResult *simple_async; + GFBGraphNodeConnectionAsyncData *data; - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (node), gfbgraph_node_get_connection_nodes_async), NULL); - g_return_val_if_fail (error == NULL || *error == NULL, NULL); + g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (node), gfbgraph_node_get_connection_nodes_async), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); - simple_async = G_SIMPLE_ASYNC_RESULT (result); + simple_async = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (simple_async, error)) - return NULL; + if (g_simple_async_result_propagate_error (simple_async, error)) + return NULL; - data = (GFBGraphNodeConnectionAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async); - return data->list; + data = (GFBGraphNodeConnectionAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async); + return data->list; } /** @@ -543,79 +564,85 @@ gfbgraph_node_get_connection_nodes_async_finish (GFBGraphNode *node, GAsyncResul * Returns: TRUE on sucess, FALSE if an error ocurred. **/ gboolean -gfbgraph_node_append_connection (GFBGraphNode *node, GFBGraphNode *connect_node, GFBGraphAuthorizer *authorizer, GError **error) +gfbgraph_node_append_connection (GFBGraphNode *node, + GFBGraphNode *connect_node, + GFBGraphAuthorizer *authorizer, + GError **error) { - GFBGraphNodePrivate *priv; - RestProxyCall *rest_call; - GHashTable *params; - gchar *function_path; - gboolean success; - - g_return_val_if_fail (GFBGRAPH_IS_NODE (node), FALSE); - g_return_val_if_fail (GFBGRAPH_IS_NODE (connect_node), FALSE); - g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), FALSE); - - if (GFBGRAPH_IS_CONNECTABLE (connect_node) == FALSE) { - g_set_error (error, GFBGRAPH_NODE_ERROR, - GFBGRAPH_NODE_ERROR_NO_CONNECTABLE, - "The given node type (%s) doesn't implement connectable interface", G_OBJECT_TYPE_NAME (connect_node)); - return FALSE; - } - - if (gfbgraph_connectable_is_connectable_to (GFBGRAPH_CONNECTABLE (connect_node), G_OBJECT_TYPE (node)) == FALSE) { - g_set_error (error, GFBGRAPH_NODE_ERROR, - GFBGRAPH_NODE_ERROR_NO_CONNECTABLE, - "The given node type (%s) can't append a %s connection", G_OBJECT_TYPE_NAME (node), G_OBJECT_TYPE_NAME (connect_node)); - return FALSE; - } - - priv = GFBGRAPH_NODE_GET_PRIVATE (node); - - success = FALSE; - rest_call = gfbgraph_new_rest_call (authorizer); - rest_proxy_call_set_method (rest_call, "POST"); - function_path = g_strdup_printf ("%s/%s", - priv->id, - gfbgraph_connectable_get_connection_path (GFBGRAPH_CONNECTABLE (connect_node), - G_OBJECT_TYPE (node))); - rest_proxy_call_set_function (rest_call, function_path); - g_free (function_path); - - params = gfbgraph_connectable_get_connection_post_params (GFBGRAPH_CONNECTABLE (connect_node), G_OBJECT_TYPE (node)); - if (g_hash_table_size (params) > 0) { - GHashTableIter iter; - const gchar *key; - const gchar *value; - - g_hash_table_iter_init (&iter, params); - while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value)) { - rest_proxy_call_add_param (rest_call, key, value); - } - } - - if (rest_proxy_call_sync (rest_call, error)) { - const gchar *payload; - JsonParser *jparser; - JsonNode *jnode; - JsonReader *jreader; - - payload = rest_proxy_call_get_payload (rest_call); - /* Parssing the new ID */ - jparser = json_parser_new (); - json_parser_load_from_data (jparser, payload, -1, error); - jnode = json_parser_get_root (jparser); - jreader = json_reader_new (jnode); - - json_reader_read_element (jreader, 0); - gfbgraph_node_set_id (connect_node, - json_reader_get_string_value (jreader)); - json_reader_end_element (jreader); - - g_object_unref (jreader); - g_object_unref (jparser); - success = TRUE; - } - g_object_unref (rest_call); - - return success; + GFBGraphNodePrivate *priv; + RestProxyCall *rest_call; + GHashTable *params; + gchar *function_path; + gboolean success = FALSE; + + g_return_val_if_fail (GFBGRAPH_IS_NODE (node), FALSE); + g_return_val_if_fail (GFBGRAPH_IS_NODE (connect_node), FALSE); + g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), FALSE); + + if (GFBGRAPH_IS_CONNECTABLE (connect_node) == FALSE) { + g_set_error (error, GFBGRAPH_NODE_ERROR, + GFBGRAPH_NODE_ERROR_NO_CONNECTABLE, + "The given node type (%s) doesn't implement connectable interface", + G_OBJECT_TYPE_NAME (connect_node)); + return FALSE; + } + + if (gfbgraph_connectable_is_connectable_to (GFBGRAPH_CONNECTABLE (connect_node), G_OBJECT_TYPE (node)) == FALSE) { + g_set_error (error, GFBGRAPH_NODE_ERROR, + GFBGRAPH_NODE_ERROR_NO_CONNECTABLE, + "The given node type (%s) can't append a %s connection", + G_OBJECT_TYPE_NAME (node), + G_OBJECT_TYPE_NAME (connect_node)); + return FALSE; + } + + priv = GFBGRAPH_NODE_GET_PRIVATE (node); + + rest_call = gfbgraph_new_rest_call (authorizer); + rest_proxy_call_set_method (rest_call, "POST"); + function_path = g_strdup_printf ("%s/%s", + priv->id, + gfbgraph_connectable_get_connection_path (GFBGRAPH_CONNECTABLE (connect_node), + G_OBJECT_TYPE (node))); + rest_proxy_call_set_function (rest_call, function_path); + g_free (function_path); + + params = gfbgraph_connectable_get_connection_post_params (GFBGRAPH_CONNECTABLE (connect_node), + G_OBJECT_TYPE (node)); + if (g_hash_table_size (params) > 0) { + GHashTableIter iter; + const gchar *key; + const gchar *value; + + g_hash_table_iter_init (&iter, params); + while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value)) { + rest_proxy_call_add_param (rest_call, key, value); + } + } + + if (rest_proxy_call_sync (rest_call, error)) { + const gchar *payload; + JsonParser *jparser; + JsonNode *jnode; + JsonReader *jreader; + + payload = rest_proxy_call_get_payload (rest_call); + /* Parssing the new ID */ + jparser = json_parser_new (); + json_parser_load_from_data (jparser, payload, -1, error); + jnode = json_parser_get_root (jparser); + jreader = json_reader_new (jnode); + + json_reader_read_element (jreader, 0); + gfbgraph_node_set_id (connect_node, + json_reader_get_string_value (jreader)); + json_reader_end_element (jreader); + + g_object_unref (jreader); + g_object_unref (jparser); + success = TRUE; + } + g_object_unref (rest_call); + + return success; } diff --git a/gfbgraph/gfbgraph-node.h b/gfbgraph/gfbgraph-node.h index c177a82..e637312 100644 --- a/gfbgraph/gfbgraph-node.h +++ b/gfbgraph/gfbgraph-node.h @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,12 +26,17 @@ G_BEGIN_DECLS -#define GFBGRAPH_TYPE_NODE (gfbgraph_node_get_type()) -#define GFBGRAPH_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GFBGRAPH_TYPE_NODE,GFBGraphNode)) -#define GFBGRAPH_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GFBGRAPH_TYPE_NODE,GFBGraphNodeClass)) -#define GFBGRAPH_IS_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GFBGRAPH_TYPE_NODE)) -#define GFBGRAPH_IS_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GFBGRAPH_TYPE_NODE)) -#define GFBGRAPH_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GFBGRAPH_TYPE_NODE,GFBGraphNodeClass)) +#define GFBGRAPH_TYPE_NODE (gfbgraph_node_get_type()) +#define GFBGRAPH_NODE(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GFBGRAPH_TYPE_NODE,GFBGraphNode)) +#define GFBGRAPH_NODE_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GFBGRAPH_TYPE_NODE,GFBGraphNodeClass)) +#define GFBGRAPH_IS_NODE(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GFBGRAPH_TYPE_NODE)) +#define GFBGRAPH_IS_NODE_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GFBGRAPH_TYPE_NODE)) +#define GFBGRAPH_NODE_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj),GFBGRAPH_TYPE_NODE,GFBGraphNodeClass)) #define GFBGRAPH_NODE_ERROR gfbgraph_node_error_quark () @@ -41,49 +47,55 @@ typedef struct _GFBGraphNodePrivate GFBGraphNodePrivate; G_DEFINE_AUTOPTR_CLEANUP_FUNC (GFBGraphNode, g_object_unref) struct _GFBGraphNode { - GObject parent; + GObject parent; - /*< private >*/ - GFBGraphNodePrivate *priv; + /*< private >*/ + GFBGraphNodePrivate *priv; }; struct _GFBGraphNodeClass { - GObjectClass parent_class; + GObjectClass parent_class; }; typedef enum { - GFBGRAPH_NODE_ERROR_NO_CONNECTIONABLE = 1, - GFBGRAPH_NODE_ERROR_NO_CONNECTABLE + GFBGRAPH_NODE_ERROR_NO_CONNECTIONABLE = 1, + GFBGRAPH_NODE_ERROR_NO_CONNECTABLE } GFBGraphNodeError; GType gfbgraph_node_get_type (void) G_GNUC_CONST; GQuark gfbgraph_node_error_quark (void) G_GNUC_CONST; GFBGraphNode* gfbgraph_node_new (void); -GFBGraphNode* gfbgraph_node_new_from_id (GFBGraphAuthorizer *authorizer, const gchar *id, GType node_type, GError **error); +GFBGraphNode* gfbgraph_node_new_from_id (GFBGraphAuthorizer *authorizer, + const gchar *id, + GType node_type, + GError **error); const gchar* gfbgraph_node_get_id (GFBGraphNode *node); const gchar* gfbgraph_node_get_link (GFBGraphNode *node); const gchar* gfbgraph_node_get_created_time (GFBGraphNode *node); const gchar* gfbgraph_node_get_updated_time (GFBGraphNode *node); -void gfbgraph_node_set_id (GFBGraphNode *node, const gchar *id); - -GList* gfbgraph_node_get_connection_nodes (GFBGraphNode *node, - GType node_type, - GFBGraphAuthorizer *authorizer, - GError **error); -void gfbgraph_node_get_connection_nodes_async (GFBGraphNode *node, - GType node_type, - GFBGraphAuthorizer *authorizer, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GList* gfbgraph_node_get_connection_nodes_async_finish (GFBGraphNode *node, - GAsyncResult *result, - GError **error); - -gboolean gfbgraph_node_append_connection (GFBGraphNode *node, GFBGraphNode *connect_node, GFBGraphAuthorizer *authorizer, GError **error); +void gfbgraph_node_set_id (GFBGraphNode *node, + const gchar *id); + +GList* gfbgraph_node_get_connection_nodes (GFBGraphNode *node, + GType node_type, + GFBGraphAuthorizer *authorizer, + GError **error); +void gfbgraph_node_get_connection_nodes_async (GFBGraphNode *node, + GType node_type, + GFBGraphAuthorizer *authorizer, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +GList* gfbgraph_node_get_connection_nodes_async_finish (GFBGraphNode *node, + GAsyncResult *result, + GError **error); +gboolean gfbgraph_node_append_connection (GFBGraphNode *node, + GFBGraphNode *connect_node, + GFBGraphAuthorizer *authorizer, + GError **error); G_END_DECLS diff --git a/gfbgraph/gfbgraph-photo.c b/gfbgraph/gfbgraph-photo.c index 69eb98d..af3cfb6 100644 --- a/gfbgraph/gfbgraph-photo.c +++ b/gfbgraph/gfbgraph-photo.c @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -37,331 +38,353 @@ #include <libsoup/soup-requester.h> enum { - PROP_0, - - PROP_NAME, - PROP_SOURCE, - PROP_HEIGHT, - PROP_WIDTH, - PROP_IMAGES + PROP_0, + PROP_NAME, + PROP_SOURCE, + PROP_HEIGHT, + PROP_WIDTH, + PROP_IMAGES }; struct _GFBGraphPhotoPrivate { - gchar *name; - gchar *source; - guint width; - guint height; - GList *images; - GFBGraphPhotoImage *hires_image; + gchar *name; + gchar *source; + guint width; + guint height; + GList *images; + GFBGraphPhotoImage *hires_image; }; -static void gfbgraph_photo_init (GFBGraphPhoto *obj); -static void gfbgraph_photo_class_init (GFBGraphPhotoClass *klass); -static void gfbgraph_photo_finalize (GObject *obj); -static void gfbgraph_photo_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void gfbgraph_photo_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); - -static void gfbgraph_photo_connectable_iface_init (GFBGraphConnectableInterface *iface); -GHashTable* gfbgraph_photo_get_connection_post_params (GFBGraphConnectable *self, GType node_type); - -static void gfbgraph_photo_serializable_iface_init (JsonSerializableIface *iface); -JsonNode *gfbgraph_photo_serializable_serialize_property (JsonSerializable *serializable, const gchar *property_name, const GValue *value, GParamSpec *pspec); -gboolean gfbgraph_photo_serializable_deserialize_property (JsonSerializable *serializable, const gchar *property_name, GValue *value, GParamSpec *pspec, JsonNode *property_node); -GParamSpec *gfbgraph_photo_serializable_find_property (JsonSerializable *serializable, const char *name); -GParamSpec **gfbgraph_photo_serializable_list_properties (JsonSerializable *serializable, guint *n_pspecs); -void gfbgraph_photo_serializable_set_property (JsonSerializable *serializable, GParamSpec *pspec, const GValue *value); -void gfbgraph_photo_serializable_get_property (JsonSerializable *serializable, GParamSpec *pspec, GValue *value); - -#define GFBGRAPH_PHOTO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), GFBGRAPH_TYPE_PHOTO, GFBGraphPhotoPrivate)) +#define GFBGRAPH_PHOTO_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE((o), GFBGRAPH_TYPE_PHOTO, GFBGraphPhotoPrivate)) static GFBGraphNodeClass *parent_class = NULL; +static void connectable_iface_init (GFBGraphConnectableInterface *iface); +static void serializable_iface_init (JsonSerializableIface *iface); + G_DEFINE_TYPE_WITH_CODE (GFBGraphPhoto, gfbgraph_photo, GFBGRAPH_TYPE_NODE, - G_IMPLEMENT_INTERFACE (GFBGRAPH_TYPE_CONNECTABLE, gfbgraph_photo_connectable_iface_init); - G_IMPLEMENT_INTERFACE (JSON_TYPE_SERIALIZABLE, gfbgraph_photo_serializable_iface_init);); + G_IMPLEMENT_INTERFACE (GFBGRAPH_TYPE_CONNECTABLE, connectable_iface_init); + G_IMPLEMENT_INTERFACE (JSON_TYPE_SERIALIZABLE, serializable_iface_init);); static void -gfbgraph_photo_init (GFBGraphPhoto *obj) +gfbgraph_photo_finalize (GObject *obj) { - obj->priv = GFBGRAPH_PHOTO_GET_PRIVATE(obj); + GList *images; + GFBGraphPhotoImage *photo_image; + GFBGraphPhotoPrivate *priv = GFBGRAPH_PHOTO_GET_PRIVATE (obj); - obj->priv->images = NULL; -} + images = priv->images; + while (images) { + photo_image = (GFBGraphPhotoImage *) images->data; -static void -gfbgraph_photo_class_init (GFBGraphPhotoClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - parent_class = g_type_class_peek_parent (klass); - gobject_class->finalize = gfbgraph_photo_finalize; - gobject_class->set_property = gfbgraph_photo_set_property; - gobject_class->get_property = gfbgraph_photo_get_property; - - g_type_class_add_private (gobject_class, sizeof(GFBGraphPhotoPrivate)); - - /** - * GFBGraphPhoto:name: - * - * The name of the photo given by his owner. - **/ - g_object_class_install_property (gobject_class, - PROP_NAME, - g_param_spec_string ("name", - "The photo name", "The name given by the user to the photo", - "", - G_PARAM_READABLE | G_PARAM_WRITABLE)); - - /** - * GFBGraphPhoto:source: - * - * An URI for the photo, with a maximum width or height of 720px. - **/ - g_object_class_install_property (gobject_class, - PROP_SOURCE, - g_param_spec_string ("source", - "The URI for the photo", "The URI for the photo, with a maximum width or height of 720px", - "", - G_PARAM_READABLE | G_PARAM_WRITABLE)); - - /** - * GFBGraphPhoto:width: - * - * The default photo width, up to 720px. - **/ - g_object_class_install_property (gobject_class, - PROP_WIDTH, - g_param_spec_uint ("width", - "Photo width", "The photo width", - 0, G_MAXUINT, 0, - G_PARAM_READABLE | G_PARAM_WRITABLE)); - - /** - * GFBGraphPhoto:height: - * - * The default photo height, up to 720px. - **/ - g_object_class_install_property (gobject_class, - PROP_HEIGHT, - g_param_spec_uint ("height", - "Photo height", "The photo height", - 0, G_MAXUINT, 0, - G_PARAM_READABLE | G_PARAM_WRITABLE)); - - /** - * GFBGraphPhoto:images: - * - * A list with the available representations of the photo, in differents sizes - **/ - g_object_class_install_property (gobject_class, - PROP_IMAGES, - g_param_spec_pointer ("images", - "Sizes of the photo", "The diffents sizes available of the photo", - G_PARAM_READABLE | G_PARAM_WRITABLE)); -} + g_free (photo_image->source); + g_free (photo_image); -static void -gfbgraph_photo_finalize (GObject *obj) -{ - GFBGraphPhotoPrivate *priv; - GList *images; - GFBGraphPhotoImage *photo_image; - - priv = GFBGRAPH_PHOTO_GET_PRIVATE (obj); + images = g_list_next (images); + } - images = priv->images; - while (images) { - photo_image = (GFBGraphPhotoImage *) images->data; + g_free (priv->name); + g_free (priv->source); + g_list_free (priv->images); - g_free (photo_image->source); - g_free (photo_image); + G_OBJECT_CLASS(parent_class)->finalize (obj); +} - images = g_list_next (images); - } +static void +gfbgraph_photo_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GFBGraphPhotoPrivate *priv = GFBGRAPH_PHOTO_GET_PRIVATE (object); + switch (prop_id) { + case PROP_NAME: + if (priv->name) g_free (priv->name); + priv->name = g_strdup (g_value_get_string (value)); + break; + case PROP_SOURCE: + if (priv->source) g_free (priv->source); - g_list_free (priv->images); - - G_OBJECT_CLASS(parent_class)->finalize (obj); + priv->source = g_strdup (g_value_get_string (value)); + break; + case PROP_WIDTH: + priv->width = g_value_get_uint (value); + break; + case PROP_HEIGHT: + priv->height = g_value_get_uint (value); + break; + case PROP_IMAGES: + /* TODO: Free GList memory with g_list_free_full */ + priv->images = g_value_get_pointer (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -gfbgraph_photo_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +gfbgraph_photo_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) { - GFBGraphPhotoPrivate *priv; - - priv = GFBGRAPH_PHOTO_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_NAME: - if (priv->name) - g_free (priv->name); - priv->name = g_strdup (g_value_get_string (value)); - break; - case PROP_SOURCE: - if (priv->source) - g_free (priv->source); - priv->source = g_strdup (g_value_get_string (value)); - break; - case PROP_WIDTH: - priv->width = g_value_get_uint (value); - break; - case PROP_HEIGHT: - priv->height = g_value_get_uint (value); - break; - case PROP_IMAGES: - /* TODO: Free GList memory with g_list_free_full */ - priv->images = g_value_get_pointer (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + GFBGraphPhotoPrivate *priv = GFBGRAPH_PHOTO_GET_PRIVATE (object); + + switch (prop_id) { + case PROP_NAME: + g_value_set_string (value, priv->name); + break; + case PROP_SOURCE: + g_value_set_string (value, priv->source); + break; + case PROP_WIDTH: + g_value_set_uint (value, priv->width); + break; + case PROP_HEIGHT: + g_value_set_uint (value, priv->height); + break; + case PROP_IMAGES: + g_value_set_pointer (value, priv->images); + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -gfbgraph_photo_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +gfbgraph_photo_init (GFBGraphPhoto *obj) { - GFBGraphPhotoPrivate *priv; - - priv = GFBGRAPH_PHOTO_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_NAME: - g_value_set_string (value, priv->name); - break; - case PROP_SOURCE: - g_value_set_string (value, priv->source); - break; - case PROP_WIDTH: - g_value_set_uint (value, priv->width); - break; - case PROP_HEIGHT: - g_value_set_uint (value, priv->height); - break; - case PROP_IMAGES: - g_value_set_pointer (value, priv->images); - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + obj->priv = GFBGRAPH_PHOTO_GET_PRIVATE(obj); + obj->priv->images = NULL; } static void -gfbgraph_photo_connectable_iface_init (GFBGraphConnectableInterface *iface) +gfbgraph_photo_class_init (GFBGraphPhotoClass *klass) { - GHashTable *connections; - - connections = g_hash_table_new (g_str_hash, g_str_equal); - g_hash_table_insert (connections, (gpointer) g_type_name (GFBGRAPH_TYPE_ALBUM), (gpointer) "photos"); - - iface->connections = connections; - iface->get_connection_post_params = gfbgraph_photo_get_connection_post_params; - iface->parse_connected_data = gfbgraph_connectable_default_parse_connected_data; + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + gobject_class->finalize = gfbgraph_photo_finalize; + gobject_class->set_property = gfbgraph_photo_set_property; + gobject_class->get_property = gfbgraph_photo_get_property; + + g_type_class_add_private (gobject_class, sizeof(GFBGraphPhotoPrivate)); + + /** + * GFBGraphPhoto:name: + * + * The name of the photo given by his owner. + **/ + g_object_class_install_property (gobject_class, + PROP_NAME, + g_param_spec_string ("name", + "The photo name", + "The name given by the user to the photo", + "", + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + /** + * GFBGraphPhoto:source: + * + * An URI for the photo, with a maximum width or height of 720px. + **/ + g_object_class_install_property (gobject_class, + PROP_SOURCE, + g_param_spec_string ("source", + "The URI for the photo", + "The URI for the photo, with a maximum width or height of 720px", + "", + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + /** + * GFBGraphPhoto:width: + * + * The default photo width, up to 720px. + **/ + g_object_class_install_property (gobject_class, + PROP_WIDTH, + g_param_spec_uint ("width", + "Photo width", + "The photo width", + 0, G_MAXUINT, 0, + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + /** + * GFBGraphPhoto:height: + * + * The default photo height, up to 720px. + **/ + g_object_class_install_property (gobject_class, + PROP_HEIGHT, + g_param_spec_uint ("height", + "Photo height", + "The photo height", + 0, G_MAXUINT, 0, + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + /** + * GFBGraphPhoto:images: + * + * A list with the available representations of the photo, in differents sizes + **/ + g_object_class_install_property (gobject_class, + PROP_IMAGES, + g_param_spec_pointer ("images", + "Sizes of the photo", + "The diffents sizes available of the photo", + G_PARAM_READABLE | G_PARAM_WRITABLE)); } -GHashTable* -gfbgraph_photo_get_connection_post_params (GFBGraphConnectable *self, GType node_type) +/* --- Connectable Interface --- */ +GHashTable * +get_connection_post_params (GFBGraphConnectable *self, + GType node_type) { - GHashTable *params; - GFBGraphPhotoPrivate *priv; - - priv = GFBGRAPH_PHOTO_GET_PRIVATE (self); + GHashTable *params; + GFBGraphPhotoPrivate *priv = GFBGRAPH_PHOTO_GET_PRIVATE (self); - params = g_hash_table_new (g_str_hash, g_str_equal); - g_hash_table_insert (params, "message", priv->name); - /* TODO: Incorpate the "source" param (multipart/form-data) */ + params = g_hash_table_new (g_str_hash, g_str_equal); + g_hash_table_insert (params, "message", priv->name); + /* TODO: Incorpate the "source" param (multipart/form-data) */ - return params; + return params; } static void -gfbgraph_photo_serializable_iface_init (JsonSerializableIface *iface) +connectable_iface_init (GFBGraphConnectableInterface *iface) { - iface->serialize_property = gfbgraph_photo_serializable_serialize_property; - iface->deserialize_property = gfbgraph_photo_serializable_deserialize_property; - iface->find_property = gfbgraph_photo_serializable_find_property; - iface->list_properties = gfbgraph_photo_serializable_list_properties; - iface->set_property = gfbgraph_photo_serializable_set_property; - iface->get_property = gfbgraph_photo_serializable_get_property; + GHashTable *connections = g_hash_table_new (g_str_hash, g_str_equal); + + g_hash_table_insert (connections, + (gpointer) g_type_name (GFBGRAPH_TYPE_ALBUM), + (gpointer) "photos"); + + iface->connections = connections; + iface->get_connection_post_params = get_connection_post_params; + iface->parse_connected_data = gfbgraph_connectable_default_parse_connected_data; } -JsonNode * -gfbgraph_photo_serializable_serialize_property (JsonSerializable *serializable, const gchar *property_name, const GValue *value, GParamSpec *pspec) +/* --- Serializable Interface --- */ +static JsonNode * +serializable_serialize_property (JsonSerializable *serializable, + const gchar *property_name, + const GValue *value, + GParamSpec *pspec) { - JsonNode *node = NULL; + JsonNode *node = NULL; - if (g_strcmp0 ("images", property_name) == 0) { - } else { - node = json_serializable_default_serialize_property (serializable, property_name, value, pspec); - } + if (g_strcmp0 ("images", property_name) == 0) { + } else { + node = json_serializable_default_serialize_property (serializable, + property_name, + value, + pspec); + } - return node; + return node; } -gboolean -gfbgraph_photo_serializable_deserialize_property (JsonSerializable *serializable, const gchar *property_name, GValue *value, GParamSpec *pspec, JsonNode *property_node) +static gboolean +serializable_deserialize_property (JsonSerializable *serializable, + const gchar *property_name, + GValue *value, + GParamSpec *pspec, + JsonNode *property_node) { - gboolean res; - - if (g_strcmp0 ("images", property_name) == 0) { - if (JSON_NODE_HOLDS_ARRAY (property_node)) { - guint i, num_images; - JsonArray *jarray; - GList *images; - - images = NULL; - jarray = json_node_get_array (property_node); - num_images = json_array_get_length (jarray); - for (i = 0; i < num_images; i++) { - JsonObject *image_object; - GFBGraphPhotoImage *photo_image; - - image_object = json_array_get_object_element (jarray, i); - photo_image = g_new0 (GFBGraphPhotoImage, 1); - photo_image->width = json_object_get_int_member (image_object, "width"); - photo_image->height = json_object_get_int_member (image_object, "height"); - photo_image->source = g_strdup (json_object_get_string_member (image_object, "source")); - - images = g_list_append (images, photo_image); - } - - g_value_set_pointer (value, (gpointer *) images); - res = TRUE; - } else { - g_warning ("The 'images' node retrieved from the Facebook Graph API isn't an array, it's holding a %s\n", json_node_type_name (property_node)); - res = FALSE; - } - } else { - res = json_serializable_default_deserialize_property (serializable, property_name, value, pspec, property_node); - } - - return res; + gboolean res; + + if (g_strcmp0 ("images", property_name) == 0) { + if (JSON_NODE_HOLDS_ARRAY (property_node)) { + guint i, num_images; + JsonArray *jarray; + GList *images = NULL; + + jarray = json_node_get_array (property_node); + num_images = json_array_get_length (jarray); + for (i = 0; i < num_images; i++) { + JsonObject *image_object; + GFBGraphPhotoImage *photo_image; + + image_object = json_array_get_object_element (jarray, i); + photo_image = g_new0 (GFBGraphPhotoImage, 1); + photo_image->width = json_object_get_int_member (image_object, + "width"); + photo_image->height = json_object_get_int_member (image_object, + "height"); + photo_image->source = g_strdup (json_object_get_string_member (image_object, + "source")); + + images = g_list_append (images, photo_image); + } + + g_value_set_pointer (value, (gpointer *) images); + res = TRUE; + } else { + g_warning ("The 'images' node retrieved from the Facebook Graph API isn't an array," + "it's holding a %s\n", + json_node_type_name (property_node)); + res = FALSE; + } + } else { + res = json_serializable_default_deserialize_property (serializable, + property_name, + value, + pspec, + property_node); + } + + return res; } -GParamSpec* -gfbgraph_photo_serializable_find_property (JsonSerializable *serializable, const char *name) +static GParamSpec * +serializable_find_property (JsonSerializable *serializable, + const char *name) { - return g_object_class_find_property (G_OBJECT_GET_CLASS (GFBGRAPH_PHOTO (serializable)), name); + return g_object_class_find_property (G_OBJECT_GET_CLASS (GFBGRAPH_PHOTO (serializable)), + name); } -GParamSpec** -gfbgraph_photo_serializable_list_properties (JsonSerializable *serializable, guint *n_pspecs) +static GParamSpec** +serializable_list_properties (JsonSerializable *serializable, + guint *n_pspecs) { - return g_object_class_list_properties (G_OBJECT_GET_CLASS (GFBGRAPH_PHOTO (serializable)), n_pspecs); + return g_object_class_list_properties (G_OBJECT_GET_CLASS (GFBGRAPH_PHOTO (serializable)), + n_pspecs); } -void -gfbgraph_photo_serializable_set_property (JsonSerializable *serializable, GParamSpec *pspec, const GValue *value) +static void +serializable_set_property (JsonSerializable *serializable, + GParamSpec *pspec, + const GValue *value) { - g_object_set_property (G_OBJECT (serializable), g_param_spec_get_name (pspec), value); + g_object_set_property (G_OBJECT (serializable), + g_param_spec_get_name (pspec), + value); } -void -gfbgraph_photo_serializable_get_property (JsonSerializable *serializable, GParamSpec *pspec, GValue *value) +static void +serializable_get_property (JsonSerializable *serializable, + GParamSpec *pspec, + GValue *value) { - g_object_get_property (G_OBJECT (serializable), g_param_spec_get_name (pspec), value); + g_object_get_property (G_OBJECT (serializable), + g_param_spec_get_name (pspec), + value); +} + +static void +serializable_iface_init (JsonSerializableIface *iface) +{ + iface->serialize_property = serializable_serialize_property; + iface->deserialize_property = serializable_deserialize_property; + iface->find_property = serializable_find_property; + iface->list_properties = serializable_list_properties; + iface->set_property = serializable_set_property; + iface->get_property = serializable_get_property; } /** @@ -371,10 +394,10 @@ gfbgraph_photo_serializable_get_property (JsonSerializable *serializable, GParam * * Returns: (transfer full): a new #GFBGraphPhoto; unref with g_object_unref() **/ -GFBGraphPhoto* +GFBGraphPhoto * gfbgraph_photo_new (void) { - return GFBGRAPH_PHOTO(g_object_new(GFBGRAPH_TYPE_PHOTO, NULL)); + return GFBGRAPH_PHOTO(g_object_new(GFBGRAPH_TYPE_PHOTO, NULL)); } /** @@ -387,10 +410,15 @@ gfbgraph_photo_new (void) * * Returns: (transfer full): a new #GFBGraphPhoto; unref with g_object_unref() **/ -GFBGraphPhoto* -gfbgraph_photo_new_from_id (GFBGraphAuthorizer *authorizer, const gchar *id, GError **error) +GFBGraphPhoto * +gfbgraph_photo_new_from_id (GFBGraphAuthorizer *authorizer, + const gchar *id, + GError **error) { - return GFBGRAPH_PHOTO (gfbgraph_node_new_from_id (authorizer, id, GFBGRAPH_TYPE_PHOTO, error)); + return GFBGRAPH_PHOTO (gfbgraph_node_new_from_id (authorizer, + id, + GFBGRAPH_TYPE_PHOTO, + error)); } @@ -405,41 +433,45 @@ gfbgraph_photo_new_from_id (GFBGraphAuthorizer *authorizer, const gchar *id, GEr * * Returns: (transfer full): a #GInputStream with the photo content or %NULL in case of error. **/ -GInputStream* -gfbgraph_photo_download_default_size (GFBGraphPhoto *photo, GFBGraphAuthorizer *authorizer, GError **error) +GInputStream * +gfbgraph_photo_download_default_size (GFBGraphPhoto *photo, + GFBGraphAuthorizer *authorizer, + GError **error) { - GInputStream *stream = NULL; - SoupSession *session; - SoupRequester *requester; - SoupRequest *request; - SoupMessage *message; - GFBGraphPhotoPrivate *priv; + GInputStream *stream = NULL; + SoupSession *session; + SoupRequester *requester; + SoupRequest *request; + SoupMessage *message; + GFBGraphPhotoPrivate *priv; - g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); - g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), NULL); + g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); + g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), NULL); - priv = GFBGRAPH_PHOTO_GET_PRIVATE (photo); + priv = GFBGRAPH_PHOTO_GET_PRIVATE (photo); - session = soup_session_sync_new (); - requester = soup_requester_new (); - soup_session_add_feature (session, SOUP_SESSION_FEATURE (requester)); + session = soup_session_sync_new (); + requester = soup_requester_new (); + soup_session_add_feature (session, SOUP_SESSION_FEATURE (requester)); - request = soup_requester_request (requester, priv->source, error); - if (request != NULL) { - message = soup_request_http_get_message (SOUP_REQUEST_HTTP (request)); + request = soup_requester_request (requester, priv->source, error); + if (request != NULL) { + message = soup_request_http_get_message (SOUP_REQUEST_HTTP (request)); - stream = soup_request_send (request, NULL, error); - if (stream != NULL) { - g_object_weak_ref (G_OBJECT (stream), (GWeakNotify) g_object_unref, session); - } + stream = soup_request_send (request, NULL, error); + if (stream != NULL) { + g_object_weak_ref (G_OBJECT (stream), + (GWeakNotify)g_object_unref, + session); + } - g_clear_object (&message); - g_clear_object (&request); - } + g_clear_object (&message); + g_clear_object (&request); + } - g_clear_object (&requester); + g_clear_object (&requester); - return stream; + return stream; } /** @@ -448,12 +480,12 @@ gfbgraph_photo_download_default_size (GFBGraphPhoto *photo, GFBGraphAuthorizer * * * Returns: (transfer none): the @photo name, which is the comment given by the user so it would by larger, or %NULL. **/ -const gchar* +const gchar * gfbgraph_photo_get_name (GFBGraphPhoto *photo) { - g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); + g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); - return photo->priv->name; + return photo->priv->name; } /** @@ -462,12 +494,12 @@ gfbgraph_photo_get_name (GFBGraphPhoto *photo) * * Returns: (transfer none): the image link with a maximun widht or height of 720px **/ -const gchar* +const gchar * gfbgraph_photo_get_default_source_uri (GFBGraphPhoto *photo) { - g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); + g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); - return photo->priv->source; + return photo->priv->source; } /** @@ -479,9 +511,9 @@ gfbgraph_photo_get_default_source_uri (GFBGraphPhoto *photo) guint gfbgraph_photo_get_default_width (GFBGraphPhoto *photo) { - g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), 0); + g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), 0); - return photo->priv->width; + return photo->priv->width; } /** @@ -493,9 +525,9 @@ gfbgraph_photo_get_default_width (GFBGraphPhoto *photo) guint gfbgraph_photo_get_default_height (GFBGraphPhoto *photo) { - g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), 0); + g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), 0); - return photo->priv->height; + return photo->priv->height; } /** @@ -504,12 +536,12 @@ gfbgraph_photo_get_default_height (GFBGraphPhoto *photo) * * Returns: (element-type GFBGraphPhotoImage) (transfer none): a #GList of #GFBGraphPhotoImage with the available photo sizes **/ -GList* +GList * gfbgraph_photo_get_images (GFBGraphPhoto *photo) { - g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); + g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); - return photo->priv->images; + return photo->priv->images; } /** @@ -518,86 +550,83 @@ gfbgraph_photo_get_images (GFBGraphPhoto *photo) * * Returns: (transfer none): a #GFBGraphPhotoImage with the higher resolution available of the photo **/ -const GFBGraphPhotoImage* +const GFBGraphPhotoImage * gfbgraph_photo_get_image_hires (GFBGraphPhoto *photo) { - g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); - - if (photo->priv->hires_image == NULL) { - GList *images_list; - guint bigger_width; - GFBGraphPhotoImage *photo_image; - - bigger_width = 0; - images_list = photo->priv->images; - while (images_list) { - photo_image = (GFBGraphPhotoImage *) images_list->data; - if (photo_image->width > bigger_width) { - photo->priv->hires_image = photo_image; - bigger_width = photo_image->width; - } - - images_list = g_list_next (images_list); - } - } - - return photo->priv->hires_image; + g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); + + if (photo->priv->hires_image == NULL) { + GList *images_list; + guint bigger_width; + GFBGraphPhotoImage *photo_image; + + bigger_width = 0; + images_list = photo->priv->images; + while (images_list) { + photo_image = (GFBGraphPhotoImage *) images_list->data; + if (photo_image->width > bigger_width) { + photo->priv->hires_image = photo_image; + bigger_width = photo_image->width; + } + + images_list = g_list_next (images_list); + } + } + + return photo->priv->hires_image; } -const GFBGraphPhotoImage* -gfbgraph_photo_get_image_near_width (GFBGraphPhoto *photo, guint width) +const GFBGraphPhotoImage * +gfbgraph_photo_get_image_near_width (GFBGraphPhoto *photo, + guint width) { - GList *images_list; - GFBGraphPhotoImage *tmp_photo_image; - GFBGraphPhotoImage *photo_image; - gint tmp_w_dif, w_dif; + GList *images_list; + GFBGraphPhotoImage *tmp_photo_image; + GFBGraphPhotoImage *photo_image = NULL; + gint tmp_w_dif, w_dif; - g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); + g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); - photo_image = NULL; - images_list = photo->priv->images; - while (images_list) { - tmp_photo_image = (GFBGraphPhotoImage *) images_list->data; - tmp_w_dif = tmp_photo_image->width - width; - tmp_w_dif = (tmp_w_dif > 0) ? tmp_w_dif : (tmp_w_dif * -1); + images_list = photo->priv->images; + while (images_list) { + tmp_photo_image = (GFBGraphPhotoImage *) images_list->data; + tmp_w_dif = tmp_photo_image->width - width; + tmp_w_dif = (tmp_w_dif > 0) ? tmp_w_dif : (tmp_w_dif * -1); - if (photo_image == NULL - || tmp_w_dif < w_dif) { - w_dif = tmp_w_dif; - photo_image = tmp_photo_image; - } else { - } + if (photo_image == NULL || tmp_w_dif < w_dif) { + w_dif = tmp_w_dif; + photo_image = tmp_photo_image; + } - images_list = g_list_next (images_list); - } + images_list = g_list_next (images_list); + } - return photo_image; + return photo_image; } -const GFBGraphPhotoImage* -gfbgraph_photo_get_image_near_height (GFBGraphPhoto *photo, guint height) +const GFBGraphPhotoImage * +gfbgraph_photo_get_image_near_height (GFBGraphPhoto *photo, + guint height) { - GList *images_list; - GFBGraphPhotoImage *tmp_photo_image; - GFBGraphPhotoImage *photo_image; - gint tmp_h_dif, h_dif; + GList *images_list; + GFBGraphPhotoImage *tmp_photo_image; + GFBGraphPhotoImage *photo_image = NULL; + gint tmp_h_dif, h_dif; - g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); + g_return_val_if_fail (GFBGRAPH_IS_PHOTO (photo), NULL); - photo_image = NULL; - images_list = photo->priv->images; - while (images_list) { - tmp_photo_image = (GFBGraphPhotoImage *) images_list->data; - tmp_h_dif = ABS(tmp_photo_image->height - height); + images_list = photo->priv->images; + while (images_list) { + tmp_photo_image = (GFBGraphPhotoImage *) images_list->data; + tmp_h_dif = ABS(tmp_photo_image->height - height); - if (photo_image == NULL - || tmp_h_dif < h_dif) { - h_dif = tmp_h_dif; - photo_image = tmp_photo_image; - } + if (photo_image == NULL || tmp_h_dif < h_dif) { + h_dif = tmp_h_dif; + photo_image = tmp_photo_image; + } - images_list = g_list_next (images_list); - } + images_list = g_list_next (images_list); + } - return photo_image; + return photo_image; } diff --git a/gfbgraph/gfbgraph-photo.h b/gfbgraph/gfbgraph-photo.h index 15932e7..5b947d8 100644 --- a/gfbgraph/gfbgraph-photo.h +++ b/gfbgraph/gfbgraph-photo.h @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,12 +26,17 @@ G_BEGIN_DECLS -#define GFBGRAPH_TYPE_PHOTO (gfbgraph_photo_get_type()) -#define GFBGRAPH_PHOTO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GFBGRAPH_TYPE_PHOTO,GFBGraphPhoto)) -#define GFBGRAPH_PHOTO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GFBGRAPH_TYPE_PHOTO,GFBGraphPhotoClass)) -#define GFBGRAPH_IS_PHOTO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GFBGRAPH_TYPE_PHOTO)) -#define GFBGRAPH_IS_PHOTO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GFBGRAPH_TYPE_PHOTO)) -#define GFBGRAPH_PHOTO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GFBGRAPH_TYPE_PHOTO,GFBGraphPhotoClass)) +#define GFBGRAPH_TYPE_PHOTO (gfbgraph_photo_get_type()) +#define GFBGRAPH_PHOTO(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GFBGRAPH_TYPE_PHOTO,GFBGraphPhoto)) +#define GFBGRAPH_PHOTO_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GFBGRAPH_TYPE_PHOTO,GFBGraphPhotoClass)) +#define GFBGRAPH_IS_PHOTO(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GFBGRAPH_TYPE_PHOTO)) +#define GFBGRAPH_IS_PHOTO_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GFBGRAPH_TYPE_PHOTO)) +#define GFBGRAPH_PHOTO_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj),GFBGRAPH_TYPE_PHOTO,GFBGraphPhotoClass)) typedef struct _GFBGraphPhoto GFBGraphPhoto; typedef struct _GFBGraphPhotoClass GFBGraphPhotoClass; @@ -39,14 +45,14 @@ typedef struct _GFBGraphPhotoPrivate GFBGraphPhotoPrivate; G_DEFINE_AUTOPTR_CLEANUP_FUNC (GFBGraphPhoto, g_object_unref) struct _GFBGraphPhoto { - GFBGraphNode parent; + GFBGraphNode parent; - /*< private >*/ - GFBGraphPhotoPrivate *priv; + /*< private >*/ + GFBGraphPhotoPrivate *priv; }; struct _GFBGraphPhotoClass { - GFBGraphNodeClass parent_class; + GFBGraphNodeClass parent_class; }; typedef struct _GFBGraphPhotoImage GFBGraphPhotoImage; @@ -57,15 +63,19 @@ typedef struct _GFBGraphPhotoImage GFBGraphPhotoImage; * An struct with the information of a image. */ struct _GFBGraphPhotoImage { - guint width; - guint height; - gchar *source; + guint width; + guint height; + gchar *source; }; GType gfbgraph_photo_get_type (void) G_GNUC_CONST; GFBGraphPhoto* gfbgraph_photo_new (void); -GFBGraphPhoto* gfbgraph_photo_new_from_id (GFBGraphAuthorizer *authorizer, const gchar *id, GError **error); -GInputStream* gfbgraph_photo_download_default_size (GFBGraphPhoto *photo, GFBGraphAuthorizer *authorizer, GError **error); +GFBGraphPhoto* gfbgraph_photo_new_from_id (GFBGraphAuthorizer *authorizer, + const gchar *id, + GError **error); +GInputStream* gfbgraph_photo_download_default_size (GFBGraphPhoto *photo, + GFBGraphAuthorizer *authorizer, + GError **error); const gchar* gfbgraph_photo_get_name (GFBGraphPhoto *photo); const gchar* gfbgraph_photo_get_default_source_uri (GFBGraphPhoto *photo); @@ -73,8 +83,10 @@ guint gfbgraph_photo_get_default_width (GFBGraphPhoto *photo) guint gfbgraph_photo_get_default_height (GFBGraphPhoto *photo); GList* gfbgraph_photo_get_images (GFBGraphPhoto *photo); const GFBGraphPhotoImage* gfbgraph_photo_get_image_hires (GFBGraphPhoto *photo); -const GFBGraphPhotoImage* gfbgraph_photo_get_image_near_width (GFBGraphPhoto *photo, guint width); -const GFBGraphPhotoImage* gfbgraph_photo_get_image_near_height (GFBGraphPhoto *photo, guint height); +const GFBGraphPhotoImage* gfbgraph_photo_get_image_near_width (GFBGraphPhoto *photo, + guint width); +const GFBGraphPhotoImage* gfbgraph_photo_get_image_near_height (GFBGraphPhoto *photo, + guint height); G_END_DECLS diff --git a/gfbgraph/gfbgraph-simple-authorizer.c b/gfbgraph/gfbgraph-simple-authorizer.c index 6e503c4..31202b2 100644 --- a/gfbgraph/gfbgraph-simple-authorizer.c +++ b/gfbgraph/gfbgraph-simple-authorizer.c @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -33,162 +34,155 @@ enum { - PROP_0, - - PROP_ACCESS_TOKEN + PROP_0, + PROP_ACCESS_TOKEN }; struct _GFBGraphSimpleAuthorizerPrivate { - GMutex mutex; - gchar *access_token; + GMutex mutex; + gchar *access_token; }; -static void gfbgraph_simple_authorizer_init (GFBGraphSimpleAuthorizer *obj); -static void gfbgraph_simple_authorizer_class_init (GFBGraphSimpleAuthorizerClass *klass); -static void gfbgraph_simple_authorizer_finalize (GObject *obj); -static void gfbgraph_simple_authorizer_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void gfbgraph_simple_authorizer_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); - -static void gfbgraph_simple_authorizer_iface_init (GFBGraphAuthorizerInterface *iface); - -void gfbgraph_simple_authorizer_process_call (GFBGraphAuthorizer *iface, RestProxyCall *call); -void gfbgraph_simple_authorizer_process_message (GFBGraphAuthorizer *iface, SoupMessage *message); -gboolean gfbgraph_simple_authorizer_refresh_authorization (GFBGraphAuthorizer *iface, GCancellable *cancellable, GError **error); - -#define GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), GFBGRAPH_TYPE_SIMPLE_AUTHORIZER, GFBGraphSimpleAuthorizerPrivate)) +#define GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE((o), GFBGRAPH_TYPE_SIMPLE_AUTHORIZER, GFBGraphSimpleAuthorizerPrivate)) static GObjectClass *parent_class = NULL; -G_DEFINE_TYPE_WITH_CODE (GFBGraphSimpleAuthorizer, gfbgraph_simple_authorizer, G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (GFBGRAPH_TYPE_AUTHORIZER, gfbgraph_simple_authorizer_iface_init)); +static void authorizer_iface_init (GFBGraphAuthorizerInterface *iface); +G_DEFINE_TYPE_WITH_CODE (GFBGraphSimpleAuthorizer, gfbgraph_simple_authorizer, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (GFBGRAPH_TYPE_AUTHORIZER, authorizer_iface_init)); static void -gfbgraph_simple_authorizer_init (GFBGraphSimpleAuthorizer *obj) +gfbgraph_simple_authorizer_finalize (GObject *obj) { - obj->priv = GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE(obj); - g_mutex_init (&obj->priv->mutex); -} + GFBGraphSimpleAuthorizerPrivate *priv = GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE (obj); -static void -gfbgraph_simple_authorizer_class_init (GFBGraphSimpleAuthorizerClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - parent_class = g_type_class_peek_parent (klass); - gobject_class->finalize = gfbgraph_simple_authorizer_finalize; - gobject_class->set_property = gfbgraph_simple_authorizer_set_property; - gobject_class->get_property = gfbgraph_simple_authorizer_get_property; - - g_type_class_add_private (gobject_class, sizeof(GFBGraphSimpleAuthorizerPrivate)); - - /** - * GFBGraphSimpleAuthorizer:access_token: - * - * The access token for the Facebook Graph API, normally, take it by hand in the - * Graph API explorer tool: https://developers.facebook.com/tools/explorer. - **/ - g_object_class_install_property (gobject_class, - PROP_ACCESS_TOKEN, - g_param_spec_string ("access-token", - "The access token", "The access token for the Facebook Graph API.", - "", - G_PARAM_READABLE | G_PARAM_WRITABLE)); + g_free (priv->access_token); + g_mutex_clear (&priv->mutex); + + G_OBJECT_CLASS(parent_class)->finalize (obj); } static void -gfbgraph_simple_authorizer_finalize (GObject *obj) +gfbgraph_simple_authorizer_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) { - GFBGraphSimpleAuthorizerPrivate *priv; - - priv = GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE (obj); + GFBGraphSimpleAuthorizerPrivate *priv = GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE (object); + switch (prop_id) { + case PROP_ACCESS_TOKEN: + if (priv->access_token) g_free (priv->access_token); - g_mutex_clear (&priv->mutex); - - G_OBJECT_CLASS(parent_class)->finalize (obj); + priv->access_token = g_strdup (g_value_get_string (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -gfbgraph_simple_authorizer_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +gfbgraph_simple_authorizer_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) { - GFBGraphSimpleAuthorizerPrivate *priv; - - priv = GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_ACCESS_TOKEN: - if (priv->access_token) - g_free (priv->access_token); - priv->access_token = g_strdup (g_value_get_string (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + GFBGraphSimpleAuthorizerPrivate *priv = GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE (object); + + switch (prop_id) { + case PROP_ACCESS_TOKEN: + g_value_set_string (value, priv->access_token); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -gfbgraph_simple_authorizer_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +gfbgraph_simple_authorizer_init (GFBGraphSimpleAuthorizer *obj) { - GFBGraphSimpleAuthorizerPrivate *priv; - - priv = GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_ACCESS_TOKEN: - g_value_set_string (value, priv->access_token); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + obj->priv = GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE(obj); + g_mutex_init (&obj->priv->mutex); } static void -gfbgraph_simple_authorizer_iface_init (GFBGraphAuthorizerInterface *iface) +gfbgraph_simple_authorizer_class_init (GFBGraphSimpleAuthorizerClass *klass) { - iface->process_call = gfbgraph_simple_authorizer_process_call; - iface->process_message = gfbgraph_simple_authorizer_process_message; - iface->refresh_authorization = gfbgraph_simple_authorizer_refresh_authorization; + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + gobject_class->finalize = gfbgraph_simple_authorizer_finalize; + gobject_class->set_property = gfbgraph_simple_authorizer_set_property; + gobject_class->get_property = gfbgraph_simple_authorizer_get_property; + + g_type_class_add_private (gobject_class, sizeof(GFBGraphSimpleAuthorizerPrivate)); + + /** + * GFBGraphSimpleAuthorizer:access_token: + * + * The access token for the Facebook Graph API, normally, take it by hand in the + * Graph API explorer tool: https://developers.facebook.com/tools/explorer. + **/ + g_object_class_install_property (gobject_class, + PROP_ACCESS_TOKEN, + g_param_spec_string ("access-token", + "The access token", + "The access token for the Facebook Graph API.", + "", + G_PARAM_READABLE | G_PARAM_WRITABLE)); } -void -gfbgraph_simple_authorizer_process_call (GFBGraphAuthorizer *iface, RestProxyCall *call) +/* --- Authorizer Interface --- */ +static void +process_call (GFBGraphAuthorizer *iface, + RestProxyCall *call) { - GFBGraphSimpleAuthorizerPrivate *priv; - - priv = GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE (GFBGRAPH_SIMPLE_AUTHORIZER (iface)); + GFBGraphSimpleAuthorizerPrivate *priv; + priv = GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE (GFBGRAPH_SIMPLE_AUTHORIZER (iface)); - g_mutex_lock (&priv->mutex); - rest_proxy_call_add_param (call, "access_token", priv->access_token); - g_mutex_unlock (&priv->mutex); + g_mutex_lock (&priv->mutex); + rest_proxy_call_add_param (call, "access_token", priv->access_token); + g_mutex_unlock (&priv->mutex); } -void -gfbgraph_simple_authorizer_process_message (GFBGraphAuthorizer *iface, SoupMessage *message) +static void +process_message (GFBGraphAuthorizer *iface, + SoupMessage *message) { - gchar *auth_value; - SoupURI *uri; - GFBGraphSimpleAuthorizerPrivate *priv; + gchar *auth_value; + SoupURI *uri; + GFBGraphSimpleAuthorizerPrivate *priv; + priv = GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE (GFBGRAPH_SIMPLE_AUTHORIZER (iface)); - priv = GFBGRAPH_SIMPLE_AUTHORIZER_GET_PRIVATE (GFBGRAPH_SIMPLE_AUTHORIZER (iface)); + g_mutex_lock (&priv->mutex); - g_mutex_lock (&priv->mutex); + uri = soup_message_get_uri (message); + auth_value = g_strconcat ("access_token=", priv->access_token, NULL); + soup_uri_set_query (uri, auth_value); - uri = soup_message_get_uri (message); - auth_value = g_strconcat ("access_token=", priv->access_token, NULL); - soup_uri_set_query (uri, auth_value); + g_free (auth_value); - g_free (auth_value); + g_mutex_unlock (&priv->mutex); +} - g_mutex_unlock (&priv->mutex); +static gboolean +refresh_authorization (GFBGraphAuthorizer *iface, + GCancellable *cancellable, + GError **error) +{ + return FALSE; } -gboolean -gfbgraph_simple_authorizer_refresh_authorization (GFBGraphAuthorizer *iface, GCancellable *cancellable, GError **error) +static void +authorizer_iface_init (GFBGraphAuthorizerInterface *iface) { - return FALSE; + iface->process_call = process_call; + iface->process_message = process_message; + iface->refresh_authorization = refresh_authorization; } /** @@ -200,10 +194,12 @@ gfbgraph_simple_authorizer_refresh_authorization (GFBGraphAuthorizer *iface, GCa * * Returns: (transfer full): a #GFBGraphSimpleAuthorizer. **/ -GFBGraphSimpleAuthorizer* +GFBGraphSimpleAuthorizer * gfbgraph_simple_authorizer_new (const gchar *access_token) { - g_return_val_if_fail (access_token != NULL, NULL); + g_return_val_if_fail (access_token != NULL, NULL); - return GFBGRAPH_SIMPLE_AUTHORIZER (g_object_new (GFBGRAPH_TYPE_SIMPLE_AUTHORIZER, "access-token", access_token, NULL)); + return GFBGRAPH_SIMPLE_AUTHORIZER (g_object_new (GFBGRAPH_TYPE_SIMPLE_AUTHORIZER, + "access-token", access_token, + NULL)); } diff --git a/gfbgraph/gfbgraph-simple-authorizer.h b/gfbgraph/gfbgraph-simple-authorizer.h index e2ceac3..56b9cad 100644 --- a/gfbgraph/gfbgraph-simple-authorizer.h +++ b/gfbgraph/gfbgraph-simple-authorizer.h @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -24,26 +25,31 @@ G_BEGIN_DECLS -#define GFBGRAPH_TYPE_SIMPLE_AUTHORIZER (gfbgraph_simple_authorizer_get_type()) -#define GFBGRAPH_SIMPLE_AUTHORIZER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GFBGRAPH_TYPE_SIMPLE_AUTHORIZER,GFBGraphSimpleAuthorizer)) -#define GFBGRAPH_SIMPLE_AUTHORIZER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GFBGRAPH_TYPE_SIMPLE_AUTHORIZER,GFBGraphSimpleAuthorizerClass)) -#define GFBGRAPH_IS_SIMPLE_AUTHORIZER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GFBGRAPH_TYPE_SIMPLE_AUTHORIZER)) -#define GFBGRAPH_IS_SIMPLE_AUTHORIZER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GFBGRAPH_TYPE_SIMPLE_AUTHORIZER)) -#define GFBGRAPH_SIMPLE_AUTHORIZER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GFBGRAPH_TYPE_SIMPLE_AUTHORIZER,GFBGraphSimpleAuthorizerClass)) +#define GFBGRAPH_TYPE_SIMPLE_AUTHORIZER (gfbgraph_simple_authorizer_get_type()) +#define GFBGRAPH_SIMPLE_AUTHORIZER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GFBGRAPH_TYPE_SIMPLE_AUTHORIZER,GFBGraphSimpleAuthorizer)) +#define GFBGRAPH_SIMPLE_AUTHORIZER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GFBGRAPH_TYPE_SIMPLE_AUTHORIZER,GFBGraphSimpleAuthorizerClass)) +#define GFBGRAPH_IS_SIMPLE_AUTHORIZER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GFBGRAPH_TYPE_SIMPLE_AUTHORIZER)) +#define GFBGRAPH_IS_SIMPLE_AUTHORIZER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GFBGRAPH_TYPE_SIMPLE_AUTHORIZER)) +#define GFBGRAPH_SIMPLE_AUTHORIZER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj),GFBGRAPH_TYPE_SIMPLE_AUTHORIZER,GFBGraphSimpleAuthorizerClass)) typedef struct _GFBGraphSimpleAuthorizer GFBGraphSimpleAuthorizer; typedef struct _GFBGraphSimpleAuthorizerClass GFBGraphSimpleAuthorizerClass; typedef struct _GFBGraphSimpleAuthorizerPrivate GFBGraphSimpleAuthorizerPrivate; struct _GFBGraphSimpleAuthorizer { - GObject parent; + GObject parent; - /*< private >*/ - GFBGraphSimpleAuthorizerPrivate *priv; + /*< private >*/ + GFBGraphSimpleAuthorizerPrivate *priv; }; struct _GFBGraphSimpleAuthorizerClass { - GObjectClass parent_class; + GObjectClass parent_class; }; GType gfbgraph_simple_authorizer_get_type (void) G_GNUC_CONST; diff --git a/gfbgraph/gfbgraph-user.c b/gfbgraph/gfbgraph-user.c index 92b43b2..4a85f65 100644 --- a/gfbgraph/gfbgraph-user.c +++ b/gfbgraph/gfbgraph-user.c @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013-2014 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -36,178 +37,177 @@ #define ME_FUNCTION "me" enum { - PROP_0, - - PROP_NAME, - PROP_EMAIL + PROP_0, + PROP_NAME, + PROP_EMAIL }; struct _GFBGraphUserPrivate { - gchar *name; - gchar *email; + gchar *name; + gchar *email; }; typedef struct { - GFBGraphUser *user; + GFBGraphUser *user; } GFBGraphUserAsyncData; typedef struct { - GFBGraphAuthorizer *authorizer; - GList *nodes; + GFBGraphAuthorizer *authorizer; + GList *nodes; } GFBGraphUserConnectionAsyncData; -static void gfbgraph_user_init (GFBGraphUser *object); -static void gfbgraph_user_class_init (GFBGraphUserClass *klass); -static void gfbgraph_user_finalize (GObject *object); -static void gfbgraph_user_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void gfbgraph_user_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); - -/* Private functions */ -static void gfbgraph_user_async_data_free (GFBGraphUserAsyncData *data); -static void gfbgraph_user_connection_async_data_free (GFBGraphUserConnectionAsyncData *data); -static void gfbgraph_user_get_me_async_thread (GSimpleAsyncResult *simple_async, GFBGraphAuthorizer *authorizer, GCancellable cancellable); -static void gfbgraph_user_get_albums_async_thread (GSimpleAsyncResult *simple_async, GFBGraphUser *user, GCancellable cancellable); - -#define GFBGRAPH_USER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), GFBGRAPH_TYPE_USER, GFBGraphUserPrivate)) +#define GFBGRAPH_USER_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE((o), GFBGRAPH_TYPE_USER, GFBGraphUserPrivate)) static GFBGraphNodeClass *parent_class = NULL; G_DEFINE_TYPE (GFBGraphUser, gfbgraph_user, GFBGRAPH_TYPE_NODE); static void -gfbgraph_user_init (GFBGraphUser *object) +gfbgraph_user_finalize (GObject *object) { - object->priv = GFBGRAPH_USER_GET_PRIVATE (object); -} + GFBGraphUserPrivate *priv = GFBGRAPH_USER_GET_PRIVATE (object); -static void -gfbgraph_user_class_init (GFBGraphUserClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - parent_class = g_type_class_peek_parent (klass); - gobject_class->finalize = gfbgraph_user_finalize; - gobject_class->set_property = gfbgraph_user_set_property; - gobject_class->get_property = gfbgraph_user_get_property; - - g_type_class_add_private (gobject_class, sizeof(GFBGraphUserPrivate)); - - /** - * GFBGraphUser:name: - * - * The full name of the user - **/ - g_object_class_install_property (gobject_class, - PROP_NAME, - g_param_spec_string ("name", - "User's full name", "The full name of the user", - "", - G_PARAM_READABLE | G_PARAM_WRITABLE)); - - /** - * GFBGraphUser:email: - * - * The email of the user if available - **/ - g_object_class_install_property (gobject_class, - PROP_EMAIL, - g_param_spec_string ("email", - "User's email", "The user primary email if available", - NULL, - G_PARAM_READABLE | G_PARAM_WRITABLE)); + g_free (priv->name); + g_free (priv->email); + + G_OBJECT_CLASS(parent_class)->finalize (object); } static void -gfbgraph_user_finalize (GObject *object) +gfbgraph_user_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) { - GFBGraphUserPrivate *priv = GFBGRAPH_USER_GET_PRIVATE (object); + GFBGraphUserPrivate *priv = GFBGRAPH_USER_GET_PRIVATE (object); + switch (prop_id) { + case PROP_NAME: + if (priv->name) g_free (priv->name); + priv->name = g_strdup (g_value_get_string (value)); + break; + case PROP_EMAIL: + if (priv->email) g_free (priv->email); + priv->email = g_strdup (g_value_get_string (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} - G_OBJECT_CLASS(parent_class)->finalize (object); +static void +gfbgraph_user_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GFBGraphUserPrivate *priv = GFBGRAPH_USER_GET_PRIVATE (object); + + switch (prop_id) { + case PROP_NAME: + g_value_set_string (value, priv->name); + break; + case PROP_EMAIL: + g_value_set_string (value, priv->email); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -gfbgraph_user_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +gfbgraph_user_init (GFBGraphUser *object) { - GFBGraphUserPrivate *priv = GFBGRAPH_USER_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_NAME: - if (priv->name) - g_free (priv->name); - priv->name = g_strdup (g_value_get_string (value)); - break; - case PROP_EMAIL: - if (priv->email) - g_free (priv->email); - priv->email = g_strdup (g_value_get_string (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + object->priv = GFBGRAPH_USER_GET_PRIVATE (object); } static void -gfbgraph_user_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +gfbgraph_user_class_init (GFBGraphUserClass *klass) { - GFBGraphUserPrivate *priv = GFBGRAPH_USER_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_NAME: - g_value_set_string (value, priv->name); - break; - case PROP_EMAIL: - g_value_set_string (value, priv->email); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + gobject_class->finalize = gfbgraph_user_finalize; + gobject_class->set_property = gfbgraph_user_set_property; + gobject_class->get_property = gfbgraph_user_get_property; + + g_type_class_add_private (gobject_class, sizeof(GFBGraphUserPrivate)); + + /** + * GFBGraphUser:name: + * + * The full name of the user + **/ + g_object_class_install_property (gobject_class, + PROP_NAME, + g_param_spec_string ("name", + "User's full name", + "The full name of the user", + "", + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + /** + * GFBGraphUser:email: + * + * The email of the user if available + **/ + g_object_class_install_property (gobject_class, + PROP_EMAIL, + g_param_spec_string ("email", + "User's email", + "The user primary email if available", + NULL, + G_PARAM_READABLE | G_PARAM_WRITABLE)); } +/* --- Private Functions --- */ static void -gfbgraph_user_async_data_free (GFBGraphUserAsyncData *data) +async_data_free (GFBGraphUserAsyncData *data) { - g_object_unref (data->user); + g_object_unref (data->user); - g_slice_free (GFBGraphUserAsyncData, data); + g_slice_free (GFBGraphUserAsyncData, data); } static void -gfbgraph_user_connection_async_data_free (GFBGraphUserConnectionAsyncData *data) +connection_async_data_free (GFBGraphUserConnectionAsyncData *data) { - g_object_unref (data->authorizer); + g_object_unref (data->authorizer); - g_slice_free (GFBGraphUserConnectionAsyncData, data); + g_slice_free (GFBGraphUserConnectionAsyncData, data); } static void -gfbgraph_user_get_me_async_thread (GSimpleAsyncResult *simple_async, GFBGraphAuthorizer *authorizer, GCancellable cancellable) +get_me_async_thread (GSimpleAsyncResult *simple_async, + GFBGraphAuthorizer *authorizer, + GCancellable cancellable) { - GFBGraphUserAsyncData *data; - GError *error = NULL; + GFBGraphUserAsyncData *data; + GError *error = NULL; - data = (GFBGraphUserAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async); - - data->user = gfbgraph_user_get_me (authorizer, &error); - if (error != NULL) - g_simple_async_result_take_error (simple_async, error); + data = (GFBGraphUserAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async); + data->user = gfbgraph_user_get_me (authorizer, &error); + if (error != NULL) + g_simple_async_result_take_error (simple_async, error); } static void -gfbgraph_user_get_albums_async_thread (GSimpleAsyncResult *simple_async, GFBGraphUser *user, GCancellable cancellable) +get_albums_async_thread (GSimpleAsyncResult *simple_async, + GFBGraphUser *user, + GCancellable cancellable) { - GFBGraphUserConnectionAsyncData *data; - GError *error = NULL; - - data = (GFBGraphUserConnectionAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async); + GFBGraphUserConnectionAsyncData *data; + GError *error = NULL; - data->nodes = gfbgraph_user_get_albums (user, data->authorizer, &error); - if (error != NULL) - g_simple_async_result_take_error (simple_async, error); + data = (GFBGraphUserConnectionAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async); + data->nodes = gfbgraph_user_get_albums (user, data->authorizer, &error); + if (error != NULL) + g_simple_async_result_take_error (simple_async, error); } /** @@ -217,10 +217,10 @@ gfbgraph_user_get_albums_async_thread (GSimpleAsyncResult *simple_async, GFBGrap * * Returns: a new #GFBGraphUser; unref with g_object_unref() **/ -GFBGraphUser* +GFBGraphUser * gfbgraph_user_new (void) { - return GFBGRAPH_USER (g_object_new (GFBGRAPH_TYPE_USER, NULL)); + return GFBGRAPH_USER (g_object_new (GFBGRAPH_TYPE_USER, NULL)); } /** @@ -233,10 +233,15 @@ gfbgraph_user_new (void) * * Returns: (transfer full): a new #GFBGraphUser; unref with g_object_unref() **/ -GFBGraphUser* -gfbgraph_user_new_from_id (GFBGraphAuthorizer *authorizer, const gchar *id, GError **error) +GFBGraphUser * +gfbgraph_user_new_from_id (GFBGraphAuthorizer *authorizer, + const gchar *id, + GError **error) { - return GFBGRAPH_USER (gfbgraph_node_new_from_id (authorizer, id, GFBGRAPH_TYPE_USER, error)); + return GFBGRAPH_USER (gfbgraph_node_new_from_id (authorizer, + id, + GFBGRAPH_TYPE_USER, + error)); } /** @@ -249,38 +254,39 @@ gfbgraph_user_new_from_id (GFBGraphAuthorizer *authorizer, const gchar *id, GErr * * Returns: (transfer full): a #GFBGraphUser with the current user information. **/ -GFBGraphUser* -gfbgraph_user_get_me (GFBGraphAuthorizer *authorizer, GError **error) +GFBGraphUser * +gfbgraph_user_get_me (GFBGraphAuthorizer *authorizer, + GError **error) { - GFBGraphUser *me = NULL; - RestProxyCall *rest_call; - const gchar *payload; - gboolean result; - - g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), NULL); - - rest_call = gfbgraph_new_rest_call (authorizer); - rest_proxy_call_set_function (rest_call, ME_FUNCTION); - rest_proxy_call_set_method (rest_call, "GET"); - rest_proxy_call_add_param (rest_call, "fields", "name,email"); - - result = rest_proxy_call_sync (rest_call, error); - if (result) { - JsonParser *parser; - JsonNode *node; - - payload = rest_proxy_call_get_payload (rest_call); - parser = json_parser_new (); - if (json_parser_load_from_data (parser, payload, -1, error)) { - node = json_parser_get_root (parser); - me = GFBGRAPH_USER (json_gobject_deserialize (GFBGRAPH_TYPE_USER, node)); - } - - g_object_unref (parser); - } - g_object_unref (rest_call); - - return me; + GFBGraphUser *me = NULL; + RestProxyCall *rest_call; + const gchar *payload; + gboolean result; + + g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), NULL); + + rest_call = gfbgraph_new_rest_call (authorizer); + rest_proxy_call_set_function (rest_call, ME_FUNCTION); + rest_proxy_call_set_method (rest_call, "GET"); + rest_proxy_call_add_param (rest_call, "fields", "name,email"); + + result = rest_proxy_call_sync (rest_call, error); + if (result) { + JsonParser *parser; + JsonNode *node; + + payload = rest_proxy_call_get_payload (rest_call); + parser = json_parser_new (); + if (json_parser_load_from_data (parser, payload, -1, error)) { + node = json_parser_get_root (parser); + me = GFBGRAPH_USER (json_gobject_deserialize (GFBGRAPH_TYPE_USER, node)); + } + + g_object_unref (parser); + } + g_object_unref (rest_call); + + return me; } /** @@ -297,25 +303,36 @@ gfbgraph_user_get_me (GFBGraphAuthorizer *authorizer, GError **error) * to get the #GFBGraphUser for to the current user logged. **/ void -gfbgraph_user_get_me_async (GFBGraphAuthorizer *authorizer, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) +gfbgraph_user_get_me_async (GFBGraphAuthorizer *authorizer, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { - GSimpleAsyncResult *simple_async; - GFBGraphUserAsyncData *data; - - g_return_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer)); - g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); - g_return_if_fail (callback != NULL); - - simple_async = g_simple_async_result_new (G_OBJECT (authorizer), callback, user_data, gfbgraph_user_get_me_async); - g_simple_async_result_set_check_cancellable (simple_async, cancellable); - - data = g_slice_new (GFBGraphUserAsyncData); - data->user = NULL; - - g_simple_async_result_set_op_res_gpointer (simple_async, data, (GDestroyNotify) gfbgraph_user_async_data_free); - g_simple_async_result_run_in_thread (simple_async, (GSimpleAsyncThreadFunc) gfbgraph_user_get_me_async_thread, G_PRIORITY_DEFAULT, cancellable); - - g_object_unref (simple_async); + GSimpleAsyncResult *simple_async; + GFBGraphUserAsyncData *data; + + g_return_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer)); + g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); + g_return_if_fail (callback != NULL); + + simple_async = g_simple_async_result_new (G_OBJECT (authorizer), + callback, + user_data, + gfbgraph_user_get_me_async); + g_simple_async_result_set_check_cancellable (simple_async, cancellable); + + data = g_slice_new (GFBGraphUserAsyncData); + data->user = NULL; + + g_simple_async_result_set_op_res_gpointer (simple_async, + data, + (GDestroyNotify)async_data_free); + g_simple_async_result_run_in_thread (simple_async, + (GSimpleAsyncThreadFunc)get_me_async_thread, + G_PRIORITY_DEFAULT, + cancellable); + + g_object_unref (simple_async); } /** @@ -329,22 +346,27 @@ gfbgraph_user_get_me_async (GFBGraphAuthorizer *authorizer, GCancellable *cancel * * Returns: (transfer full): a #GFBGraphUser for to the current user logged. **/ -GFBGraphUser* -gfbgraph_user_get_me_async_finish (GFBGraphAuthorizer *authorizer, GAsyncResult *result, GError **error) +GFBGraphUser * +gfbgraph_user_get_me_async_finish (GFBGraphAuthorizer *authorizer, + GAsyncResult *result, + GError **error) { - GSimpleAsyncResult *simple_async; - GFBGraphUserAsyncData *data; + GSimpleAsyncResult *simple_async; + GFBGraphUserAsyncData *data; - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (authorizer), gfbgraph_user_get_me_async), NULL); - g_return_val_if_fail (error == NULL || *error == NULL, NULL); + g_return_val_if_fail (g_simple_async_result_is_valid (result, + G_OBJECT (authorizer), + gfbgraph_user_get_me_async), + NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); - simple_async = G_SIMPLE_ASYNC_RESULT (result); + simple_async = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (simple_async, error)) - return NULL; + if (g_simple_async_result_propagate_error (simple_async, error)) + return NULL; - data = (GFBGraphUserAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async); - return data->user; + data = (GFBGraphUserAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async); + return data->user; } /** @@ -357,13 +379,18 @@ gfbgraph_user_get_me_async_finish (GFBGraphAuthorizer *authorizer, GAsyncResult * * Returns: (element-type GFBGraphAlbum) (transfer full): a newly-allocated #GList with the albums nodes owned by the given user. **/ -GList* -gfbgraph_user_get_albums (GFBGraphUser *user, GFBGraphAuthorizer *authorizer, GError **error) +GList * +gfbgraph_user_get_albums (GFBGraphUser *user, + GFBGraphAuthorizer *authorizer, + GError **error) { - g_return_val_if_fail (GFBGRAPH_IS_USER (user), NULL); - g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), NULL); + g_return_val_if_fail (GFBGRAPH_IS_USER (user), NULL); + g_return_val_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer), NULL); - return gfbgraph_node_get_connection_nodes (GFBGRAPH_NODE (user), GFBGRAPH_TYPE_ALBUM, authorizer, error); + return gfbgraph_node_get_connection_nodes (GFBGRAPH_NODE (user), + GFBGRAPH_TYPE_ALBUM, + authorizer, + error); } /** @@ -381,28 +408,41 @@ gfbgraph_user_get_albums (GFBGraphUser *user, GFBGraphAuthorizer *authorizer, GE * to get the #GList of #GFBGraphAlbum owned by the @user. **/ void -gfbgraph_user_get_albums_async (GFBGraphUser *user, GFBGraphAuthorizer *authorizer, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) +gfbgraph_user_get_albums_async (GFBGraphUser *user, + GFBGraphAuthorizer *authorizer, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { - GSimpleAsyncResult *simple_async; - GFBGraphUserConnectionAsyncData *data; - - g_return_if_fail (GFBGRAPH_IS_USER (user)); - g_return_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer)); - g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); - g_return_if_fail (callback != NULL); - - simple_async = g_simple_async_result_new (G_OBJECT (user), callback, user_data, gfbgraph_user_get_albums_async); - g_simple_async_result_set_check_cancellable (simple_async, cancellable); - - data = g_slice_new (GFBGraphUserConnectionAsyncData); - data->nodes = NULL; - data->authorizer = authorizer; - g_object_ref (data->authorizer); - - g_simple_async_result_set_op_res_gpointer (simple_async, data, (GDestroyNotify) gfbgraph_user_connection_async_data_free); - g_simple_async_result_run_in_thread (simple_async, (GSimpleAsyncThreadFunc) gfbgraph_user_get_albums_async_thread, G_PRIORITY_DEFAULT, cancellable); - - g_object_unref (simple_async); + GSimpleAsyncResult *simple_async; + GFBGraphUserConnectionAsyncData *data; + + g_return_if_fail (GFBGRAPH_IS_USER (user)); + g_return_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer)); + g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); + g_return_if_fail (callback != NULL); + + simple_async = g_simple_async_result_new (G_OBJECT (user), + callback, + user_data, + gfbgraph_user_get_albums_async); + g_simple_async_result_set_check_cancellable (simple_async, + cancellable); + + data = g_slice_new (GFBGraphUserConnectionAsyncData); + data->nodes = NULL; + data->authorizer = authorizer; + g_object_ref (data->authorizer); + + g_simple_async_result_set_op_res_gpointer (simple_async, + data, + (GDestroyNotify)connection_async_data_free); + g_simple_async_result_run_in_thread (simple_async, + (GSimpleAsyncThreadFunc)get_albums_async_thread, + G_PRIORITY_DEFAULT, + cancellable); + + g_object_unref (simple_async); } /** @@ -416,23 +456,27 @@ gfbgraph_user_get_albums_async (GFBGraphUser *user, GFBGraphAuthorizer *authoriz * * Returns: (element-type GFBGraphAlbum) (transfer full): a newly-allocated #GList of albums owned by the @user. **/ -GList* -gfbgraph_user_get_albums_async_finish (GFBGraphUser *user, GAsyncResult *result, GError **error) +GList * +gfbgraph_user_get_albums_async_finish (GFBGraphUser *user, + GAsyncResult *result, + GError **error) { - GSimpleAsyncResult *simple_async; - GFBGraphUserConnectionAsyncData *data; + GSimpleAsyncResult *simple_async; + GFBGraphUserConnectionAsyncData *data; - g_return_val_if_fail (GFBGRAPH_IS_USER (user), NULL); - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (user), gfbgraph_user_get_albums_async), NULL); - g_return_val_if_fail (error == NULL || *error == NULL, NULL); + g_return_val_if_fail (GFBGRAPH_IS_USER (user), NULL); + g_return_val_if_fail (g_simple_async_result_is_valid (result, + G_OBJECT (user), + gfbgraph_user_get_albums_async), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); - simple_async = G_SIMPLE_ASYNC_RESULT (result); + simple_async = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (simple_async, error)) - return NULL; + if (g_simple_async_result_propagate_error (simple_async, error)) + return NULL; - data = (GFBGraphUserConnectionAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async); - return data->nodes; + data = (GFBGraphUserConnectionAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async); + return data->nodes; } /** @@ -443,12 +487,12 @@ gfbgraph_user_get_albums_async_finish (GFBGraphUser *user, GAsyncResult *result, * * Returns: (transfer none): a const #gchar with the user full name, or %NULL. **/ -const gchar* +const gchar * gfbgraph_user_get_name (GFBGraphUser *user) { - g_return_val_if_fail (GFBGRAPH_IS_USER (user), NULL); + g_return_val_if_fail (GFBGRAPH_IS_USER (user), NULL); - return user->priv->name; + return user->priv->name; } /** @@ -460,10 +504,10 @@ gfbgraph_user_get_name (GFBGraphUser *user) * * Returns: (transfer none): a const #gchar with the user email, or %NULL. **/ -const gchar* +const gchar * gfbgraph_user_get_email (GFBGraphUser *user) { - g_return_val_if_fail (GFBGRAPH_IS_USER (user), NULL); + g_return_val_if_fail (GFBGRAPH_IS_USER (user), NULL); - return user->priv->email; + return user->priv->email; } diff --git a/gfbgraph/gfbgraph-user.h b/gfbgraph/gfbgraph-user.h index 312b1f0..5dd29d5 100644 --- a/gfbgraph/gfbgraph-user.h +++ b/gfbgraph/gfbgraph-user.h @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013-2014 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -27,12 +28,17 @@ G_BEGIN_DECLS -#define GFBGRAPH_TYPE_USER (gfbgraph_user_get_type()) -#define GFBGRAPH_USER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GFBGRAPH_TYPE_USER,GFBGraphUser)) -#define GFBGRAPH_USER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GFBGRAPH_TYPE_USER,GFBGraphUserClass)) -#define GFBGRAPH_IS_USER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GFBGRAPH_TYPE_USER)) -#define GFBGRAPH_IS_USER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GFBGRAPH_TYPE_USER)) -#define GFBGRAPH_USER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GFBGRAPH_TYPE_USER,GFBGraphUserClass)) +#define GFBGRAPH_TYPE_USER (gfbgraph_user_get_type()) +#define GFBGRAPH_USER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GFBGRAPH_TYPE_USER,GFBGraphUser)) +#define GFBGRAPH_USER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GFBGRAPH_TYPE_USER,GFBGraphUserClass)) +#define GFBGRAPH_IS_USER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GFBGRAPH_TYPE_USER)) +#define GFBGRAPH_IS_USER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GFBGRAPH_TYPE_USER)) +#define GFBGRAPH_USER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj),GFBGRAPH_TYPE_USER,GFBGraphUserClass)) typedef struct _GFBGraphUser GFBGraphUser; typedef struct _GFBGraphUserClass GFBGraphUserClass; @@ -41,27 +47,42 @@ typedef struct _GFBGraphUserPrivate GFBGraphUserPrivate; G_DEFINE_AUTOPTR_CLEANUP_FUNC (GFBGraphUser, g_object_unref) struct _GFBGraphUser { - GFBGraphNode parent; + GFBGraphNode parent; - /*< private >*/ - GFBGraphUserPrivate *priv; + /*< private >*/ + GFBGraphUserPrivate *priv; }; struct _GFBGraphUserClass { - GFBGraphNodeClass parent_class; + GFBGraphNodeClass parent_class; }; GType gfbgraph_user_get_type (void) G_GNUC_CONST; GFBGraphUser* gfbgraph_user_new (void); -GFBGraphUser* gfbgraph_user_new_from_id (GFBGraphAuthorizer *authorizer, const gchar *id, GError **error); - -GFBGraphUser* gfbgraph_user_get_me (GFBGraphAuthorizer *authorizer, GError **error); -void gfbgraph_user_get_me_async (GFBGraphAuthorizer *authorizer, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); -GFBGraphUser* gfbgraph_user_get_me_async_finish (GFBGraphAuthorizer *authorizer, GAsyncResult *result, GError **error); - -GList* gfbgraph_user_get_albums (GFBGraphUser *user, GFBGraphAuthorizer *authorizer, GError **error); -void gfbgraph_user_get_albums_async (GFBGraphUser *user, GFBGraphAuthorizer *authorizer, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); -GList* gfbgraph_user_get_albums_async_finish (GFBGraphUser *user, GAsyncResult *result, GError **error); +GFBGraphUser* gfbgraph_user_new_from_id (GFBGraphAuthorizer *authorizer, + const gchar *id, + GError **error); + +GFBGraphUser* gfbgraph_user_get_me (GFBGraphAuthorizer *authorizer, + GError **error); +void gfbgraph_user_get_me_async (GFBGraphAuthorizer *authorizer, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +GFBGraphUser* gfbgraph_user_get_me_async_finish (GFBGraphAuthorizer *authorizer, + GAsyncResult *result, + GError **error); +GList* gfbgraph_user_get_albums (GFBGraphUser *user, + GFBGraphAuthorizer *authorizer, + GError **error); +void gfbgraph_user_get_albums_async (GFBGraphUser *user, + GFBGraphAuthorizer *authorizer, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +GList* gfbgraph_user_get_albums_async_finish (GFBGraphUser *user, + GAsyncResult *result, + GError **error); const gchar* gfbgraph_user_get_name (GFBGraphUser *user); const gchar* gfbgraph_user_get_email (GFBGraphUser *user); diff --git a/gfbgraph/gfbgraph.h b/gfbgraph/gfbgraph.h index a9f0034..a10fcf1 100644 --- a/gfbgraph/gfbgraph.h +++ b/gfbgraph/gfbgraph.h @@ -1,7 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013 Álvaro Peña <alvaropg@gmail.com> + * 2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public diff --git a/tests/autoptr.c b/tests/autoptr.c index 182fc28..b3c37ba 100644 --- a/tests/autoptr.c +++ b/tests/autoptr.c @@ -1,7 +1,7 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API - * Copyright (C) 2018 Yi-Soo An <yisooan@gmail.com> + * Copyright (C) 2018-2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -28,49 +28,49 @@ static void test_gfbgraph_album (void) { - g_autoptr (GFBGraphAlbum) val = NULL; + g_autoptr (GFBGraphAlbum) val = NULL; - val = gfbgraph_album_new (); - g_assert_nonnull (val); + val = gfbgraph_album_new (); + g_assert_nonnull (val); } static void test_gfbgraph_node (void) { - g_autoptr (GFBGraphNode) val = NULL; + g_autoptr (GFBGraphNode) val = NULL; - val = gfbgraph_node_new (); - g_assert_nonnull (val); + val = gfbgraph_node_new (); + g_assert_nonnull (val); } static void test_gfbgraph_photo (void) { - g_autoptr (GFBGraphPhoto) val = NULL; + g_autoptr (GFBGraphPhoto) val = NULL; - val = gfbgraph_photo_new (); - g_assert_nonnull (val); + val = gfbgraph_photo_new (); + g_assert_nonnull (val); } static void test_gfbgraph_user (void) { - g_autoptr (GFBGraphUser) val = NULL; + g_autoptr (GFBGraphUser) val = NULL; - val = gfbgraph_user_new (); - g_assert_nonnull (val); + val = gfbgraph_user_new (); + g_assert_nonnull (val); } int main (int argc, - char *argv[]) + char *argv[]) { - g_test_init (&argc, &argv, NULL); + g_test_init (&argc, &argv, NULL); - g_test_add_func ("/GFBGraph/autoptr/Album", test_gfbgraph_album); - g_test_add_func ("/GFBGraph/autoptr/Node", test_gfbgraph_node); - g_test_add_func ("/GFBGraph/autoptr/Photo", test_gfbgraph_photo); - g_test_add_func ("/GFBGraph/autoptr/User", test_gfbgraph_user); + g_test_add_func ("/GFBGraph/autoptr/Album", test_gfbgraph_album); + g_test_add_func ("/GFBGraph/autoptr/Node", test_gfbgraph_node); + g_test_add_func ("/GFBGraph/autoptr/Photo", test_gfbgraph_photo); + g_test_add_func ("/GFBGraph/autoptr/User", test_gfbgraph_user); - return g_test_run (); + return g_test_run (); } diff --git a/tests/gtestutils.c b/tests/gtestutils.c index eef4529..ec3b7bb 100644 --- a/tests/gtestutils.c +++ b/tests/gtestutils.c @@ -1,8 +1,8 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*- */ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * libgfbgraph - GObject library for Facebook Graph API * Copyright (C) 2013-2015 Álvaro Peña <alvaropg@gmail.com> - * 2019 Leesoo Ahn <yisooan@fedoraproject.org> + * 2019-2020 Leesoo Ahn <yisooan@fedoraproject.org> * * GFBGraph is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -32,17 +32,17 @@ typedef struct _GFBGraphTestApp GFBGraphTestApp; struct _GFBGraphTestFixture { - gchar *user_id; - gchar *user_email; + gchar *user_id; + gchar *user_email; - GFBGraphSimpleAuthorizer *authorizer; + GFBGraphSimpleAuthorizer *authorizer; }; struct _GFBGraphTestApp { - gchar *client_id; - gchar *client_secret; - gchar *access_token; + gchar *client_id; + gchar *client_secret; + gchar *access_token; }; #define FACEBOOK_ENDPOINT "https://graph.facebook.com/v2.10" @@ -52,231 +52,231 @@ struct _GFBGraphTestApp GFBGraphTestApp* gfbgraph_test_app_setup (void) { - GFBGraphTestApp *app; - RestProxy *proxy; - RestProxyCall *rest_call; - g_autofree gchar *function_path = NULL; - g_autofree gchar *app_key_filename = NULL; - g_autoptr(GError) error = NULL; - g_autoptr(GKeyFile) app_key_file = NULL; - g_autoptr(JsonParser) jparser = NULL; - g_autoptr(JsonReader) jreader = NULL; - JsonNode *jnode; - const char *payload; - - app_key_filename = g_test_build_filename (G_TEST_BUILT, - "credentials.ini", - NULL); - app_key_file = g_key_file_new (); - g_key_file_load_from_file (app_key_file, - app_key_filename, - G_KEY_FILE_NONE, - &error); - g_assert_no_error(error); - - app = g_new0(GFBGraphTestApp, 1); - - app->client_id = g_key_file_get_string (app_key_file, - "Client", - "ClientId", - &error); - g_assert_no_error(error); - app->client_secret = g_key_file_get_string (app_key_file, - "Client", - "ClientSecret", - &error); - g_assert_no_error(error); - - proxy = rest_proxy_new (FACEBOOK_ENDPOINT, FALSE); - rest_call = rest_proxy_new_call (proxy); - - rest_proxy_call_add_param (rest_call, "client_id", app->client_id); - rest_proxy_call_add_param (rest_call, "client_secret", app->client_secret); - rest_proxy_call_add_param (rest_call, "grant_type", "client_credentials"); - - rest_proxy_call_set_method (rest_call, "GET"); - function_path = g_strdup ("/oauth/access_token"); - rest_proxy_call_set_function (rest_call, function_path); - - rest_proxy_call_sync (rest_call, &error); - g_assert_no_error (error); - - payload = rest_proxy_call_get_payload (rest_call); - jparser = json_parser_new (); - json_parser_load_from_data (jparser, payload, -1, &error); - g_assert_no_error (error); - jnode = json_parser_get_root (jparser); - jreader = json_reader_new (jnode); - json_reader_read_element (jreader, 0); - app->access_token = g_strdup(json_reader_get_string_value (jreader)); - json_reader_end_element (jreader); - - g_clear_object(&rest_call); - g_clear_object(&proxy); - - return app; + GFBGraphTestApp *app; + RestProxy *proxy; + RestProxyCall *rest_call; + g_autofree gchar *function_path = NULL; + g_autofree gchar *app_key_filename = NULL; + g_autoptr(GError) error = NULL; + g_autoptr(GKeyFile) app_key_file = NULL; + g_autoptr(JsonParser) jparser = NULL; + g_autoptr(JsonReader) jreader = NULL; + JsonNode *jnode; + const char *payload; + + app_key_filename = g_test_build_filename (G_TEST_BUILT, + "credentials.ini", + NULL); + app_key_file = g_key_file_new (); + g_key_file_load_from_file (app_key_file, + app_key_filename, + G_KEY_FILE_NONE, + &error); + g_assert_no_error(error); + + app = g_new0(GFBGraphTestApp, 1); + + app->client_id = g_key_file_get_string (app_key_file, + "Client", + "ClientId", + &error); + g_assert_no_error(error); + app->client_secret = g_key_file_get_string (app_key_file, + "Client", + "ClientSecret", + &error); + g_assert_no_error(error); + + proxy = rest_proxy_new (FACEBOOK_ENDPOINT, FALSE); + rest_call = rest_proxy_new_call (proxy); + + rest_proxy_call_add_param (rest_call, "client_id", app->client_id); + rest_proxy_call_add_param (rest_call, "client_secret", app->client_secret); + rest_proxy_call_add_param (rest_call, "grant_type", "client_credentials"); + + rest_proxy_call_set_method (rest_call, "GET"); + function_path = g_strdup ("/oauth/access_token"); + rest_proxy_call_set_function (rest_call, function_path); + + rest_proxy_call_sync (rest_call, &error); + g_assert_no_error (error); + + payload = rest_proxy_call_get_payload (rest_call); + jparser = json_parser_new (); + json_parser_load_from_data (jparser, payload, -1, &error); + g_assert_no_error (error); + jnode = json_parser_get_root (jparser); + jreader = json_reader_new (jnode); + json_reader_read_element (jreader, 0); + app->access_token = g_strdup(json_reader_get_string_value (jreader)); + json_reader_end_element (jreader); + + g_clear_object(&rest_call); + g_clear_object(&proxy); + + return app; } void gfbgraph_test_fixture_setup (GFBGraphTestFixture *fixture, gconstpointer user_data) { - RestProxy *proxy; - RestProxyCall *rest_call; - g_autofree gchar *function_path = NULL; - const gchar *payload; - g_autoptr(GError) error = NULL; - const GFBGraphTestApp *app = user_data; - JsonNode *jnode; - g_autoptr(JsonParser) jparser = NULL; - g_autoptr(JsonReader) jreader = NULL; - const gchar *access_token; - - /* Create a new user */ - - proxy = rest_proxy_new (FACEBOOK_ENDPOINT, FALSE); - rest_call = rest_proxy_new_call (proxy); - - /* Params as documented here: https://developers.facebook.com/docs/graph-api/reference/app/accounts/test-users#publish */ - rest_proxy_call_add_param (rest_call, "installed", "true"); - rest_proxy_call_add_param (rest_call, "permissions", FACEBOOK_TEST_USER_PERMISSIONS); - rest_proxy_call_add_param (rest_call, "access_token", app->access_token); - - rest_proxy_call_set_method (rest_call, "POST"); - function_path = g_strdup_printf ("%s/accounts/test-users", app->client_id); - rest_proxy_call_set_function (rest_call, function_path); - - rest_proxy_call_sync (rest_call, &error); - g_assert_no_error (error); - - payload = rest_proxy_call_get_payload (rest_call); - jparser = json_parser_new (); - json_parser_load_from_data (jparser, payload, -1, &error); - g_assert_no_error (error); - jnode = json_parser_get_root (jparser); - jreader = json_reader_new (jnode); - - json_reader_read_element (jreader, 0); - fixture->user_id = g_strdup (json_reader_get_string_value (jreader)); - json_reader_end_element (jreader); - json_reader_read_element (jreader, 1); - access_token = json_reader_get_string_value (jreader); - json_reader_end_element (jreader); - json_reader_read_element (jreader, 3); - fixture->user_email = g_strdup (json_reader_get_string_value (jreader)); - json_reader_end_element (jreader); - - fixture->authorizer = gfbgraph_simple_authorizer_new (access_token); - - g_clear_object (&rest_call); - g_clear_object (&proxy); + RestProxy *proxy; + RestProxyCall *rest_call; + g_autofree gchar *function_path = NULL; + const gchar *payload; + g_autoptr(GError) error = NULL; + const GFBGraphTestApp *app = user_data; + JsonNode *jnode; + g_autoptr(JsonParser) jparser = NULL; + g_autoptr(JsonReader) jreader = NULL; + const gchar *access_token; + + /* Create a new user */ + + proxy = rest_proxy_new (FACEBOOK_ENDPOINT, FALSE); + rest_call = rest_proxy_new_call (proxy); + + /* Params as documented here: https://developers.facebook.com/docs/graph-api/reference/app/accounts/test-users#publish */ + rest_proxy_call_add_param (rest_call, "installed", "true"); + rest_proxy_call_add_param (rest_call, "permissions", FACEBOOK_TEST_USER_PERMISSIONS); + rest_proxy_call_add_param (rest_call, "access_token", app->access_token); + + rest_proxy_call_set_method (rest_call, "POST"); + function_path = g_strdup_printf ("%s/accounts/test-users", app->client_id); + rest_proxy_call_set_function (rest_call, function_path); + + rest_proxy_call_sync (rest_call, &error); + g_assert_no_error (error); + + payload = rest_proxy_call_get_payload (rest_call); + jparser = json_parser_new (); + json_parser_load_from_data (jparser, payload, -1, &error); + g_assert_no_error (error); + jnode = json_parser_get_root (jparser); + jreader = json_reader_new (jnode); + + json_reader_read_element (jreader, 0); + fixture->user_id = g_strdup (json_reader_get_string_value (jreader)); + json_reader_end_element (jreader); + json_reader_read_element (jreader, 1); + access_token = json_reader_get_string_value (jreader); + json_reader_end_element (jreader); + json_reader_read_element (jreader, 3); + fixture->user_email = g_strdup (json_reader_get_string_value (jreader)); + json_reader_end_element (jreader); + + fixture->authorizer = gfbgraph_simple_authorizer_new (access_token); + + g_clear_object (&rest_call); + g_clear_object (&proxy); } static void gfbgraph_test_fixture_teardown (GFBGraphTestFixture *fixture, G_GNUC_UNUSED gconstpointer user_data) { - g_autoptr(SoupSession) ssession = NULL; - g_autoptr(SoupMessage) smessage = NULL; - g_autofree gchar *function_path = NULL; - guint status; + g_autoptr(SoupSession) ssession = NULL; + g_autoptr(SoupMessage) smessage = NULL; + g_autofree gchar *function_path = NULL; + guint status; - /* Delete the test user and clean up memory */ + /* Delete the test user and clean up memory */ - ssession = soup_session_new (); + ssession = soup_session_new (); - function_path = g_strdup_printf ("%s/%s", FACEBOOK_ENDPOINT, fixture->user_id); - smessage = soup_message_new ("DELETE", function_path); - gfbgraph_authorizer_process_message (GFBGRAPH_AUTHORIZER (fixture->authorizer), smessage); + function_path = g_strdup_printf ("%s/%s", FACEBOOK_ENDPOINT, fixture->user_id); + smessage = soup_message_new ("DELETE", function_path); + gfbgraph_authorizer_process_message (GFBGRAPH_AUTHORIZER (fixture->authorizer), smessage); - status = soup_session_send_message (ssession, smessage); - g_assert_cmpint(status, ==, 200); + status = soup_session_send_message (ssession, smessage); + g_assert_cmpint(status, ==, 200); - g_free (fixture->user_id); - g_free (fixture->user_email); - g_object_unref (fixture->authorizer); + g_free (fixture->user_id); + g_free (fixture->user_email); + g_object_unref (fixture->authorizer); } static void gfbgraph_test_me (GFBGraphTestFixture *fixture, G_GNUC_UNUSED gconstpointer user_data) { - g_autoptr(GFBGraphUser) me = NULL; - g_autoptr(GError) error = NULL; + g_autoptr(GFBGraphUser) me = NULL; + g_autoptr(GError) error = NULL; - me = gfbgraph_user_get_me (GFBGRAPH_AUTHORIZER (fixture->authorizer), &error); - g_assert_no_error (error); - g_assert (GFBGRAPH_IS_USER (me)); + me = gfbgraph_user_get_me (GFBGRAPH_AUTHORIZER (fixture->authorizer), &error); + g_assert_no_error (error); + g_assert (GFBGRAPH_IS_USER (me)); - g_assert_cmpstr (fixture->user_id, ==, gfbgraph_node_get_id (GFBGRAPH_NODE (me))); - g_assert_cmpstr (fixture->user_email, ==, gfbgraph_user_get_email (me)); + g_assert_cmpstr (fixture->user_id, ==, gfbgraph_node_get_id (GFBGRAPH_NODE (me))); + g_assert_cmpstr (fixture->user_email, ==, gfbgraph_user_get_email (me)); } static G_GNUC_UNUSED void gfbgraph_test_album (GFBGraphTestFixture *fixture, G_GNUC_UNUSED gconstpointer user_data) { - GFBGraphUser *me; - GFBGraphAlbum *album; - GError *error = NULL; - gboolean result; - - me = gfbgraph_user_get_me (GFBGRAPH_AUTHORIZER (fixture->authorizer), &error); - g_assert_no_error (error); - g_assert (GFBGRAPH_IS_USER (me)); - - /* Create a photo album */ - album = gfbgraph_album_new (); - gfbgraph_album_set_name (album, "Vanilla Sky"); - gfbgraph_album_set_description (album, "Great sunset photos in Mars!"); - result = gfbgraph_node_append_connection (GFBGRAPH_NODE (me), - GFBGRAPH_NODE (album), - GFBGRAPH_AUTHORIZER (fixture->authorizer), - &error); - /* Asserting the connection */ - g_assert_no_error (error); - g_assert (result); - - /* Asserting the Album ID */ - g_assert_cmpstr (gfbgraph_node_get_id (GFBGRAPH_NODE (album)), !=, ""); + GFBGraphUser *me; + GFBGraphAlbum *album; + GError *error = NULL; + gboolean result; + + me = gfbgraph_user_get_me (GFBGRAPH_AUTHORIZER (fixture->authorizer), &error); + g_assert_no_error (error); + g_assert (GFBGRAPH_IS_USER (me)); + + /* Create a photo album */ + album = gfbgraph_album_new (); + gfbgraph_album_set_name (album, "Vanilla Sky"); + gfbgraph_album_set_description (album, "Great sunset photos in Mars!"); + result = gfbgraph_node_append_connection (GFBGRAPH_NODE (me), + GFBGRAPH_NODE (album), + GFBGRAPH_AUTHORIZER (fixture->authorizer), + &error); + /* Asserting the connection */ + g_assert_no_error (error); + g_assert (result); + + /* Asserting the Album ID */ + g_assert_cmpstr (gfbgraph_node_get_id (GFBGRAPH_NODE (album)), !=, ""); } int main (int argc, char **argv) { - GFBGraphTestApp *app = NULL; - int test_result; + GFBGraphTestApp *app = NULL; + int test_result; - g_test_init (&argc, &argv, NULL); + g_test_init (&argc, &argv, NULL); - g_log_set_always_fatal (G_LOG_LEVEL_ERROR | G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL | G_LOG_LEVEL_CRITICAL); + g_log_set_always_fatal (G_LOG_LEVEL_ERROR | G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL | G_LOG_LEVEL_CRITICAL); - app = gfbgraph_test_app_setup (); + app = gfbgraph_test_app_setup (); - g_test_add ("/GFBGraph/Me", - GFBGraphTestFixture, - app, - gfbgraph_test_fixture_setup, - gfbgraph_test_me, - gfbgraph_test_fixture_teardown); + g_test_add ("/GFBGraph/Me", + GFBGraphTestFixture, + app, + gfbgraph_test_fixture_setup, + gfbgraph_test_me, + gfbgraph_test_fixture_teardown); #if 0 - g_test_add ("/GFBGraph/Album", - GFBGraphTestFixture, - app, - gfbgraph_test_fixture_setup, - gfbgraph_test_album, - gfbgraph_test_fixture_teardown); + g_test_add ("/GFBGraph/Album", + GFBGraphTestFixture, + app, + gfbgraph_test_fixture_setup, + gfbgraph_test_album, + gfbgraph_test_fixture_teardown); #endif - test_result = g_test_run (); + test_result = g_test_run (); - if (app) { - if (app->client_id) - g_free (app->client_id); - if (app->client_secret) - g_free (app->client_secret); - if (app->access_token) - g_free (app->access_token); - g_free (app); - } + if (app) { + if (app->client_id) + g_free (app->client_id); + if (app->client_secret) + g_free (app->client_secret); + if (app->access_token) + g_free (app->access_token); + g_free (app); + } - return test_result; + return test_result; } |