static GrlMedia * create_media (sqlite3_stmt * stmt, GList *keys) { GrlMedia *media; gint media_type; media_type = sqlite3_column_int (stmt, STORE_TYPE_ID); switch (media_type) { case MEDIA_AUDIO: media = grl_media_audio_new (); break; case MEDIA_VIDEO: media = grl_media_video_new (); break; case MEDIA_IMAGE: media = grl_media_image_new (); break; case MEDIA_BOX: media = grl_media_box_new (); break; default: media = grl_media_new (); } grl_media_set_source (media, (const gchar *) sqlite3_column_text (stmt, STORE_SOURCE_ID)); grl_media_set_id (media, (const gchar *) sqlite3_column_text (stmt, STORE_MEDIA_ID)); fill_metadata_from_stmt (media, keys, stmt); return media; }
static void tracker_evt_update_items_cb (gpointer key, gpointer value, tracker_evt_update_t *evt) { guint id = GPOINTER_TO_INT (key); gchar *str_id; GrlTrackerSource *source = (GrlTrackerSource *) value; GrlMedia *media; GRL_DEBUG ("%s: evt=%p", __FUNCTION__, evt); if (!source) { g_assert ("\tnot in cache ???"); return; } if (!grl_tracker_source_can_notify (source)) { GRL_DEBUG ("\tno notification for source %s...", grl_source_get_name (GRL_SOURCE (source))); return; } media = grl_media_new (); str_id = g_strdup_printf ("%i", id); grl_media_set_id (media, str_id); g_free (str_id); GRL_DEBUG ("\tNotify id=%u source=%s", id, grl_source_get_name (GRL_SOURCE (source))); grl_source_notify_change (GRL_SOURCE (source), media, evt->change_type, FALSE); g_object_unref (media); }
static void set_test_data (GrlSource **source, GrlMedia **media, GrlOperationOptions **options, GList **keys, GrlSupportedOps source_op) { *source = test_lua_factory_get_source (FAKE_SOURCE_ID, source_op); g_assert_nonnull (*source); *media = grl_media_new (); grl_data_add_string (GRL_DATA (*media), GRL_METADATA_KEY_URL, LOCAL_CONTENT); *keys = grl_metadata_key_list_new (GRL_METADATA_KEY_TITLE, NULL); *options = grl_operation_options_new (NULL); grl_operation_options_set_resolution_flags (*options, GRL_RESOLVE_NORMAL); }
/* Builds an appropriate GrlMedia based on ontology type returned by tracker, or NULL if unknown */ GrlMedia * grl_tracker_build_grilo_media (const gchar *rdf_type, GrlTypeFilter type_filter) { GrlMedia *media = NULL; gchar **rdf_single_type; int i; GHashTable *ht; if (!rdf_type) { return NULL; } /* As rdf_type can be formed by several types, split them */ rdf_single_type = g_strsplit (rdf_type, ",", -1); i = g_strv_length (rdf_single_type) - 1; ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); for (; i>= 0; i--) g_hash_table_insert (ht, g_path_get_basename (rdf_single_type[i]), GINT_TO_POINTER(TRUE)); if (type_filter == GRL_TYPE_FILTER_NONE || type_filter == GRL_TYPE_FILTER_ALL) { media = grl_tracker_build_grilo_media_default (ht); } else if ((type_filter & GRL_TYPE_FILTER_AUDIO) && g_hash_table_lookup (ht, RDF_TYPE_MUSIC)) { media = grl_media_audio_new (); } else if ((type_filter & GRL_TYPE_FILTER_VIDEO) && g_hash_table_lookup (ht, RDF_TYPE_VIDEO)) { media = grl_media_video_new (); } else if ((type_filter & GRL_TYPE_FILTER_IMAGE) && g_hash_table_lookup (ht, RDF_TYPE_IMAGE)) { media = grl_media_image_new (); } else { media = grl_tracker_build_grilo_media_default (ht); } g_hash_table_destroy (ht); g_strfreev (rdf_single_type); if (!media) media = grl_media_new (); return media; }
/* Builds an appropriate GrlMedia based on ontology type returned by tracker, or NULL if unknown */ GrlMedia * grl_tracker_build_grilo_media (const gchar *rdf_type) { GrlMedia *media = NULL; gchar **rdf_single_type; int i; if (!rdf_type) { return NULL; } /* As rdf_type can be formed by several types, split them */ rdf_single_type = g_strsplit (rdf_type, ",", -1); i = g_strv_length (rdf_single_type) - 1; while (!media && i >= 0) { if (g_str_has_suffix (rdf_single_type[i], RDF_TYPE_MUSIC)) { media = grl_media_audio_new (); } else if (g_str_has_suffix (rdf_single_type[i], RDF_TYPE_VIDEO)) { media = grl_media_video_new (); } else if (g_str_has_suffix (rdf_single_type[i], RDF_TYPE_IMAGE)) { media = grl_media_image_new (); } else if (g_str_has_suffix (rdf_single_type[i], RDF_TYPE_ARTIST)) { media = grl_media_box_new (); } else if (g_str_has_suffix (rdf_single_type[i], RDF_TYPE_ALBUM)) { media = grl_media_box_new (); } else if (g_str_has_suffix (rdf_single_type[i], RDF_TYPE_BOX)) { media = grl_media_box_new (); } else if (g_str_has_suffix (rdf_single_type[i], RDF_TYPE_FOLDER)) { media = grl_media_box_new (); } i--; } g_strfreev (rdf_single_type); if (!media) media = grl_media_new (); return media; }
static GrlMedia * build_media_from_resource (GrlMedia *content, GomResource *resource, GrlTypeFilter type_filter) { GrlMedia *media = NULL; gint64 id; gchar *str_id; gchar *title; gchar *url; gchar *desc; gchar *date; gchar *mime; gchar *thumb; guint type; if (content) { media = content; } g_object_get (resource, "id", &id, "title", &title, "url", &url, "desc", &desc, "date", &date, "mime", &mime, "type", &type, "thumbnail-url", &thumb, NULL); if (!media) { if (type == BOOKMARK_TYPE_CATEGORY) { media = GRL_MEDIA (grl_media_box_new ()); } else if (mime_is_audio (mime)) { if (type_filter & GRL_TYPE_FILTER_AUDIO) media = GRL_MEDIA (grl_media_new ()); } else if (mime_is_video (mime)) { if (type_filter & GRL_TYPE_FILTER_VIDEO) media = GRL_MEDIA (grl_media_new ()); } else if (mime_is_image (mime)) { if (type_filter & GRL_TYPE_FILTER_IMAGE) media = GRL_MEDIA (grl_media_image_new ()); } else { if (type_filter != GRL_TYPE_FILTER_NONE) media = GRL_MEDIA (grl_media_new ()); } } if (!media) return NULL; str_id = g_strdup_printf ("%" G_GINT64_FORMAT, id); grl_media_set_id (media, str_id); g_free (str_id); grl_media_set_title (media, title); if (url) { grl_media_set_url (media, url); } if (desc) { grl_media_set_description (media, desc); } if (date) { GDateTime *date_time = grl_date_time_from_iso8601 (date); if (date_time) { grl_data_set_boxed (GRL_DATA (media), GRL_BOOKMARKS_KEY_BOOKMARK_TIME, date_time); g_date_time_unref (date_time); } } if (thumb) { grl_media_set_thumbnail (media, thumb); } g_free (title); g_free (url); g_free (desc); g_free (date); g_free (mime); g_free (thumb); return media; }
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); }