/** * grl_plugin_get_sources: * @plugin: a plugin * * Gets the sources belonging to @plugin. * * Returns: (transfer container) (element-type GrlSource): a #GList of * #GrlSource<!-- -->s. The content of the list should not be modified or * freed. Use g_list_free() when done using the list. * * Since: 0.2.0 **/ GList * grl_plugin_get_sources (GrlPlugin *plugin) { GrlRegistry *registry; GList *all_sources; GList *plugin_sources = NULL; GList *sources_iter; g_return_val_if_fail (GRL_IS_PLUGIN (plugin), NULL); registry = grl_registry_get_default (); all_sources = grl_registry_get_sources (registry, FALSE); for (sources_iter = all_sources; sources_iter; sources_iter = g_list_next (sources_iter)) { if (grl_source_get_plugin (GRL_SOURCE (sources_iter->data)) == plugin) { plugin_sources = g_list_prepend (plugin_sources, sources_iter->data); } } g_list_free (all_sources); return plugin_sources; }
GriloRegistry::GriloRegistry(QObject *parent) : QObject(parent) { grl_init(0, 0); m_registry = grl_registry_get_default(); g_signal_connect(m_registry, "source-added", G_CALLBACK(grilo_source_added), this); g_signal_connect(m_registry, "source-removed", G_CALLBACK(grilo_source_removed), this); GList *sources = grl_registry_get_sources(m_registry, FALSE); g_list_foreach(sources, connect_source, this); g_list_free(sources); }
static void mex_bliptv_plugin_init (MexBliptvPlugin *self) { MexBliptvPluginPrivate *priv; GrlRegistry *registry; GList *sources, *iter; priv = self->priv = GET_PRIVATE (self); priv->video_models = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); priv->query_keys = grl_metadata_key_list_new (GRL_METADATA_KEY_ID, GRL_METADATA_KEY_TITLE, GRL_METADATA_KEY_MIME, GRL_METADATA_KEY_URL, GRL_METADATA_KEY_PUBLICATION_DATE, NULL); priv->video_keys = grl_metadata_key_list_new (GRL_METADATA_KEY_ID, GRL_METADATA_KEY_DESCRIPTION, GRL_METADATA_KEY_DURATION, GRL_METADATA_KEY_THUMBNAIL, GRL_METADATA_KEY_WIDTH, GRL_METADATA_KEY_HEIGHT, NULL); priv->manager = mex_model_manager_get_default (); registry = grl_registry_get_default (); sources = grl_registry_get_sources (registry, FALSE); for (iter = sources; iter != NULL; iter = iter->next) handle_new_source (self, GRL_SOURCE (iter->data)); g_list_free (sources); g_signal_connect (registry, "source-added", G_CALLBACK (registry_source_added_cb), self); g_signal_connect (registry, "source-removed", G_CALLBACK (registry_source_removed_cb), self); }
static void tracker_evt_update_orphans (tracker_evt_update_t *evt) { gboolean first = TRUE; GString *request_str; GList *subject, *subjects; GList *source, *sources; GRL_DEBUG ("%s: evt=%p", __FUNCTION__, evt); if (g_hash_table_size (evt->orphan_items) < 1) { tracker_evt_postupdate_sources (evt); return; } sources = grl_registry_get_sources (grl_registry_get_default (), FALSE); request_str = g_string_new (""); subjects = g_hash_table_get_keys (evt->orphan_items); subject = subjects; while (subject != NULL) { guint id = GPOINTER_TO_INT (subject->data); if (GPOINTER_TO_INT (g_hash_table_lookup (evt->orphan_items, subject->data)) != GRL_CONTENT_REMOVED) { if (first) { g_string_append_printf (request_str, "%u", id); first = FALSE; } else { g_string_append_printf (request_str, ", %u", id); } } else { /* Notify all sources that a media been removed */ source = sources; while (source != NULL) { if (GRL_IS_TRACKER_SOURCE (source->data)) { GRL_DEBUG ("\tNotify id=%u source=%s p=%p", id, grl_source_get_name (GRL_SOURCE (source->data)), source->data); if (grl_tracker_source_can_notify (GRL_TRACKER_SOURCE (source->data))) { GrlMedia *media = grl_media_new (); gchar *str_id = g_strdup_printf ("%u", id); grl_media_set_id (media, str_id); g_free (str_id); grl_source_notify_change (GRL_SOURCE (source->data), media, GRL_CONTENT_REMOVED, FALSE); g_object_unref (media); } } source = source->next; } } subject = subject->next; } g_list_free (subjects); if (request_str->len > 0) { gchar *sparql_final = g_strdup_printf (TRACKER_MEDIA_ITEM, request_str->str); GRL_DEBUG ("\trequest : '%s'", sparql_final); tracker_sparql_connection_query_async (grl_tracker_connection, sparql_final, NULL, (GAsyncReadyCallback) tracker_evt_update_orphans_cb, evt); g_free (sparql_final); } else { tracker_evt_postupdate_sources (evt); } g_string_free (request_str, TRUE); }