4 * This file is part of maevies
5 * Copyright (C) 2010 Simón Pena <spenap@gmail.com>
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.
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.
21 #include "mvs-watc-movie.h"
23 G_DEFINE_TYPE (MvsWatcMovie, mvs_watc_movie, G_TYPE_OBJECT)
32 #define GET_PRIVATE(o) \
33 (G_TYPE_INSTANCE_GET_PRIVATE ((o), MVS_TYPE_WATC_MOVIE, MvsWatcMoviePrivate))
35 struct _MvsWatcMoviePrivate {
42 mvs_watc_movie_get_property (GObject *object, guint property_id,
43 GValue *value, GParamSpec *pspec)
45 MvsWatcMovie *self = MVS_WATC_MOVIE (object);
47 switch (property_id) {
49 g_value_set_string (value, self->priv->name);
52 g_value_set_enum (value, self->priv->stingers);
55 g_value_set_string (value, self->priv->year);
58 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
63 mvs_watc_movie_set_property (GObject *object, guint property_id,
64 const GValue *value, GParamSpec *pspec)
66 MvsWatcMovie *self = MVS_WATC_MOVIE (object);
68 switch (property_id) {
70 mvs_watc_movie_set_name (self, g_value_get_string (value));
73 mvs_watc_movie_set_stingers (self, g_value_get_int (value));
76 mvs_watc_movie_set_year (self, g_value_get_string (value));
79 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
84 mvs_watc_movie_finalize (GObject *object)
86 MvsWatcMovie *self = MVS_WATC_MOVIE (object);
88 g_free (self->priv->name);
89 g_free (self->priv->year);
91 G_OBJECT_CLASS (mvs_watc_movie_parent_class)->finalize (object);
95 mvs_watc_movie_class_init (MvsWatcMovieClass *klass)
97 GObjectClass *object_class = G_OBJECT_CLASS (klass);
99 g_type_class_add_private (klass, sizeof (MvsWatcMoviePrivate));
101 object_class->get_property = mvs_watc_movie_get_property;
102 object_class->set_property = mvs_watc_movie_set_property;
103 object_class->finalize = mvs_watc_movie_finalize;
105 g_object_class_install_property
106 (object_class, PROP_NAME,
107 g_param_spec_string ("name", "Movie name",
110 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
112 g_object_class_install_property
113 (object_class, PROP_STINGERS,
114 g_param_spec_int ("stingers", "Movie stingers",
115 "Tells if movie has stingers",
118 MVS_STINGERS_UNKNOWN,
119 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
121 g_object_class_install_property
122 (object_class, PROP_YEAR,
123 g_param_spec_string ("year", "Movie year",
130 mvs_watc_movie_init (MvsWatcMovie *self)
132 self->priv = GET_PRIVATE (self);
134 self->priv->name = NULL;
135 self->priv->stingers = MVS_STINGERS_UNKNOWN;
136 self->priv->year = NULL;
140 mvs_watc_movie_new (const gchar *raw_name)
142 MvsWatcMovie *instance = g_object_new (MVS_TYPE_WATC_MOVIE, NULL);
143 int len = strlen (raw_name);
145 /* The raw name comes with the format
146 * $(MOVIE_NAME) $(YEAR)$(STINGERS)
148 * If stingers are present, actual length is len-1.
149 * If date is present, actual length is len-6
152 if (g_str_has_suffix (raw_name, "*")) {
153 instance->priv->stingers = MVS_STINGERS_YES;
156 else if (g_str_has_suffix (raw_name, "?")) {
157 instance->priv->stingers = MVS_STINGERS_UNKNOWN;
161 instance->priv->stingers = MVS_STINGERS_NO;
163 if (raw_name[len-1] == ')') {
166 gchar *year = g_strndup (raw_name + len +1, 4);
167 mvs_watc_movie_set_year (instance, year);
171 gchar *name = g_strndup (raw_name, len);
173 mvs_watc_movie_set_name (instance, name);
180 mvs_watc_movie_set_name (MvsWatcMovie *self, const gchar *name)
182 g_return_val_if_fail (MVS_IS_WATC_MOVIE (self), FALSE);
184 g_free (self->priv->name);
186 self->priv->name = g_strdup (name);
192 mvs_watc_movie_set_stingers (MvsWatcMovie *self, int stingers)
194 g_return_val_if_fail (MVS_IS_WATC_MOVIE (self), FALSE);
195 g_return_val_if_fail (stingers == MVS_STINGERS_UNKNOWN ||
196 stingers == MVS_STINGERS_YES ||
197 stingers == MVS_STINGERS_NO, FALSE);
199 self->priv->stingers = stingers;
205 mvs_watc_movie_get_name (MvsWatcMovie *self)
207 g_return_val_if_fail (MVS_IS_WATC_MOVIE (self), NULL);
209 return self->priv->name;
213 mvs_watc_movie_get_stingers (MvsWatcMovie *self)
215 g_return_val_if_fail (MVS_IS_WATC_MOVIE (self), FALSE);
217 return self->priv->stingers;
221 mvs_watc_movie_print (MvsWatcMovie *self)
223 const gchar *has_stingers = NULL;
224 g_return_if_fail (MVS_IS_WATC_MOVIE (self));
226 if (self->priv->stingers == MVS_STINGERS_NO)
228 else if (self->priv->stingers == MVS_STINGERS_YES)
229 has_stingers = "Yes";
231 has_stingers = "Unknown";
233 g_print ("[Name]: %s\n", self->priv->name);
234 g_print ("[Stingers]: %s\n", has_stingers);
235 g_print ("[Year]: %s\n",
236 self->priv->year ? self->priv->year : " - ");
240 mvs_watc_movie_set_year (MvsWatcMovie *self, const gchar *year)
242 g_return_val_if_fail (MVS_IS_WATC_MOVIE (self), FALSE);
244 g_free (self->priv->year);
246 self->priv->year = g_strdup (year);
248 return self->priv->year != NULL;
252 mvs_watc_movie_get_year (MvsWatcMovie *self)
254 return self->priv->year;