static void source_removed_cb(MafwRegistry * registry, GObject *source, gpointer user_data) { /* Get a reference to the unavailable source */ if (MAFW_IS_SOURCE(source)) { g_print("Removing source %s \n", mafw_extension_get_name(MAFW_EXTENSION(source))); remove_source(MAFW_SOURCE(source)); mtg_print_signal (MAFW_EXTENSION(source), "Registry::source-removed", "\n"); } }
static void renderer_removed_cb(MafwRegistry * registry, GObject *renderer, gpointer user_data) { /* Get a reference to the available renderer */ if (MAFW_IS_RENDERER(renderer)) { g_print("Renderer %s removed\n", mafw_extension_get_name(MAFW_EXTENSION(renderer))); remove_media_renderer(MAFW_RENDERER(renderer)); mtg_print_signal (MAFW_EXTENSION(renderer), "Registry::renderer-removed", "\n"); } }
static void source_added_cb(MafwRegistry * registry, GObject *source, gpointer user_data) { /* Get a reference to the available source */ if (MAFW_IS_SOURCE(source)) { g_print("Source %s available\n", mafw_extension_get_name(MAFW_EXTENSION(source))); /* Do not add metadata resolver source */ if (strcmp(mafw_extension_get_uuid(MAFW_EXTENSION(source)), "gnomevfs") != 0) add_source(MAFW_SOURCE(source)); mtg_print_signal (MAFW_EXTENSION(source), "Registry::source-added", "\n"); } }
static void append_media_renderer_to_tree (MafwRenderer *renderer, const char *uuid) { MafwRenderer *info; GtkComboBox *combo; GtkTreeModel *model; GtkTreeIter iter; char *name; gboolean was_empty; info = MAFW_RENDERER (renderer); combo = GTK_COMBO_BOX (renderer_combo); name = g_strdup(mafw_extension_get_name (MAFW_EXTENSION(info))); if (name == NULL) name = g_strdup (uuid); /* Hack to set true the current-frame-on-pause property */ else if (g_strcmp0(name, "Mafw-Gst-Renderer") == 0) { mafw_extension_set_property_boolean (MAFW_EXTENSION(info), "current-frame-on-pause", TRUE); } mafw_extension_get_property (MAFW_EXTENSION(info), "volume", update_volume, renderer); model = gtk_combo_box_get_model (combo); if (gtk_combo_box_get_active (combo) == -1) was_empty = TRUE; else was_empty = FALSE; memset (&iter, 0, sizeof (iter)); gtk_list_store_insert_with_values (GTK_LIST_STORE (model), &iter, -1, RENDERER_COMBO_COLUMN_NAME, name, RENDERER_COMBO_COLUMN_RENDERER, renderer, RENDERER_COMBO_COLUMN_STATE, Stopped, -1); if (was_empty) gtk_combo_box_set_active_iter (combo, &iter); g_free (name); }
END_TEST START_TEST(test_add_3_sources) { MafwRegistry *reg = NULL; MafwSource *source1 = NULL; MafwSource *source2 = NULL; MafwSource *source3 = NULL; GList *sources = NULL; reg = g_object_new(MAFW_TYPE_REGISTRY, NULL); fail_unless(reg != NULL, "Object construction failed"); g_signal_connect(reg, "source_added", (GCallback) source_added, NULL); source1 = g_object_new(nop_source_get_type(), "uuid", "SomeSource1", "name", "nop", NULL); source2 = g_object_new(nop_source_get_type(), "uuid", "SomeSource2", "name", "nop", NULL); source3 = g_object_new(nop_source_get_type(), "uuid", "SomeSource3", "name", "nop", NULL); /* Add source1 */ mafw_registry_add_extension(reg, MAFW_EXTENSION(source1)); fail_unless(source_added_ok, "Source add failed\n"); sources = mafw_registry_get_sources(reg); fail_unless(g_list_length(sources) == 1, "Sources list size wrong\n"); source_added_ok = FALSE; /* Add source2 */ mafw_registry_add_extension(reg, MAFW_EXTENSION(source2)); fail_unless(source_added_ok, "Source add failed\n"); sources = mafw_registry_get_sources(reg); fail_unless(g_list_length(sources) == 2, "Sources list size wrong\n"); source_added_ok = FALSE; /* Add source3 */ mafw_registry_add_extension(reg, MAFW_EXTENSION(source3)); fail_unless(source_added_ok, "Source add failed\n"); sources = mafw_registry_get_sources(reg); fail_unless(g_list_length(sources) == 3, "Sources list size wrong\n"); g_object_unref(reg); }
void set_selected_renderer_volume (gfloat volume) { MafwRenderer *renderer; GValue value = {0,}; GtkTreeModel *model = NULL; GtkTreeIter iter; GtkComboBox *combo; combo = GTK_COMBO_BOX (renderer_combo); if (!gtk_combo_box_get_active_iter (combo, &iter)) { return; } model = gtk_combo_box_get_model (combo); g_assert (model != NULL); gtk_tree_model_get (model, &iter, RENDERER_COMBO_COLUMN_RENDERER, &renderer, -1); g_value_init (&value, G_TYPE_UINT); g_value_set_uint (&value, volume); mafw_extension_set_property (MAFW_EXTENSION(renderer), "volume", &value); gtk_list_store_set (GTK_LIST_STORE(model), &iter, RENDERER_COMBO_COLUMN_VOLUME, (guint) volume, -1); }
void MafwSourceAdapter::bind(MafwSource *source) { // Check if there is anything to do if (source == this->source) return; if (source) { // Unbind current source, if set, before proceeding if (this->source) bind(NULL); // Bind g_object_ref(source); g_signal_connect(source, "container-changed", G_CALLBACK(&onContainerChanged), static_cast<void*>(this)); g_signal_connect(source, "metadata-changed" , G_CALLBACK(&onMetadataChanged) , static_cast<void*>(this)); g_signal_connect(source, "updating" , G_CALLBACK(&onUpdating) , static_cast<void*>(this)); this->source = source; m_uuid = mafw_extension_get_uuid(MAFW_EXTENSION(source)); // Watch only for removals disconnect(MafwRegistryAdapter::get(), SIGNAL(sourceAdded(MafwSource*)), this, SLOT(onSourceAdded(MafwSource*))); connect(MafwRegistryAdapter::get(), SIGNAL(sourceRemoved(MafwSource*)), this, SLOT(onSourceRemoved(MafwSource*))); // Emit the signal in case something changed before the adapter got // reconnected after losing its source or to notify listeners about // readiness if this is the first time. emit containerChanged(uuid() + "::"); } else {
void add_media_renderer (MafwRenderer *renderer) { GtkTreeModel *model; GtkTreeIter iter; const char *uuid; uuid = mafw_extension_get_uuid(MAFW_EXTENSION(renderer)); if (uuid == NULL) return; model = gtk_combo_box_get_model (GTK_COMBO_BOX (renderer_combo)); if (!find_renderer (model, uuid, &iter)) { g_signal_connect(renderer, "state-changed", G_CALLBACK(state_changed_cb), NULL); g_signal_connect(renderer, "media-changed", G_CALLBACK(media_changed_cb), NULL); g_signal_connect(renderer, "property-changed", G_CALLBACK(property_changed_cb), NULL); g_signal_connect(renderer, "metadata-changed", G_CALLBACK(renderer_metadata_changed_cb), NULL); g_signal_connect(renderer, "error", G_CALLBACK(renderer_error_cb), NULL); g_signal_connect(renderer, "playlist-changed", G_CALLBACK(renderer_playlist_changed_cb), NULL); append_media_renderer_to_tree (renderer, uuid); } }
END_TEST /***************************************************************************** * Add renderer *****************************************************************************/ START_TEST(test_add_renderer) { MafwRegistry *reg = NULL; MafwRenderer *renderer = NULL; GList *renderers = NULL; reg = g_object_new(MAFW_TYPE_REGISTRY, NULL); fail_unless(reg != NULL, "Object construction failed"); g_signal_connect(reg, "renderer_added", (GCallback) renderer_added, NULL); renderer = MAFW_RENDERER(g_object_new(nop_renderer_get_type(), "uuid", "SomeRenderer", NULL)); /* Add a renderer */ mafw_registry_add_extension(reg, MAFW_EXTENSION(renderer)); fail_unless(renderer_added_ok, "Renderer add failed\n"); /* Get renderers */ renderers = mafw_registry_get_renderers(reg); fail_unless(g_list_length(renderers) == 1, "Renderers list size wrong\n"); g_object_unref(reg); }
/** * Sets the mute toggle button's state, according to the current renderer state */ void update_mute_button (void) { MafwRenderer *renderer = get_selected_renderer(); mafw_extension_get_property(MAFW_EXTENSION(renderer), MAFW_PROPERTY_RENDERER_MUTE, mute_cb, NULL); }
/* * Checks if the referenced source is removed, and if so, exits. */ static void source_removed_cb (MafwRegistry *registry, GObject *source, gpointer user_data) { if (MAFW_IS_SOURCE(source)) { g_print("[INFO] Source %s removed.\n", mafw_extension_get_name(MAFW_EXTENSION(source))); } }
/** * GTK signal handler for frame-on-pause button presses */ void on_frame_on_pause_button_toggled (GtkWidget *widget) { if (selected_renderer) mafw_extension_set_property_boolean( MAFW_EXTENSION (selected_renderer), "current-frame-on-pause", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(widget))); }
END_TEST START_TEST(test_add_3_renderers) { MafwRegistry *reg = NULL; MafwRenderer *renderer1 = NULL; MafwRenderer *renderer2 = NULL; MafwRenderer *renderer3 = NULL; GList *renderers = NULL; reg = g_object_new(MAFW_TYPE_REGISTRY, NULL); fail_unless(reg != NULL, "Object construction failed"); g_signal_connect(reg, "renderer_added", (GCallback) renderer_added, NULL); renderer1 = MAFW_RENDERER(g_object_new(nop_renderer_get_type(), "uuid", "SomeRenderer1", NULL)); renderer2 = MAFW_RENDERER(g_object_new(nop_renderer_get_type(), "uuid", "SomeRenderer2", NULL)); renderer3 = MAFW_RENDERER(g_object_new(nop_renderer_get_type(), "uuid", "SomeRenderer3", NULL)); /* Add renderer1 */ mafw_registry_add_extension(reg, MAFW_EXTENSION(renderer1)); fail_unless(renderer_added_ok, "Renderer add failed\n"); renderers = mafw_registry_get_renderers(reg); fail_unless(g_list_length(renderers) == 1, "Renderers list size wrong\n"); renderer_added_ok = FALSE; /* Add renderer2 */ mafw_registry_add_extension(reg, MAFW_EXTENSION(renderer2)); fail_unless(renderer_added_ok, "Renderer add failed\n"); renderers = mafw_registry_get_renderers(reg); fail_unless(g_list_length(renderers) == 2, "Renderers list size wrong\n"); renderer_added_ok = FALSE; /* Add renderer3 */ mafw_registry_add_extension(reg, MAFW_EXTENSION(renderer3)); fail_unless(renderer_added_ok, "Renderer add failed\n"); renderers = mafw_registry_get_renderers(reg); fail_unless(g_list_length(renderers) == 3, "Renderers list size wrong\n"); g_object_unref(reg); }
/*---------------------------------------------------------------------------- MAFW Plugin construction ----------------------------------------------------------------------------*/ static gboolean iradio_plugin_initialize(MafwRegistry *registry, GError **error) { MafwIradioSource *self = MAFW_IRADIO_SOURCE( mafw_iradio_source_new()); g_debug("Mafw Iradio-Source initialization"); mafw_registry_add_extension(registry, MAFW_EXTENSION(self)); return TRUE; }
void activate_all(gboolean make_active) { GList *sources = mafw_registry_get_sources(registry); while(sources) { mafw_extension_set_property_boolean(MAFW_EXTENSION(sources->data), MAFW_PROPERTY_EXTENSION_ACTIVATE, make_active); sources = g_list_next(sources); } }
/* * Checks for a particular source to be added and * saves a reference to it. */ static void source_added_cb (MafwRegistry *registry, GObject *source, gpointer user_data) { if (MAFW_IS_SOURCE(source)) { const gchar *name = mafw_extension_get_name(MAFW_EXTENSION(source)); g_print("[INFO] Source %s available.\n", name); } }
END_TEST START_TEST(test_add_same_renderer_twice) { MafwRegistry *reg = NULL; MafwRenderer *renderer = NULL; reg = g_object_new(MAFW_TYPE_REGISTRY, NULL); fail_unless(reg != NULL, "Object construction failed"); g_signal_connect(reg, "renderer_added", (GCallback) renderer_added, NULL); renderer = MAFW_RENDERER(g_object_new(nop_renderer_get_type(), "uuid", "SomeRenderer", NULL)); /* Add a renderer */ mafw_registry_add_extension(reg, MAFW_EXTENSION(renderer)); fail_unless(renderer_added_ok, "Renderer add failed\n"); /* Add it again... This should assert */ expect_assert(mafw_registry_add_extension(reg, MAFW_EXTENSION(renderer))); }
static void media_changed_cb(MafwRenderer *renderer, gint index, gchar *object_id, gpointer user_data) { mtg_print_signal (MAFW_EXTENSION (renderer), "Renderer::media-changed", "Index: %d, ObjectID:%s\n", index, object_id); set_current_oid(object_id); update_playing_item (index); }
END_TEST START_TEST(test_remove_non_existing_source) { MafwRegistry *reg = NULL; MafwSource *source1 = NULL; MafwSource *source2 = NULL; GList *sources = NULL; reg = g_object_new(MAFW_TYPE_REGISTRY, NULL); fail_unless(reg != NULL, "Object construction failed"); g_signal_connect(reg, "source_removed", (GCallback) source_removed, NULL); source1 = g_object_new(nop_source_get_type(), "uuid", "SomeSource", "name", "nop", NULL); source2 = g_object_new(nop_source_get_type(), "uuid", "SomeSource2", "name", "nop", NULL); /* Add a source */ mafw_registry_add_extension(reg, MAFW_EXTENSION(source1)); /* Get sources */ sources = mafw_registry_get_sources(reg); fail_unless(g_list_length(sources) == 1, "Sources list size wrong\n"); /* Remove the source (which shouldn't exist in the registry */ expect_assert(mafw_registry_remove_extension(reg, MAFW_EXTENSION(source2))); fail_unless(source_removed_ok == FALSE, "Shouldn't signal non-existing source removal\n"); sources = mafw_registry_get_sources(reg); fail_unless(g_list_length(sources) == 1, "Sources list size wrong\n"); g_object_unref(reg); }
static void state_changed_cb(MafwRenderer *renderer, MafwPlayState state, gpointer user_data) { const gchar *uuid; GtkTreeModel *model; GtkTreeIter iter; mtg_print_signal (MAFW_EXTENSION (renderer), "Renderer::state-changed", "state:%s (%d)\n", state_to_string (state), state); uuid = mafw_extension_get_uuid(MAFW_EXTENSION(renderer)); model = gtk_combo_box_get_model (GTK_COMBO_BOX (renderer_combo)); g_assert (model != NULL); if (find_renderer (model, uuid, &iter)) { set_state (model, &iter, state); } }
/** * Called, when the user toggles the mute button. Sets the selected * renderer's state according to that */ void on_mute_button_toggled(GtkToggleButton *togglebutton, gpointer user_data) { MafwRenderer *renderer = get_selected_renderer(); if (renderer != NULL) { gboolean mute = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(togglebutton)); mafw_extension_set_property_boolean(MAFW_EXTENSION(renderer), MAFW_PROPERTY_RENDERER_MUTE, mute); } }
END_TEST START_TEST(test_add_same_source_twice) { MafwRegistry *reg = NULL; MafwSource *source = NULL; reg = g_object_new(MAFW_TYPE_REGISTRY, NULL); fail_unless(reg != NULL, "Object construction failed"); g_signal_connect(reg, "source_added", (GCallback) source_added, NULL); source = g_object_new(nop_source_get_type(), "uuid", "SomeSource", "name", "nop", NULL); /* Add a source */ mafw_registry_add_extension(reg, MAFW_EXTENSION(source)); fail_unless(source_added_ok, "Source add failed\n"); /* Add it again... This should assert */ expect_assert(mafw_registry_add_extension(reg, MAFW_EXTENSION(source))); }
END_TEST START_TEST(test_add_null_source) { MafwRegistry *reg = NULL; MafwSource *source = NULL; reg = g_object_new(MAFW_TYPE_REGISTRY, NULL); fail_unless(reg != NULL, "Object construction failed"); g_signal_connect(reg, "source_added", (GCallback) source_added, NULL); /* Add a NULL source. This should assert */ expect_assert(mafw_registry_add_extension(reg, MAFW_EXTENSION(source))); }
END_TEST /***************************************************************************** * Remove source *****************************************************************************/ START_TEST(test_remove_source) { MafwRegistry *reg = NULL; MafwSource *source = NULL; GList *sources = NULL; reg = g_object_new(MAFW_TYPE_REGISTRY, NULL); fail_unless(reg != NULL, "Object construction failed"); g_signal_connect(reg, "source_removed", (GCallback) source_removed, NULL); source = g_object_new(nop_source_get_type(), "uuid", "SomeSource", "name", "nop", NULL); /* Add a source */ mafw_registry_add_extension(reg, MAFW_EXTENSION(source)); /* Get sources */ sources = mafw_registry_get_sources(reg); fail_unless(g_list_length(sources) == 1, "Sources list size wrong\n"); /* Remove the source */ mafw_registry_remove_extension(reg, MAFW_EXTENSION(source)); fail_unless(source_removed_ok, "Source remove failed\n"); sources = mafw_registry_get_sources(reg); fail_unless(g_list_length(sources) == 0, "Sources list size wrong after remove\n"); g_object_unref(reg); }
END_TEST START_TEST(test_remove_non_existing_renderer) { MafwRegistry *reg = NULL; MafwRenderer *renderer1 = NULL; MafwRenderer *renderer2 = NULL; GList *renderers = NULL; reg = g_object_new(MAFW_TYPE_REGISTRY, NULL); fail_unless(reg != NULL, "Object construction failed"); g_signal_connect(reg, "renderer_removed", (GCallback) renderer_removed, NULL); renderer1 = MAFW_RENDERER(g_object_new(nop_renderer_get_type(), "uuid", "SomeRenderer", NULL)); renderer2 = MAFW_RENDERER(g_object_new(nop_renderer_get_type(), "uuid", "SomeRenderer2", NULL)); /* Add a renderer */ mafw_registry_add_extension(reg, MAFW_EXTENSION(renderer1)); /* Get renderers */ renderers = mafw_registry_get_renderers(reg); fail_unless(g_list_length(renderers) == 1, "Renderers list size wrong\n"); /* Remove the renderer (which shouldn't exist in the registry */ expect_assert(mafw_registry_remove_extension(reg, MAFW_EXTENSION(renderer2))); fail_unless(renderer_removed_ok == FALSE, "Shouldn't signal non-existing renderer removal\n"); renderers = mafw_registry_get_renderers(reg); fail_unless(g_list_length(renderers) == 1, "Renderers list size wrong\n"); g_object_unref(reg); }
END_TEST START_TEST(test_remove_null_renderer) { MafwRegistry *reg = NULL; MafwRenderer *renderer = NULL; reg = g_object_new(MAFW_TYPE_REGISTRY, NULL); fail_unless(reg != NULL, "Object construction failed"); g_signal_connect(reg, "renderer_removed", (GCallback) renderer_removed, NULL); /* Add a NULL renderer. This should assert */ expect_assert(mafw_registry_remove_extension(reg, MAFW_EXTENSION(renderer))); }
static void renderer_metadata_changed_cb(MafwRenderer *self, const gchar *key, GValueArray *value) { gint i; for (i = 0; i < value->n_values; i++) { gchar* contents = g_strdup_value_contents (&(value->values[i])); mtg_print_signal (MAFW_EXTENSION (self), "Renderer::metadata-changed", "Key: %s, Value:%s\n", key, contents); g_free (contents); } mdata_view_update(key, value); }
END_TEST /***************************************************************************** * Get renderers *****************************************************************************/ /* TODO... */ START_TEST(test_get_renderer_by_uuid) { MafwRegistry *reg = NULL; MafwRenderer *renderer = NULL; MafwRenderer *renderer_by_uuid = NULL; reg = g_object_new(MAFW_TYPE_REGISTRY, NULL); fail_unless(reg != NULL, "Object construction failed"); g_signal_connect(reg, "renderer_added", (GCallback) renderer_added, NULL); renderer = g_object_new(nop_renderer_get_type(), "name", "test_renderer_name", "uuid", "test_renderer_uuid", NULL); /* Get renderer by uuid when it doesn't exist */ renderer_by_uuid = MAFW_RENDERER( mafw_registry_get_extension_by_uuid(reg, "test_renderer_uuid")); fail_unless(renderer_by_uuid == NULL, "There was not supposed to be any renderer with the uuid\n"); /* Add a renderer */ mafw_registry_add_extension(reg, MAFW_EXTENSION(renderer)); fail_unless(renderer_added_ok, "Renderer add failed\n"); /* Get renderer by uuid */ renderer_by_uuid = MAFW_RENDERER(mafw_registry_get_extension_by_uuid(reg, "test_renderer_uuid")); fail_unless(renderer_by_uuid != NULL, "Get renderer by uuid failed\n"); /* Get renderer by uuid when it doesn't exist */ renderer_by_uuid = MAFW_RENDERER(mafw_registry_get_extension_by_uuid(reg, "wrong_renderer_uuid")); fail_unless(renderer_by_uuid == NULL, "There was not supposed to be any renderer with the uuid\n"); /* Get renderer by NULL uuid */ expect_fallback(mafw_registry_get_extension_by_uuid(reg, NULL), NULL); g_object_unref(reg); } END_TEST
static void on_renderer_combo_changed (GtkComboBox *widget, gpointer user_data) { GtkComboBox *combo; GtkTreeModel *model; GtkTreeIter iter; MafwPlayState state; guint volume; combo = GTK_COMBO_BOX (renderer_combo); model = gtk_combo_box_get_model (combo); g_assert (model != NULL); if (!gtk_combo_box_get_active_iter (combo, &iter)) { selected_renderer = NULL; return; } if (selected_renderer != NULL) { stop(); } gtk_tree_model_get (model, &iter, RENDERER_COMBO_COLUMN_RENDERER, &selected_renderer, RENDERER_COMBO_COLUMN_STATE, &state, RENDERER_COMBO_COLUMN_VOLUME, &volume, -1); set_volume_vscale (volume); prepare_controls_for_state (state); update_mute_button(); if (selected_renderer != NULL) { /* Get the selected renderer's playlist */ mafw_renderer_get_status(selected_renderer, selected_renderer_status_cb, NULL); set_selected_renderer_xid (get_metadata_visual_xid ()); mafw_extension_get_property(MAFW_EXTENSION(selected_renderer), "current-frame-on-pause", fop_status_cb, NULL); } }
void set_selected_renderer_xid (XID xid) { GValue value = { 0 }; if (xid == cur_xid || !selected_renderer) return; cur_xid = xid; /* Set the visual widget's XID to the selected renderer for * playing video */ g_value_init (&value, G_TYPE_UINT); g_value_set_uint (&value, xid); mafw_extension_set_property (MAFW_EXTENSION (selected_renderer), "xid", &value); }