WATC Movie: Improved WATC support
[maevies] / src / mvs-watc-movie.c
index e490122..5cdc9f5 100644 (file)
@@ -31,7 +31,7 @@ enum {
 
 struct _MvsWatcMoviePrivate {
         gchar *name;
-        gboolean has_stingers;
+        MvsStingers stingers;
 };
 
 static void
@@ -45,7 +45,7 @@ mvs_watc_movie_get_property (GObject *object, guint property_id,
                 g_value_set_string (value, self->priv->name);
                 break;
         case PROP_STINGERS:
-                g_value_set_boolean (value, self->priv->has_stingers);
+                g_value_set_enum (value, self->priv->stingers);
                 break;
        default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -63,7 +63,7 @@ mvs_watc_movie_set_property (GObject *object, guint property_id,
                 mvs_watc_movie_set_name (self, g_value_get_string (value));
                 break;
         case PROP_STINGERS:
-                mvs_watc_movie_set_stingers (self, g_value_get_boolean (value));
+                mvs_watc_movie_set_stingers (self, g_value_get_enum (value));
                 break;
         default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -100,9 +100,10 @@ mvs_watc_movie_class_init (MvsWatcMovieClass *klass)
 
         g_object_class_install_property
                 (object_class, PROP_STINGERS,
-                 g_param_spec_boolean ("stingers", "Movie stingers",
+                 g_param_spec_enum ("stingers", "Movie stingers",
                                  "Tells if movie has stingers",
-                                 FALSE,
+                                 G_TYPE_ENUM,
+                                 MVS_STINGERS_UNKNOWN,
                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 }
 
@@ -112,13 +113,27 @@ mvs_watc_movie_init (MvsWatcMovie *self)
         self->priv = GET_PRIVATE (self);
 
         self->priv->name = NULL;
-        self->priv->has_stingers = FALSE;
+        self->priv->stingers = MVS_STINGERS_UNKNOWN;
 }
 
 MvsWatcMovie*
-mvs_watc_movie_new (void)
+mvs_watc_movie_new (const gchar *raw_name)
 {
-        return g_object_new (MVS_TYPE_WATC_MOVIE, NULL);
+        MvsWatcMovie *instance = g_object_new (MVS_TYPE_WATC_MOVIE, NULL);
+
+        /* The raw name comes with the format
+         * $(MOVIE_NAME) $(YEAR)$(STINGERS) */
+
+        if (g_str_has_suffix (raw_name, "*"))
+                instance->priv->stingers = MVS_STINGERS_YES;
+        else if (g_str_has_suffix (raw_name, "?"))
+                instance->priv->stingers = MVS_STINGERS_UNKNOWN;
+        else
+                instance->priv->stingers = MVS_STINGERS_NO;
+
+        mvs_watc_movie_set_name (instance, raw_name);
+
+        return instance;
 }
 
 gboolean
@@ -134,11 +149,14 @@ mvs_watc_movie_set_name (MvsWatcMovie *self, const gchar *name)
 }
 
 gboolean
-mvs_watc_movie_set_stingers (MvsWatcMovie *self, gboolean has_stingers)
+mvs_watc_movie_set_stingers (MvsWatcMovie *self, MvsStingers stingers)
 {
         g_return_val_if_fail (MVS_IS_WATC_MOVIE (self), FALSE);
+        g_return_val_if_fail (stingers == MVS_STINGERS_UNKNOWN ||
+                              stingers == MVS_STINGERS_YES ||
+                              stingers == MVS_STINGERS_NO, FALSE);
 
-        self->priv->has_stingers = has_stingers;
+        self->priv->stingers = stingers;
 
         return TRUE;
 }
@@ -151,10 +169,27 @@ mvs_watc_movie_get_name (MvsWatcMovie *self)
         return self->priv->name;
 }
 
-gboolean
+MvsStingers
 mvs_watc_movie_get_stingers (MvsWatcMovie *self)
 {
         g_return_val_if_fail (MVS_IS_WATC_MOVIE (self), FALSE);
 
-        return self->priv->has_stingers;
+        return self->priv->stingers;
+}
+
+void
+mvs_watc_movie_print (MvsWatcMovie *self)
+{
+        const gchar *has_stingers = NULL;
+        g_return_if_fail (MVS_IS_WATC_MOVIE (self));
+
+        if (self->priv->stingers == MVS_STINGERS_NO)
+                has_stingers = "No";
+        else if (self->priv->stingers == MVS_STINGERS_YES)
+                has_stingers = "Yes";
+        else
+                has_stingers = "Unknown";
+
+        g_print ("[Name]: %s\n", self->priv->name);
+        g_print ("[Stingers]: %s\n", has_stingers);
 }