#include #include #include struct _MgManga { GObject parent_instance; char *image_url; char *title; char *id; char *description; int has_details; }; G_DEFINE_TYPE (MgManga, mg_manga, G_TYPE_OBJECT) typedef enum { MG_MANGA_IMAGE_URL = 1, MG_MANGA_TITLE, MG_MANGA_ID, MG_MANGA_DESCRIPTION, MG_MANGA_N_PROPERTIES } MgMangaProperties; static GParamSpec *manga_properties[MG_MANGA_N_PROPERTIES] = { NULL, }; static void mg_manga_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); static void mg_manga_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec); static void mg_manga_class_init (MgMangaClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); object_class->set_property = mg_manga_set_property; object_class->get_property = mg_manga_get_property; manga_properties[MG_MANGA_IMAGE_URL] = g_param_spec_string ("image_url", "ImageURL", "Url of the image.", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); manga_properties[MG_MANGA_TITLE] = g_param_spec_string ("title", "Title", "Title of the manga.", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); manga_properties[MG_MANGA_ID] = g_param_spec_string ("id", "Id", "Id of the manga.", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); manga_properties[MG_MANGA_DESCRIPTION] = g_param_spec_string ( "description", "Description", "Description of the manga.", NULL, G_PARAM_READWRITE); g_object_class_install_properties (object_class, MG_MANGA_N_PROPERTIES, manga_properties); } static void mg_manga_init (MgManga *self) { self->has_details = 0; } int mg_manga_has_details (MgManga *self) { return self->has_details; } void mg_manga_details_recovered (MgManga *self) { self->has_details = 1; } char * mg_manga_get_id (MgManga *self) { GValue value = G_VALUE_INIT; g_value_init (&value, G_TYPE_STRING); g_object_get_property (G_OBJECT (self), "id", &value); return g_value_dup_string (&value); } char * mg_manga_get_image_url (MgManga *self) { GValue value = G_VALUE_INIT; g_value_init (&value, G_TYPE_STRING); g_object_get_property (G_OBJECT (self), "image_url", &value); return g_value_dup_string (&value); } char * mg_manga_get_title (MgManga *self) { GValue value = G_VALUE_INIT; g_value_init (&value, G_TYPE_STRING); g_object_get_property (G_OBJECT (self), "title", &value); return g_value_dup_string (&value); } char * mg_manga_get_description (MgManga *self) { GValue value = G_VALUE_INIT; g_value_init (&value, G_TYPE_STRING); g_object_get_property (G_OBJECT (self), "description", &value); return g_value_dup_string (&value); } void mg_manga_set_description (MgManga *self, const char *description) { GValue value = G_VALUE_INIT; g_value_init (&value, G_TYPE_STRING); g_value_set_string (&value, description); g_object_set_property (G_OBJECT (self), "description", &value); } static void mg_manga_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { MgManga *self = MG_MANGA (object); switch ((MgMangaProperties) property_id) { case MG_MANGA_IMAGE_URL: g_free (self->image_url); self->image_url = g_value_dup_string (value); break; case MG_MANGA_TITLE: g_free (self->title); self->title = g_value_dup_string (value); break; case MG_MANGA_ID: g_free (self->id); self->id = g_value_dup_string (value); break; case MG_MANGA_DESCRIPTION: g_free (self->description); self->description = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void mg_manga_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { MgManga *self = MG_MANGA (object); switch ((MgMangaProperties) property_id) { case MG_MANGA_IMAGE_URL: g_value_set_string (value, self->image_url); break; case MG_MANGA_TITLE: g_value_set_string (value, self->title); break; case MG_MANGA_ID: g_value_set_string (value, self->id); break; case MG_MANGA_DESCRIPTION: g_value_set_string (value, self->description); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } MgManga * mg_manga_new (const char *const image_url, const char *const title, const char *id) { MgManga *self = NULL; MgUtilString *string_util = mg_util_string_new (); self = MG_MANGA ((g_object_new (MG_TYPE_MANGA, NULL))); self->image_url = mg_util_string_alloc_string (string_util, strlen (image_url)); self->title = mg_util_string_alloc_string (string_util, strlen (title)); self->id = mg_util_string_alloc_string (string_util, strlen (id)); mg_util_string_copy_substring (string_util, image_url, self->image_url, strlen(image_url) + 1, 0, strlen (image_url)); mg_util_string_copy_substring (string_util, title, self->title, strlen(title) + 1, 0, strlen (title)); mg_util_string_copy_substring (string_util, id, self->id, strlen(id) + 1, 0, strlen (id)); return self; }