WATC Movie: Improved WATC support
authorSimón Pena <spenap@gmail.com>
Mon, 17 May 2010 13:56:31 +0000 (15:56 +0200)
committerSimón Pena <spenap@gmail.com>
Mon, 17 May 2010 14:17:28 +0000 (16:17 +0200)
The WATC service sends the name appended to the year
and stingers info:

* Constructor updated so that it takes the raw name
* 3-state support is added for stingers (YES, NO, UNKNOWN)
* A print method is added

src/mvs-watc-movie.c
src/mvs-watc-movie.h

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);
 }
index a05f783..7bf7e3b 100644 (file)
 
 G_BEGIN_DECLS
 
+typedef enum {
+        MVS_STINGERS_UNKNOWN,
+        MVS_STINGERS_YES,
+        MVS_STINGERS_NO
+} MvsStingers;
+
 #define MVS_TYPE_WATC_MOVIE mvs_watc_movie_get_type()
 #define MVS_WATC_MOVIE(obj) \
   (G_TYPE_CHECK_INSTANCE_CAST ((obj), MVS_TYPE_WATC_MOVIE, MvsWatcMovie))
@@ -49,7 +55,7 @@ typedef struct {
 } MvsWatcMovieClass;
 
 GType mvs_watc_movie_get_type (void);
-MvsWatcMovie* mvs_watc_movie_new (void);
+MvsWatcMovie* mvs_watc_movie_new (const gchar *raw_name);
 
 gboolean
 mvs_watc_movie_set_name (MvsWatcMovie *self, const gchar *name);
@@ -58,11 +64,14 @@ const gchar*
 mvs_watch_movie_get_name (MvsWatcMovie *self);
 
 gboolean
-mvs_watc_movie_set_stingers (MvsWatcMovie *self, gboolean has_stingers);
+mvs_watc_movie_set_stingers (MvsWatcMovie *self, MvsStingers stingers);
 
-gboolean
+MvsStingers
 mvs_watch_movie_get_stingers (MvsWatcMovie *self);
 
+void
+mvs_watch_movie_print (MvsWatcMovie *self);
+
 G_END_DECLS
 
 #endif /* _MVS_WATC_MOVIE */