Movie Info: First GObject version
authorSimón Pena <spenap@gmail.com>
Sun, 16 May 2010 10:24:50 +0000 (12:24 +0200)
committerSimón Pena <spenap@gmail.com>
Sun, 16 May 2010 11:37:23 +0000 (13:37 +0200)
A value object to store info about a movie is added, adding GObject
support. Current data types aren't final, but just mere placeholders.

src/mvs-movie-info.c [new file with mode: 0644]
src/mvs-movie-info.h [new file with mode: 0644]

diff --git a/src/mvs-movie-info.c b/src/mvs-movie-info.c
new file mode 100644 (file)
index 0000000..26d25fb
--- /dev/null
@@ -0,0 +1,341 @@
+/*
+ * mvs-movie-info.c
+ *
+ * This file is part of maevies
+ * Copyright (C) 2010 Simón Pena <spenap@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#include "mvs-movie-info.h"
+
+G_DEFINE_TYPE (MvsMovieInfo, mvs_movie_info, G_TYPE_OBJECT)
+
+enum {
+        PROP_0,
+        PROP_HAS_STINGERS,
+        PROP_TITLE,
+        PROP_DIRECTOR,
+        PROP_CAST,
+        PROP_RANKING,
+        PROP_RELEASE_DATE,
+        PROP_OVERVIEW,
+        PROP_URL,
+        PROP_SCHEDULE,
+};
+
+#define GET_PRIVATE(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE ((o), MVS_TYPE_MOVIE_INFO, MvsMovieInfoPrivate))
+
+struct _MvsMovieInfoPrivate {
+        gboolean has_stingers;
+        gchar *title;
+        gchar *director;
+        gchar *cast;
+        gfloat ranking;
+        gchar *release_date;
+        gchar *overview;
+        gchar *url;
+        gchar *schedule;
+};
+
+static void
+mvs_movie_info_get_property (GObject *object, guint property_id,
+                         GValue *value, GParamSpec *pspec)
+{
+        MvsMovieInfo *self = MVS_MOVIE_INFO (object);
+
+        switch (property_id) {
+        case PROP_HAS_STINGERS:
+                g_value_set_boolean (value, self->priv->has_stingers);
+                break;
+        case PROP_TITLE:
+                g_value_set_string (value, self->priv->title);
+                break;
+        case PROP_DIRECTOR:
+                g_value_set_string (value, self->priv->director);
+                break;
+        case PROP_CAST:
+                g_value_set_string (value, self->priv->cast);
+                break;
+        case PROP_RANKING:
+                g_value_set_float (value, self->priv->ranking);
+                break;
+        case PROP_RELEASE_DATE:
+                g_value_set_string (value, self->priv->release_date);
+                break;
+        case PROP_OVERVIEW:
+                g_value_set_string (value, self->priv->overview);
+                break;
+        case PROP_URL:
+                g_value_set_string (value, self->priv->url);
+                break;
+        case PROP_SCHEDULE:
+                g_value_set_string (value, self->priv->schedule);
+                break;
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+        }
+}
+
+static void
+mvs_movie_info_set_property (GObject *object, guint property_id,
+                         const GValue *value, GParamSpec *pspec)
+{
+        MvsMovieInfo *self = MVS_MOVIE_INFO (object);
+        GDate *date = NULL;
+
+        switch (property_id) {
+        case PROP_HAS_STINGERS:
+                mvs_movie_info_set_stingers (self, g_value_get_boolean (value));
+                break;
+        case PROP_TITLE:
+                mvs_movie_info_set_title (self, g_value_get_string (value));
+                break;
+        case PROP_DIRECTOR:
+                mvs_movie_info_set_director (self, g_value_get_string (value));
+                break;
+        case PROP_CAST:
+                mvs_movie_info_set_cast (self, g_value_get_string (value));
+                break;
+        case PROP_RANKING:
+                mvs_movie_info_set_ranking (self, g_value_get_float (value));
+                break;
+        case PROP_RELEASE_DATE:
+                mvs_movie_info_set_release_date (self, g_value_get_string (value));
+                break;
+        case PROP_OVERVIEW:
+                mvs_movie_info_set_overview (self, g_value_get_string (value));
+                break;
+        case PROP_URL:
+                mvs_movie_info_set_url (self, g_value_get_string (value));
+                break;
+        case PROP_SCHEDULE:
+                mvs_movie_info_set_schedule (self, g_value_get_string (value));
+                break;
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+        }
+}
+
+static void
+mvs_movie_info_finalize (GObject *object)
+{
+        MvsMovieInfo *self = MVS_MOVIE_INFO (object);
+
+        g_free (self->priv->cast);
+        g_free (self->priv->director);
+        g_free (self->priv->overview);
+        g_free (self->priv->release_date);
+        g_free (self->priv->schedule);
+        g_free (self->priv->title);
+        g_free (self->priv->url);
+
+        G_OBJECT_CLASS (mvs_movie_info_parent_class)->finalize (object);
+}
+
+static void
+mvs_movie_info_class_init (MvsMovieInfoClass *klass)
+{
+        GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+        g_type_class_add_private (klass, sizeof (MvsMovieInfoPrivate));
+
+        object_class->get_property = mvs_movie_info_get_property;
+        object_class->set_property = mvs_movie_info_set_property;
+        object_class->finalize = mvs_movie_info_finalize;
+
+
+        g_object_class_install_property
+                (object_class, PROP_CAST,
+                 g_param_spec_string ("cast", "Movie cast", "The movie cast",
+                                 NULL,
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+        g_object_class_install_property
+                (object_class, PROP_DIRECTOR,
+                 g_param_spec_string ("director", "Movie director", "The movie director",
+                                 NULL,
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+        g_object_class_install_property
+                (object_class, PROP_HAS_STINGERS,
+                 g_param_spec_boolean ("stingers", "Has stingers", "The movie has stingers",
+                                 FALSE,
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+        g_object_class_install_property
+                (object_class, PROP_OVERVIEW,
+                 g_param_spec_string ("overview", "Movie overview", "The movie overview",
+                                 NULL,
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+        g_object_class_install_property
+                (object_class, PROP_RANKING,
+                 g_param_spec_float ("ranking", "Movie ranking", "The movie ranking",
+                                 0.0,
+                                 10.0,
+                                 5.0,
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+        g_object_class_install_property
+                (object_class, PROP_RELEASE_DATE,
+                 g_param_spec_string ("release", "Movie release date", "The movie release date",
+                                 NULL,
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+        g_object_class_install_property
+                (object_class, PROP_SCHEDULE,
+                 g_param_spec_string ("schedule", "Movie schedule", "The movie schedule",
+                                 NULL,
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+        g_object_class_install_property
+                (object_class, PROP_TITLE,
+                 g_param_spec_string ("title", "Movie title", "The movie title",
+                                 NULL,
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+        g_object_class_install_property
+                (object_class, PROP_URL,
+                 g_param_spec_string ("url", "Movie URL", "The movie url",
+                                 NULL,
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+}
+
+static void
+mvs_movie_info_init (MvsMovieInfo *self)
+{
+        self->priv = GET_PRIVATE (self);
+        self->priv->cast = NULL;
+        self->priv->director = NULL;
+        self->priv->has_stingers = FALSE;
+        self->priv->overview = NULL;
+        self->priv->ranking = 5;
+        self->priv->release_date = NULL;
+        self->priv->schedule = NULL;
+        self->priv->title = NULL;
+        self->priv->url = NULL;
+}
+
+MvsMovieInfo*
+mvs_movie_info_new (void)
+{
+        return g_object_new (MVS_TYPE_MOVIE_INFO, NULL);
+}
+
+gboolean
+mvs_movie_info_set_stingers (MvsMovieInfo *self, gboolean has_stingers)
+{
+        g_return_val_if_fail (self, FALSE);
+
+        self->priv->has_stingers = has_stingers;
+
+        return TRUE;
+}
+
+gboolean
+mvs_movie_info_set_title (MvsMovieInfo *self, const gchar *title)
+{
+        g_return_val_if_fail (self, FALSE);
+
+        g_free (self->priv->title);
+
+        self->priv->title = g_strdup (title);
+
+        return TRUE;
+}
+
+gboolean
+mvs_movie_info_set_director (MvsMovieInfo *self, const gchar *director)
+{
+        g_return_val_if_fail (self, FALSE);
+
+        g_free (self->priv->director);
+
+        self->priv->director = g_strdup (director);
+
+        return TRUE;
+}
+
+gboolean
+mvs_movie_info_set_cast (MvsMovieInfo *self, const gchar *cast)
+{
+        g_return_val_if_fail (self, FALSE);
+
+        g_free (self->priv->cast);
+
+        self->priv->cast = g_strdup (cast);
+
+        return TRUE;
+}
+
+gboolean
+mvs_movie_info_set_ranking (MvsMovieInfo *self, gfloat ranking)
+{
+        g_return_val_if_fail (self, FALSE);
+        g_return_val_if_fail (ranking < 10 && ranking > 0, FALSE);
+
+        self->priv->ranking = ranking;
+
+        return FALSE;
+}
+
+gboolean
+mvs_movie_info_set_release_date (MvsMovieInfo *self,
+                                          const gchar *released)
+{
+        g_return_val_if_fail (self, FALSE);
+
+        g_free (self->priv->release_date);
+
+        self->priv->release_date = g_strdup (released);
+
+        return TRUE;
+}
+gboolean
+mvs_movie_info_set_overview (MvsMovieInfo *self,
+                                      const gchar *overview)
+{
+        g_return_val_if_fail (self, FALSE);
+
+        g_free (self->priv->overview);
+
+        self->priv->overview = g_strdup (overview);
+
+        return TRUE;
+}
+
+gboolean
+mvs_movie_info_set_url (MvsMovieInfo *self, const gchar *url)
+{
+        g_return_val_if_fail (self, FALSE);
+
+        g_free (self->priv->url);
+
+        self->priv->url = g_strdup (url);
+
+        return TRUE;
+}
+
+gboolean
+mvs_movie_info_set_schedule (MvsMovieInfo *self,
+                                      const gchar *schedule)
+{
+        g_return_val_if_fail (self, FALSE);
+
+        g_free (self->priv->schedule);
+
+        self->priv->schedule = g_strdup (schedule);
+
+        return TRUE;
+}
diff --git a/src/mvs-movie-info.h b/src/mvs-movie-info.h
new file mode 100644 (file)
index 0000000..c6b002b
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * mvs-movie-info.h
+ *
+ * This file is part of maevies
+ * Copyright (C) 2010 Simón Pena <spenap@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#ifndef _MVS_MOVIE_INFO
+#define _MVS_MOVIE_INFO
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define MVS_TYPE_MOVIE_INFO mvs_movie_info_get_type()
+#define MVS_MOVIE_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), MVS_TYPE_MOVIE_INFO, MvsMovieInfo))
+#define MVS_MOVIE_INFO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), MVS_TYPE_MOVIE_INFO, MvsMovieInfoClass))
+#define IS_MVS_MOVIE_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MVS_TYPE_MOVIE_INFO))
+#define IS_MVS_MOVIE_INFO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), MVS_TYPE_MOVIE_INFO))
+#define MVS_MOVIE_INFO_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), MVS_TYPE_MOVIE_INFO, MvsMovieInfoClass))
+
+typedef struct _MvsMovieInfoPrivate MvsMovieInfoPrivate;
+
+typedef struct {
+        GObject parent;
+
+        /* <private> */
+        MvsMovieInfoPrivate *priv;
+} MvsMovieInfo;
+
+typedef struct {
+        GObjectClass parent_class;
+} MvsMovieInfoClass;
+
+GType mvs_movie_info_get_type (void);
+MvsMovieInfo* mvs_movie_info_new (void);
+
+gboolean mvs_movie_info_set_stingers (MvsMovieInfo *self,
+                                      gboolean has_stingers);
+gboolean mvs_movie_info_set_title (MvsMovieInfo *self, const gchar *title);
+gboolean mvs_movie_info_set_director (MvsMovieInfo *self,
+                                      const gchar *director);
+gboolean mvs_movie_info_set_cast (MvsMovieInfo *self, const gchar *cast);
+gboolean mvs_movie_info_set_ranking (MvsMovieInfo *self, gfloat ranking);
+gboolean mvs_movie_info_set_release_date (MvsMovieInfo *self,
+                                          const gchar *released);
+gboolean mvs_movie_info_set_overview (MvsMovieInfo *self,
+                                      const gchar *overview);
+gboolean mvs_movie_info_set_url (MvsMovieInfo *self, const gchar *url);
+gboolean mvs_movie_info_set_schedule (MvsMovieInfo *self,
+                                      const gchar *schedule);
+
+G_END_DECLS
+
+#endif /* _MVS_MOVIE_INFO */