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