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