31f5a2ef361fc8b903053166f39b1142a45a0bbd
[maevies] / src / mvs-tmdb-image.c
1 /*
2  * mvs-tmdb-image.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-tmdb-image.h"
20
21 G_DEFINE_TYPE (MvsTmdbImage, mvs_tmdb_image, G_TYPE_OBJECT)
22
23 enum {
24         PROP_0,
25         PROP_TYPE,
26         PROP_URL,
27         PROP_SIZE,
28         PROP_WIDTH,
29         PROP_HEIGHT,
30         PROP_ID,
31 };
32
33 #define GET_PRIVATE(o) \
34   (G_TYPE_INSTANCE_GET_PRIVATE ((o), MVS_TYPE_TMDB_IMAGE, MvsTmdbImagePrivate))
35
36 struct _MvsTmdbImagePrivate {
37         gchar *type;
38         gchar *url;
39         gchar *size;
40         gint width;
41         gint height;
42         gchar *id;
43 };
44
45 static void
46 mvs_tmdb_image_get_property (GObject *object, guint property_id,
47                          GValue *value, GParamSpec *pspec)
48 {
49         MvsTmdbImage *self = MVS_TMDB_IMAGE (object);
50
51         switch (property_id) {
52         case PROP_TYPE:
53                 g_value_set_string (value, self->priv->type);
54                 break;
55         case PROP_URL:
56                 g_value_set_string (value, self->priv->url);
57                 break;
58         case PROP_SIZE:
59                 g_value_set_string (value, self->priv->size);
60                 break;
61         case PROP_WIDTH:
62                 g_value_set_int (value, self->priv->width);
63                 break;
64         case PROP_HEIGHT:
65                 g_value_set_int (value, self->priv->height);
66                 break;
67         case PROP_ID:
68                 g_value_set_string (value, self->priv->id);
69                 break;
70         default:
71                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
72         }
73 }
74
75 static void
76 mvs_tmdb_image_set_property (GObject *object, guint property_id,
77                          const GValue *value, GParamSpec *pspec)
78 {
79         MvsTmdbImage *self = MVS_TMDB_IMAGE (object);
80
81         switch (property_id) {
82         case PROP_TYPE:
83                 mvs_tmdb_image_set_imagetype (self, g_value_get_string (value));
84                 break;
85         case PROP_URL:
86                 mvs_tmdb_image_set_url (self, g_value_get_string (value));
87                 break;
88         case PROP_SIZE:
89                 mvs_tmdb_image_set_size (self, g_value_get_string (value));
90                 break;
91         case PROP_WIDTH:
92                 mvs_tmdb_image_set_width (self, g_value_get_int (value));
93                 break;
94         case PROP_HEIGHT:
95                 mvs_tmdb_image_set_height (self, g_value_get_int (value));
96                 break;
97         case PROP_ID:
98                 mvs_tmdb_image_set_id (self, g_value_get_string (value));
99                 break;
100         default:
101                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
102         }
103 }
104
105 static void
106 mvs_tmdb_image_finalize (GObject *object)
107 {
108         MvsTmdbImage *self = MVS_TMDB_IMAGE (object);
109
110         g_free (self->priv->type);
111         g_free (self->priv->url);
112         g_free (self->priv->size);
113         g_free (self->priv->id);
114
115         G_OBJECT_CLASS (mvs_tmdb_image_parent_class)->finalize (object);
116 }
117
118 static void
119 mvs_tmdb_image_class_init (MvsTmdbImageClass *klass)
120 {
121         GObjectClass *object_class = G_OBJECT_CLASS (klass);
122
123         g_type_class_add_private (klass, sizeof (MvsTmdbImagePrivate));
124
125         object_class->get_property = mvs_tmdb_image_get_property;
126         object_class->set_property = mvs_tmdb_image_set_property;
127         object_class->finalize = mvs_tmdb_image_finalize;
128
129         g_object_class_install_property
130                 (object_class, PROP_TYPE,
131                  g_param_spec_string ("type", "Image type",
132                                  "The image type",
133                                  NULL,
134                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
135
136         g_object_class_install_property
137                 (object_class, PROP_URL,
138                  g_param_spec_string ("url", "Image url",
139                                  "The image URL",
140                                  NULL,
141                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
142
143         g_object_class_install_property
144                 (object_class, PROP_SIZE,
145                  g_param_spec_string ("size", "Image size",
146                                  "The image size",
147                                  NULL,
148                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
149
150         g_object_class_install_property
151                 (object_class, PROP_WIDTH,
152                  g_param_spec_int ("width", "Image width",
153                                  "The image width",
154                                  0,
155                                  INT_MAX,
156                                  0,
157                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
158
159         g_object_class_install_property
160                 (object_class, PROP_HEIGHT,
161                  g_param_spec_int ("height", "Image height",
162                                  "The image height",
163                                  0,
164                                  INT_MAX,
165                                  0,
166                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
167
168         g_object_class_install_property
169                 (object_class, PROP_ID,
170                  g_param_spec_string ("id", "Image id",
171                                  "The image id",
172                                  NULL,
173                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
174 }
175
176 static void
177 mvs_tmdb_image_init (MvsTmdbImage *self)
178 {
179         self->priv = GET_PRIVATE (self);
180
181         self->priv->type = NULL;
182         self->priv->url = NULL;
183         self->priv->width = 0;
184         self->priv->height = 0;
185         self->priv->size = NULL;
186         self->priv->id = NULL;
187 }
188
189 MvsTmdbImage*
190 mvs_tmdb_image_new ()
191 {
192         return g_object_new (MVS_TYPE_TMDB_IMAGE, NULL);
193 }
194
195 gboolean
196 mvs_tmdb_image_set_imagetype (MvsTmdbImage *self, const gchar *type)
197 {
198         g_return_val_if_fail(MVS_TMDB_IMAGE (self), FALSE);
199
200         g_free (self->priv->type);
201
202         self->priv->type = g_strdup (type);
203
204         return self->priv->type != NULL;
205 }
206
207 const gchar*
208 mvs_tmdb_image_get_imagetype (MvsTmdbImage *self)
209 {
210         return self->priv->type;
211 }
212
213 gboolean
214 mvs_tmdb_image_set_url (MvsTmdbImage *self, const gchar *url)
215 {
216         g_return_val_if_fail(MVS_TMDB_IMAGE (self), FALSE);
217
218         g_free (self->priv->url);
219
220         self->priv->url = g_strdup (url);
221
222         return self->priv->url != NULL;
223 }
224
225 const gchar*
226 mvs_tmdb_image_get_url (MvsTmdbImage *self)
227 {
228         return self->priv->url;
229 }
230
231 gboolean
232 mvs_tmdb_image_set_size (MvsTmdbImage *self, const gchar *size)
233 {
234         g_return_val_if_fail(MVS_TMDB_IMAGE (self), FALSE);
235
236         g_free (self->priv->size);
237
238         self->priv->size = g_strdup (size);
239
240         return self->priv->size != NULL;
241 }
242
243 const gchar*
244 mvs_tmdb_image_get_size (MvsTmdbImage *self)
245 {
246         return self->priv->size;
247 }
248
249 gboolean
250 mvs_tmdb_image_set_id (MvsTmdbImage *self, const gchar *id)
251 {
252         g_return_val_if_fail(MVS_TMDB_IMAGE (self), FALSE);
253
254         g_free (self->priv->id);
255
256         self->priv->id = g_strdup (id);
257
258         return self->priv->id != NULL;
259 }
260
261 const gchar*
262 mvs_tmdb_image_get_id (MvsTmdbImage *self)
263 {
264         return self->priv->id;
265 }
266
267 gboolean
268 mvs_tmdb_image_set_width (MvsTmdbImage *self, gint width)
269 {
270         g_return_val_if_fail(MVS_TMDB_IMAGE (self), FALSE);
271
272         self->priv->width = width;
273
274         return TRUE;
275 }
276
277 gint
278 mvs_tmdb_image_get_width (MvsTmdbImage *self)
279 {
280         return self->priv->width;
281 }
282
283 gboolean
284 mvs_tmdb_image_set_height (MvsTmdbImage *self, gint height)
285 {
286         g_return_val_if_fail(MVS_TMDB_IMAGE (self), FALSE);
287
288         self->priv->height = height;
289
290         return TRUE;
291 }
292
293 gint
294 mvs_tmdb_image_get_height (MvsTmdbImage *self)
295 {
296         return self->priv->width;
297 }
298
299 void
300 mvs_tmdb_image_print (MvsTmdbImage *self)
301 {
302         int i;
303         gchar *value = NULL;
304
305         for (i = 0; i < LAST_FIELD; i ++) {
306                 g_object_get (self, image_fields[i], &value, NULL);
307                 g_print ("*[%s]: %s\n", image_fields[i], value);
308                 g_free (value);
309         }
310 }