static void _mex_grilo_feed_content_updated (GrlSource *source, GPtrArray *changed_medias, GrlSourceChangeType change_type, gboolean known_location, MexGriloFeed *feed) { gint i; GrlMedia *media; const gchar *id; MexGriloProgram *program; for (i = 0 ; i < changed_medias->len ; i++) { media = g_ptr_array_index (changed_medias, i); id = grl_media_get_id (media); switch (change_type) { case GRL_CONTENT_CHANGED: program = MEX_GRILO_PROGRAM (mex_feed_lookup (MEX_FEED (feed), id)); /* The policy might be slightly different here... */ if (program != NULL) { mex_grilo_program_set_grilo_media (program, media); } break; case GRL_CONTENT_ADDED: program = MEX_GRILO_PROGRAM (mex_feed_lookup (MEX_FEED (feed), id)); if (program != NULL) { mex_grilo_program_set_grilo_media (program, media); } else { emit_media_added (feed, media); } break; case GRL_CONTENT_REMOVED: program = MEX_GRILO_PROGRAM (mex_feed_lookup (MEX_FEED (feed), id)); if (program != NULL) { mex_model_remove_content (MEX_MODEL (feed), MEX_CONTENT (program)); } break; } } }
static void mex_grilo_program_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { MexGriloProgram *program = MEX_GRILO_PROGRAM (object); switch (property_id) { case PROP_GRILO_MEDIA: mex_grilo_program_set_grilo_media (program, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } }
static void browse_cb (GrlSource *source, guint browse_id, GrlMedia *media, guint remaining, gpointer userdata, const GError *error) { MexGriloFeed *feed = (MexGriloFeed *) userdata; MexGriloFeedPrivate *priv = feed->priv; MexGriloProgram *program; if (error) { g_warning ("Error browsing: %s", error->message); return; } if (priv->op == NULL) { g_warning ("No operation found"); return; } if (priv->op->op_id != browse_id) return; if (media) { /* * FIXME: talk to thomas/lionel/grilo guys about that crasher. We are * being called with what seems to be an invalid media when cancelled. * this is obviously temporary to enable people to work in the meantime */ gconstpointer foo = grl_media_get_id (media); if (!foo) { const gchar *source_name; source_name = grl_source_get_name (GRL_SOURCE (priv->source)); g_warning ("FIXME: oh no, a grilo bug! (on the '%s' source)", source_name); return; } program = MEX_GRILO_PROGRAM (mex_feed_lookup (MEX_FEED (feed), grl_media_get_id (media))); if (program != NULL) { mex_grilo_program_set_grilo_media (program, media); return; } else { emit_media_added (feed, media); g_object_unref (media); } } priv->op->count++; if (remaining == 0) { priv->op->op_id = 0; /* Emit completed signal */ priv->completed = TRUE; g_object_notify (G_OBJECT (feed), "completed"); } }