WATC Movie: Improved WATC support
[maevies] / src / mvs-watc-movie.c
1 /*
2  * mvs-watc-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-watc-movie.h"
20
21 G_DEFINE_TYPE (MvsWatcMovie, mvs_watc_movie, G_TYPE_OBJECT)
22
23 enum {
24         PROP_0,
25         PROP_NAME,
26         PROP_STINGERS,
27 };
28
29 #define GET_PRIVATE(o) \
30   (G_TYPE_INSTANCE_GET_PRIVATE ((o), MVS_TYPE_WATC_MOVIE, MvsWatcMoviePrivate))
31
32 struct _MvsWatcMoviePrivate {
33         gchar *name;
34         MvsStingers stingers;
35 };
36
37 static void
38 mvs_watc_movie_get_property (GObject *object, guint property_id,
39                          GValue *value, GParamSpec *pspec)
40 {
41         MvsWatcMovie *self = MVS_WATC_MOVIE (object);
42
43         switch (property_id) {
44         case PROP_NAME:
45                 g_value_set_string (value, self->priv->name);
46                 break;
47         case PROP_STINGERS:
48                 g_value_set_enum (value, self->priv->stingers);
49                 break;
50        default:
51                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
52         }
53 }
54
55 static void
56 mvs_watc_movie_set_property (GObject *object, guint property_id,
57                          const GValue *value, GParamSpec *pspec)
58 {
59         MvsWatcMovie *self = MVS_WATC_MOVIE (object);
60
61         switch (property_id) {
62         case PROP_NAME:
63                 mvs_watc_movie_set_name (self, g_value_get_string (value));
64                 break;
65         case PROP_STINGERS:
66                 mvs_watc_movie_set_stingers (self, g_value_get_enum (value));
67                 break;
68         default:
69                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
70         }
71 }
72
73 static void
74 mvs_watc_movie_finalize (GObject *object)
75 {
76         MvsWatcMovie *self = MVS_WATC_MOVIE (object);
77
78         g_free (self->priv->name);
79
80         G_OBJECT_CLASS (mvs_watc_movie_parent_class)->finalize (object);
81 }
82
83 static void
84 mvs_watc_movie_class_init (MvsWatcMovieClass *klass)
85 {
86         GObjectClass *object_class = G_OBJECT_CLASS (klass);
87
88         g_type_class_add_private (klass, sizeof (MvsWatcMoviePrivate));
89
90         object_class->get_property = mvs_watc_movie_get_property;
91         object_class->set_property = mvs_watc_movie_set_property;
92         object_class->finalize = mvs_watc_movie_finalize;
93
94         g_object_class_install_property
95                 (object_class, PROP_NAME,
96                  g_param_spec_string ("name", "Movie name",
97                                  "The movie name",
98                                  NULL,
99                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
100
101         g_object_class_install_property
102                 (object_class, PROP_STINGERS,
103                  g_param_spec_enum ("stingers", "Movie stingers",
104                                  "Tells if movie has stingers",
105                                  G_TYPE_ENUM,
106                                  MVS_STINGERS_UNKNOWN,
107                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
108 }
109
110 static void
111 mvs_watc_movie_init (MvsWatcMovie *self)
112 {
113         self->priv = GET_PRIVATE (self);
114
115         self->priv->name = NULL;
116         self->priv->stingers = MVS_STINGERS_UNKNOWN;
117 }
118
119 MvsWatcMovie*
120 mvs_watc_movie_new (const gchar *raw_name)
121 {
122         MvsWatcMovie *instance = g_object_new (MVS_TYPE_WATC_MOVIE, NULL);
123
124         /* The raw name comes with the format
125          * $(MOVIE_NAME) $(YEAR)$(STINGERS) */
126
127         if (g_str_has_suffix (raw_name, "*"))
128                 instance->priv->stingers = MVS_STINGERS_YES;
129         else if (g_str_has_suffix (raw_name, "?"))
130                 instance->priv->stingers = MVS_STINGERS_UNKNOWN;
131         else
132                 instance->priv->stingers = MVS_STINGERS_NO;
133
134         mvs_watc_movie_set_name (instance, raw_name);
135
136         return instance;
137 }
138
139 gboolean
140 mvs_watc_movie_set_name (MvsWatcMovie *self, const gchar *name)
141 {
142         g_return_val_if_fail (MVS_IS_WATC_MOVIE (self), FALSE);
143
144         g_free (self->priv->name);
145
146         self->priv->name = g_strdup (name);
147
148         return TRUE;
149 }
150
151 gboolean
152 mvs_watc_movie_set_stingers (MvsWatcMovie *self, MvsStingers stingers)
153 {
154         g_return_val_if_fail (MVS_IS_WATC_MOVIE (self), FALSE);
155         g_return_val_if_fail (stingers == MVS_STINGERS_UNKNOWN ||
156                               stingers == MVS_STINGERS_YES ||
157                               stingers == MVS_STINGERS_NO, FALSE);
158
159         self->priv->stingers = stingers;
160
161         return TRUE;
162 }
163
164 const gchar*
165 mvs_watc_movie_get_name (MvsWatcMovie *self)
166 {
167         g_return_val_if_fail (MVS_IS_WATC_MOVIE (self), NULL);
168
169         return self->priv->name;
170 }
171
172 MvsStingers
173 mvs_watc_movie_get_stingers (MvsWatcMovie *self)
174 {
175         g_return_val_if_fail (MVS_IS_WATC_MOVIE (self), FALSE);
176
177         return self->priv->stingers;
178 }
179
180 void
181 mvs_watc_movie_print (MvsWatcMovie *self)
182 {
183         const gchar *has_stingers = NULL;
184         g_return_if_fail (MVS_IS_WATC_MOVIE (self));
185
186         if (self->priv->stingers == MVS_STINGERS_NO)
187                 has_stingers = "No";
188         else if (self->priv->stingers == MVS_STINGERS_YES)
189                 has_stingers = "Yes";
190         else
191                 has_stingers = "Unknown";
192
193         g_print ("[Name]: %s\n", self->priv->name);
194         g_print ("[Stingers]: %s\n", has_stingers);
195 }