Added tmdb-image support
[maevies] / src / mvs-tmdb-movie.c
1 /*
2  * mvs-tmdb-movie.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-movie.h"
20
21 G_DEFINE_TYPE (MvsTmdbMovie, mvs_tmdb_movie, G_TYPE_OBJECT)
22
23 enum {
24         PROP_0,
25         PROP_SCORE,
26         PROP_POPULARITY,
27         PROP_TRANSLATED,
28         PROP_LANGUAGE,
29         PROP_NAME,
30         PROP_ALT_NAME,
31         PROP_TYPE,
32         PROP_ID,
33         PROP_IMDB_ID,
34         PROP_URL,
35         PROP_RATING,
36         PROP_CERTIFICATION,
37         PROP_OVERVIEW,
38         PROP_RELEASED,
39         PROP_IMAGES,
40         PROP_LAST_MODIFIED,
41 };
42
43 #define GET_PRIVATE(o) \
44   (G_TYPE_INSTANCE_GET_PRIVATE ((o), MVS_TYPE_TMDB_MOVIE, MvsTmdbMoviePrivate))
45
46 struct _MvsTmdbMoviePrivate {
47         gchar *score;
48         gchar *popularity;
49         gchar *translated;
50         gchar *language;
51         gchar *name;
52         gchar *alt_name;
53         gchar *type;
54         gchar *id;
55         gchar *imdb_id;
56         gchar *url;
57         gchar *rating;
58         gchar *certification;
59         gchar *overview;
60         gchar *released;
61         GList *images;
62         gchar *last_modified;
63 };
64
65 static void
66 mvs_tmdb_movie_get_property (GObject *object, guint property_id,
67                          GValue *value, GParamSpec *pspec)
68 {
69         MvsTmdbMovie *self = MVS_TMDB_MOVIE (object);
70
71         switch (property_id) {
72         case PROP_ALT_NAME:
73                 g_value_set_string (value, self->priv->alt_name);
74                 break;
75         case PROP_CERTIFICATION:
76                 g_value_set_string (value, self->priv->certification);
77                 break;
78         case PROP_ID:
79                 g_value_set_string (value, self->priv->id);
80                 break;
81         case PROP_IMDB_ID:
82                 g_value_set_string (value, self->priv->imdb_id);
83                 break;
84         case PROP_LANGUAGE:
85                 g_value_set_string (value, self->priv->language);
86                 break;
87         case PROP_LAST_MODIFIED:
88                 g_value_set_string (value, self->priv->last_modified);
89                 break;
90         case PROP_NAME:
91                 g_value_set_string (value, self->priv->name);
92                 break;
93         case PROP_OVERVIEW:
94                 g_value_set_string (value, self->priv->overview);
95                 break;
96         case PROP_POPULARITY:
97                 g_value_set_string (value, self->priv->popularity);
98                 break;
99         case PROP_RATING:
100                 g_value_set_string (value, self->priv->rating);
101                 break;
102         case PROP_RELEASED:
103                 g_value_set_string (value, self->priv->released);
104                 break;
105         case PROP_SCORE:
106                 g_value_set_string (value, self->priv->score);
107                 break;
108         case PROP_TRANSLATED:
109                 g_value_set_string (value, self->priv->id);
110                 break;
111         case PROP_TYPE:
112                 g_value_set_string (value, self->priv->id);
113                 break;
114         case PROP_URL:
115                 g_value_set_string (value, self->priv->url);
116                 break;
117         default:
118                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
119         }
120 }
121
122 static void
123 mvs_tmdb_movie_set_property (GObject *object, guint property_id,
124                          const GValue *value, GParamSpec *pspec)
125 {
126         MvsTmdbMovie *self = MVS_TMDB_MOVIE (object);
127
128         switch (property_id) {
129         case PROP_ALT_NAME:
130                 mvs_tmdb_movie_set_alt_name (self, g_value_get_string (value));
131                 break;
132         case PROP_CERTIFICATION:
133                 mvs_tmdb_movie_set_certification (self,
134                                 g_value_get_string (value));
135                 break;
136         case PROP_ID:
137                 mvs_tmdb_movie_set_id (self,
138                                 g_value_get_string (value));
139                 break;
140         case PROP_IMDB_ID:
141                 mvs_tmdb_movie_set_imdb_id (self,
142                                 g_value_get_string (value));
143                 break;
144         case PROP_LANGUAGE:
145                 mvs_tmdb_movie_set_language (self,
146                                 g_value_get_string (value));
147                 break;
148         case PROP_LAST_MODIFIED:
149                 mvs_tmdb_movie_set_last_modified (self,
150                                 g_value_get_string (value));
151                 break;
152         case PROP_NAME:
153                 mvs_tmdb_movie_set_name (self,
154                                 g_value_get_string (value));
155                 break;
156         case PROP_OVERVIEW:
157                 mvs_tmdb_movie_set_overview (self,
158                                 g_value_get_string (value));
159                 break;
160         case PROP_POPULARITY:
161                 mvs_tmdb_movie_set_popularity (self,
162                                 g_value_get_string (value));
163                 break;
164         case PROP_RATING:
165                 mvs_tmdb_movie_set_rating (self,
166                                 g_value_get_string (value));
167                 break;
168         case PROP_RELEASED:
169                 mvs_tmdb_movie_set_released (self,
170                                 g_value_get_string (value));
171                 break;
172         case PROP_SCORE:
173                 mvs_tmdb_movie_set_score (self,
174                                 g_value_get_string (value));
175                 break;
176         case PROP_TRANSLATED:
177                 mvs_tmdb_movie_set_translated (self,
178                                 g_value_get_string (value));
179                 break;
180         case PROP_TYPE:
181                 mvs_tmdb_movie_set_type (self,
182                                 g_value_get_string (value));
183                 break;
184         case PROP_URL:
185                 mvs_tmdb_movie_set_url (self,
186                                 g_value_get_string (value));
187                 break;
188         default:
189                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
190         }
191 }
192
193 static void
194 mvs_tmdb_movie_finalize (GObject *object)
195 {
196         MvsTmdbMovie *self = MVS_TMDB_MOVIE (object);
197
198         g_free (self->priv->alt_name);
199         g_free (self->priv->certification);
200         g_free (self->priv->id);
201         g_free (self->priv->imdb_id);
202         g_free (self->priv->language);
203         g_free (self->priv->last_modified);
204         g_free (self->priv->name);
205         g_free (self->priv->overview);
206         g_free (self->priv->popularity);
207         g_free (self->priv->rating);
208         g_free (self->priv->released);
209         g_free (self->priv->score);
210         g_free (self->priv->translated);
211         g_free (self->priv->type);
212         g_free (self->priv->url);
213
214         g_list_foreach (self->priv->images, (GFunc) g_object_unref, NULL);
215         g_list_free (self->priv->images);
216
217         G_OBJECT_CLASS (mvs_tmdb_movie_parent_class)->finalize (object);
218 }
219
220 static void
221 mvs_tmdb_movie_class_init (MvsTmdbMovieClass *klass)
222 {
223         GObjectClass *object_class = G_OBJECT_CLASS (klass);
224
225         g_type_class_add_private (klass, sizeof (MvsTmdbMoviePrivate));
226
227         object_class->get_property = mvs_tmdb_movie_get_property;
228         object_class->set_property = mvs_tmdb_movie_set_property;
229         object_class->finalize = mvs_tmdb_movie_finalize;
230
231         g_object_class_install_property
232                 (object_class, PROP_ALT_NAME,
233                  g_param_spec_string ("alternative_name", "Alternative name",
234                                  "The movie alternative name",
235                                  NULL,
236                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
237
238         g_object_class_install_property
239                 (object_class, PROP_CERTIFICATION,
240                  g_param_spec_string ("certification", "Movie certification",
241                                  "The movie certification",
242                                  NULL,
243                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
244
245         g_object_class_install_property
246                 (object_class, PROP_ID,
247                  g_param_spec_string ("id", "Movie ID", "The movie ID",
248                                  NULL,
249                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
250
251         g_object_class_install_property
252                 (object_class, PROP_IMDB_ID,
253                  g_param_spec_string ("imdb_id", "Movie IMDB ID",
254                                  "The movie IMDB ID",
255                                  NULL,
256                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
257
258         g_object_class_install_property
259                 (object_class, PROP_LANGUAGE,
260                  g_param_spec_string ("language", "Movie language",
261                                  "The movie language",
262                                  NULL,
263                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
264
265         g_object_class_install_property
266                 (object_class, PROP_LAST_MODIFIED,
267                  g_param_spec_string ("last_modified_at",
268                                  "Movie last modified date",
269                                  "The movie last modification date",
270                                  NULL,
271                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
272
273         g_object_class_install_property
274                 (object_class, PROP_NAME,
275                  g_param_spec_string ("name", "Movie name", "The movie name",
276                                  NULL,
277                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
278
279         g_object_class_install_property
280                 (object_class, PROP_OVERVIEW,
281                  g_param_spec_string ("overview", "Movie overview", "The movie overview",
282                                  NULL,
283                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
284
285         g_object_class_install_property
286                 (object_class, PROP_POPULARITY,
287                  g_param_spec_string ("popularity", "Movie popularity", "The movie popularity",
288                                  NULL,
289                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
290
291         g_object_class_install_property
292                 (object_class, PROP_RATING,
293                  g_param_spec_string ("rating", "Movie rating", "The movie rating",
294                                  NULL,
295                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
296
297         g_object_class_install_property
298                 (object_class, PROP_RELEASED,
299                  g_param_spec_string ("released", "Movie released date", "The movie released date",
300                                  NULL,
301                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
302
303         g_object_class_install_property
304                 (object_class, PROP_SCORE,
305                  g_param_spec_string ("score", "Movie score", "The movie score",
306                                  NULL,
307                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
308
309         g_object_class_install_property
310                 (object_class, PROP_TRANSLATED,
311                  g_param_spec_string ("translated", "Movie translated status", "Tells if the movie is translated",
312                                  NULL,
313                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
314
315         g_object_class_install_property
316                         (object_class, PROP_TYPE,
317                          g_param_spec_string ("type", "Movie type", "The movie type",
318                                  NULL,
319                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
320
321         g_object_class_install_property
322                         (object_class, PROP_URL,
323                          g_param_spec_string ("url", "Movie url", "The movie url",
324                                  NULL,
325                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
326 }
327
328 static void
329 mvs_tmdb_movie_init (MvsTmdbMovie *self)
330 {
331         self->priv = GET_PRIVATE (self);
332
333         self->priv->alt_name = NULL;
334         self->priv->certification = NULL;
335         self->priv->id = NULL;
336         self->priv->images = NULL;
337         self->priv->imdb_id = NULL;
338         self->priv->language = NULL;
339         self->priv->last_modified = NULL;
340         self->priv->name = NULL;
341         self->priv->overview = NULL;
342         self->priv->popularity = NULL;
343         self->priv->rating = NULL;
344         self->priv->released = NULL;
345         self->priv->score = NULL;
346         self->priv->translated = NULL;
347         self->priv->type = NULL;
348         self->priv->url = NULL;
349 }
350
351 MvsTmdbMovie*
352 mvs_tmdb_movie_new (void)
353 {
354         return g_object_new (MVS_TYPE_TMDB_MOVIE, NULL);
355 }
356
357 gboolean
358 set_property (gchar **property, const gchar *value)
359 {
360         g_free (*property);
361         *property = g_strdup (value);
362
363         return *property != NULL;
364 }
365
366 gboolean
367 mvs_tmdb_movie_set_alt_name (MvsTmdbMovie *self, const gchar *alt_name)
368 {
369         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
370         return set_property (&self->priv->alt_name, alt_name);
371 }
372
373 const gchar*
374 mvs_tmdb_movie_get_alt_name (MvsTmdbMovie *self)
375 {
376         return self->priv->alt_name;
377 }
378
379 gboolean
380 mvs_tmdb_movie_set_certification (MvsTmdbMovie *self,
381                                   const gchar *certification)
382 {
383         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
384         return set_property (&self->priv->certification, certification);
385 }
386
387 const gchar*
388 mvs_tmdb_movie_get_certification (MvsTmdbMovie *self)
389 {
390         return self->priv->certification;
391 }
392
393 gboolean
394 mvs_tmdb_movie_set_id (MvsTmdbMovie *self, const gchar *id)
395 {
396         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
397         return set_property (&self->priv->id, id);
398 }
399
400 const gchar*
401 mvs_tmdb_movie_get_id (MvsTmdbMovie *self)
402 {
403         return self->priv->id;
404 }
405
406 gboolean
407 mvs_tmdb_movie_set_images (MvsTmdbMovie *self, GList *images)
408 {
409         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
410         self->priv->images = images;
411         return TRUE;
412 }
413
414 GList*
415 mvs_tmdb_movie_get_images (MvsTmdbMovie *self)
416 {
417         return self->priv->images;
418 }
419
420 gboolean
421 mvs_tmdb_movie_set_imdb_id (MvsTmdbMovie *self, const gchar *imdb_id)
422 {
423         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
424         return set_property (&self->priv->imdb_id, imdb_id);
425 }
426
427 const gchar*
428 mvs_tmdb_movie_get_imdb_id (MvsTmdbMovie *self)
429 {
430         return self->priv->imdb_id;
431 }
432
433 gboolean
434 mvs_tmdb_movie_set_language (MvsTmdbMovie *self, const gchar *language)
435 {
436         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
437         return set_property (&self->priv->language, language);
438 }
439
440 const gchar*
441 mvs_tmdb_movie_get_language (MvsTmdbMovie *self)
442 {
443         return self->priv->language;
444 }
445
446 gboolean
447 mvs_tmdb_movie_set_last_modified (MvsTmdbMovie *self,
448                                   const gchar *last_modified)
449 {
450         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
451         return set_property (&self->priv->last_modified, last_modified);
452 }
453
454 const gchar*
455 mvs_tmdb_movie_get_last_movified (MvsTmdbMovie *self)
456 {
457         return self->priv->last_modified;
458 }
459
460 gboolean
461 mvs_tmdb_movie_set_name (MvsTmdbMovie *self, const gchar *name)
462 {
463         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
464         return set_property (&self->priv->name, name);
465 }
466
467 const gchar*
468 mvs_tmdb_movie_get_name (MvsTmdbMovie *self)
469 {
470         return self->priv->name;
471 }
472
473 gboolean
474 mvs_tmdb_movie_set_overview (MvsTmdbMovie *self, const gchar *overview)
475 {
476         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
477         return set_property (&self->priv->overview, overview);
478 }
479
480 const gchar*
481 mvs_tmdb_movie_get_overview (MvsTmdbMovie *self)
482 {
483         return self->priv->overview;
484 }
485
486 gboolean
487 mvs_tmdb_movie_set_popularity (MvsTmdbMovie *self, const gchar *popularity)
488 {
489         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
490         return set_property (&self->priv->popularity, popularity);
491 }
492
493 const gchar*
494 mvs_tmdb_movie_get_popularity (MvsTmdbMovie *self)
495 {
496         return self->priv->popularity;
497 }
498
499 gboolean
500 mvs_tmdb_movie_set_rating (MvsTmdbMovie *self, const gchar *rating)
501 {
502         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
503         return set_property (&self->priv->rating, rating);
504 }
505
506 const gchar*
507 mvs_tmdb_movie_get_rating (MvsTmdbMovie *self)
508 {
509         return self->priv->rating;
510 }
511
512 gboolean
513 mvs_tmdb_movie_set_released (MvsTmdbMovie *self, const gchar *released)
514 {
515         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
516         return set_property (&self->priv->released, released);
517 }
518
519 const gchar*
520 mvs_tmdb_movie_get_released (MvsTmdbMovie *self)
521 {
522         return self->priv->released;
523 }
524
525 gboolean
526 mvs_tmdb_movie_set_score (MvsTmdbMovie *self, const gchar *score)
527 {
528         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
529         return set_property (&self->priv->score, score);
530 }
531
532 const gchar*
533 mvs_tmdb_movie_get_score (MvsTmdbMovie *self)
534 {
535         return self->priv->score;
536 }
537
538 gboolean
539 mvs_tmdb_movie_set_translated (MvsTmdbMovie *self, const gchar *translated)
540 {
541         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
542         return set_property (&self->priv->translated, translated);
543 }
544
545 const gchar*
546 mvs_tmdb_movie_get_translated (MvsTmdbMovie *self)
547 {
548         return self->priv->translated;
549 }
550
551 gboolean
552 mvs_tmdb_movie_set_type (MvsTmdbMovie *self, const gchar *type)
553 {
554         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
555         return set_property (&self->priv->type, type);
556 }
557
558 const gchar*
559 mvs_tmdb_movie_get_source_type (MvsTmdbMovie *self)
560 {
561         return self->priv->type;
562 }
563
564 gboolean
565 mvs_tmdb_movie_set_url (MvsTmdbMovie *self, const gchar *url)
566 {
567         g_return_val_if_fail (MVS_TMDB_MOVIE (self), FALSE);
568         return set_property (&self->priv->url, url);
569 }
570
571 const gchar*
572 mvs_tmdb_movie_get_url (MvsTmdbMovie *self)
573 {
574         return self->priv->url;
575 }
576
577 void
578 mvs_tmdb_movie_print (MvsTmdbMovie *self)
579 {
580         g_return_if_fail (MVS_IS_TMDB_MOVIE (self));
581
582         g_print ("[Alternative name]: %s\n", self->priv->alt_name);
583         g_print ("[Certification]: %s\n", self->priv->certification);
584         g_print ("[Id]: %s\n", self->priv->id);
585         g_print ("[Images]: %d\n", g_list_length(self->priv->images));
586         g_print ("[IMDB Id]: %s\n", self->priv->imdb_id);
587         g_print ("[Language]: %s\n", self->priv->language);
588         g_print ("[Last modified]: %s\n", self->priv->last_modified);
589         g_print ("[Name]: %s\n", self->priv->name);
590         g_print ("[Overview]: %s\n", self->priv->overview);
591         g_print ("[Popularity]: %s\n", self->priv->popularity);
592         g_print ("[Rating]: %s\n", self->priv->rating);
593         g_print ("[Released]: %s\n", self->priv->released);
594         g_print ("[Score]: %s\n", self->priv->score);
595         g_print ("[Translated]: %s\n", self->priv->translated);
596         g_print ("[Type]: %s\n", self->priv->type);
597         g_print ("[URL]: %s\n", self->priv->url);
598 }