Movie Info: First GObject version
[maevies] / src / mvs-movie-info.c
1 /*
2  * mvs-movie-info.c
3  *
4  * This file is part of maevies
5  * Copyright (C) 2010 Simón Pena <spenap@gmail.com>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License as
9  * published by the Free Software Foundation; either version 3 of the
10  * License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * General Public License for more details.
16  *
17  */
18
19 #include "mvs-movie-info.h"
20
21 G_DEFINE_TYPE (MvsMovieInfo, mvs_movie_info, G_TYPE_OBJECT)
22
23 enum {
24         PROP_0,
25         PROP_HAS_STINGERS,
26         PROP_TITLE,
27         PROP_DIRECTOR,
28         PROP_CAST,
29         PROP_RANKING,
30         PROP_RELEASE_DATE,
31         PROP_OVERVIEW,
32         PROP_URL,
33         PROP_SCHEDULE,
34 };
35
36 #define GET_PRIVATE(o) \
37   (G_TYPE_INSTANCE_GET_PRIVATE ((o), MVS_TYPE_MOVIE_INFO, MvsMovieInfoPrivate))
38
39 struct _MvsMovieInfoPrivate {
40         gboolean has_stingers;
41         gchar *title;
42         gchar *director;
43         gchar *cast;
44         gfloat ranking;
45         gchar *release_date;
46         gchar *overview;
47         gchar *url;
48         gchar *schedule;
49 };
50
51 static void
52 mvs_movie_info_get_property (GObject *object, guint property_id,
53                          GValue *value, GParamSpec *pspec)
54 {
55         MvsMovieInfo *self = MVS_MOVIE_INFO (object);
56
57         switch (property_id) {
58         case PROP_HAS_STINGERS:
59                 g_value_set_boolean (value, self->priv->has_stingers);
60                 break;
61         case PROP_TITLE:
62                 g_value_set_string (value, self->priv->title);
63                 break;
64         case PROP_DIRECTOR:
65                 g_value_set_string (value, self->priv->director);
66                 break;
67         case PROP_CAST:
68                 g_value_set_string (value, self->priv->cast);
69                 break;
70         case PROP_RANKING:
71                 g_value_set_float (value, self->priv->ranking);
72                 break;
73         case PROP_RELEASE_DATE:
74                 g_value_set_string (value, self->priv->release_date);
75                 break;
76         case PROP_OVERVIEW:
77                 g_value_set_string (value, self->priv->overview);
78                 break;
79         case PROP_URL:
80                 g_value_set_string (value, self->priv->url);
81                 break;
82         case PROP_SCHEDULE:
83                 g_value_set_string (value, self->priv->schedule);
84                 break;
85         default:
86                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
87         }
88 }
89
90 static void
91 mvs_movie_info_set_property (GObject *object, guint property_id,
92                          const GValue *value, GParamSpec *pspec)
93 {
94         MvsMovieInfo *self = MVS_MOVIE_INFO (object);
95         GDate *date = NULL;
96
97         switch (property_id) {
98         case PROP_HAS_STINGERS:
99                 mvs_movie_info_set_stingers (self, g_value_get_boolean (value));
100                 break;
101         case PROP_TITLE:
102                 mvs_movie_info_set_title (self, g_value_get_string (value));
103                 break;
104         case PROP_DIRECTOR:
105                 mvs_movie_info_set_director (self, g_value_get_string (value));
106                 break;
107         case PROP_CAST:
108                 mvs_movie_info_set_cast (self, g_value_get_string (value));
109                 break;
110         case PROP_RANKING:
111                 mvs_movie_info_set_ranking (self, g_value_get_float (value));
112                 break;
113         case PROP_RELEASE_DATE:
114                 mvs_movie_info_set_release_date (self, g_value_get_string (value));
115                 break;
116         case PROP_OVERVIEW:
117                 mvs_movie_info_set_overview (self, g_value_get_string (value));
118                 break;
119         case PROP_URL:
120                 mvs_movie_info_set_url (self, g_value_get_string (value));
121                 break;
122         case PROP_SCHEDULE:
123                 mvs_movie_info_set_schedule (self, g_value_get_string (value));
124                 break;
125         default:
126                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
127         }
128 }
129
130 static void
131 mvs_movie_info_finalize (GObject *object)
132 {
133         MvsMovieInfo *self = MVS_MOVIE_INFO (object);
134
135         g_free (self->priv->cast);
136         g_free (self->priv->director);
137         g_free (self->priv->overview);
138         g_free (self->priv->release_date);
139         g_free (self->priv->schedule);
140         g_free (self->priv->title);
141         g_free (self->priv->url);
142
143         G_OBJECT_CLASS (mvs_movie_info_parent_class)->finalize (object);
144 }
145
146 static void
147 mvs_movie_info_class_init (MvsMovieInfoClass *klass)
148 {
149         GObjectClass *object_class = G_OBJECT_CLASS (klass);
150
151         g_type_class_add_private (klass, sizeof (MvsMovieInfoPrivate));
152
153         object_class->get_property = mvs_movie_info_get_property;
154         object_class->set_property = mvs_movie_info_set_property;
155         object_class->finalize = mvs_movie_info_finalize;
156
157
158         g_object_class_install_property
159                 (object_class, PROP_CAST,
160                  g_param_spec_string ("cast", "Movie cast", "The movie cast",
161                                  NULL,
162                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
163
164         g_object_class_install_property
165                 (object_class, PROP_DIRECTOR,
166                  g_param_spec_string ("director", "Movie director", "The movie director",
167                                  NULL,
168                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
169
170         g_object_class_install_property
171                 (object_class, PROP_HAS_STINGERS,
172                  g_param_spec_boolean ("stingers", "Has stingers", "The movie has stingers",
173                                  FALSE,
174                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
175
176         g_object_class_install_property
177                 (object_class, PROP_OVERVIEW,
178                  g_param_spec_string ("overview", "Movie overview", "The movie overview",
179                                  NULL,
180                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
181
182         g_object_class_install_property
183                 (object_class, PROP_RANKING,
184                  g_param_spec_float ("ranking", "Movie ranking", "The movie ranking",
185                                  0.0,
186                                  10.0,
187                                  5.0,
188                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
189
190         g_object_class_install_property
191                 (object_class, PROP_RELEASE_DATE,
192                  g_param_spec_string ("release", "Movie release date", "The movie release date",
193                                  NULL,
194                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
195
196         g_object_class_install_property
197                 (object_class, PROP_SCHEDULE,
198                  g_param_spec_string ("schedule", "Movie schedule", "The movie schedule",
199                                  NULL,
200                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
201
202         g_object_class_install_property
203                 (object_class, PROP_TITLE,
204                  g_param_spec_string ("title", "Movie title", "The movie title",
205                                  NULL,
206                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
207
208         g_object_class_install_property
209                 (object_class, PROP_URL,
210                  g_param_spec_string ("url", "Movie URL", "The movie url",
211                                  NULL,
212                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
213 }
214
215 static void
216 mvs_movie_info_init (MvsMovieInfo *self)
217 {
218         self->priv = GET_PRIVATE (self);
219         self->priv->cast = NULL;
220         self->priv->director = NULL;
221         self->priv->has_stingers = FALSE;
222         self->priv->overview = NULL;
223         self->priv->ranking = 5;
224         self->priv->release_date = NULL;
225         self->priv->schedule = NULL;
226         self->priv->title = NULL;
227         self->priv->url = NULL;
228 }
229
230 MvsMovieInfo*
231 mvs_movie_info_new (void)
232 {
233         return g_object_new (MVS_TYPE_MOVIE_INFO, NULL);
234 }
235
236 gboolean
237 mvs_movie_info_set_stingers (MvsMovieInfo *self, gboolean has_stingers)
238 {
239         g_return_val_if_fail (self, FALSE);
240
241         self->priv->has_stingers = has_stingers;
242
243         return TRUE;
244 }
245
246 gboolean
247 mvs_movie_info_set_title (MvsMovieInfo *self, const gchar *title)
248 {
249         g_return_val_if_fail (self, FALSE);
250
251         g_free (self->priv->title);
252
253         self->priv->title = g_strdup (title);
254
255         return TRUE;
256 }
257
258 gboolean
259 mvs_movie_info_set_director (MvsMovieInfo *self, const gchar *director)
260 {
261         g_return_val_if_fail (self, FALSE);
262
263         g_free (self->priv->director);
264
265         self->priv->director = g_strdup (director);
266
267         return TRUE;
268 }
269
270 gboolean
271 mvs_movie_info_set_cast (MvsMovieInfo *self, const gchar *cast)
272 {
273         g_return_val_if_fail (self, FALSE);
274
275         g_free (self->priv->cast);
276
277         self->priv->cast = g_strdup (cast);
278
279         return TRUE;
280 }
281
282 gboolean
283 mvs_movie_info_set_ranking (MvsMovieInfo *self, gfloat ranking)
284 {
285         g_return_val_if_fail (self, FALSE);
286         g_return_val_if_fail (ranking < 10 && ranking > 0, FALSE);
287
288         self->priv->ranking = ranking;
289
290         return FALSE;
291 }
292
293 gboolean
294 mvs_movie_info_set_release_date (MvsMovieInfo *self,
295                                           const gchar *released)
296 {
297         g_return_val_if_fail (self, FALSE);
298
299         g_free (self->priv->release_date);
300
301         self->priv->release_date = g_strdup (released);
302
303         return TRUE;
304 }
305 gboolean
306 mvs_movie_info_set_overview (MvsMovieInfo *self,
307                                       const gchar *overview)
308 {
309         g_return_val_if_fail (self, FALSE);
310
311         g_free (self->priv->overview);
312
313         self->priv->overview = g_strdup (overview);
314
315         return TRUE;
316 }
317
318 gboolean
319 mvs_movie_info_set_url (MvsMovieInfo *self, const gchar *url)
320 {
321         g_return_val_if_fail (self, FALSE);
322
323         g_free (self->priv->url);
324
325         self->priv->url = g_strdup (url);
326
327         return TRUE;
328 }
329
330 gboolean
331 mvs_movie_info_set_schedule (MvsMovieInfo *self,
332                                       const gchar *schedule)
333 {
334         g_return_val_if_fail (self, FALSE);
335
336         g_free (self->priv->schedule);
337
338         self->priv->schedule = g_strdup (schedule);
339
340         return TRUE;
341 }