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