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 gchar * get_lyrics (GrlSource *source, const gchar *artist, const gchar *title) { GList *keys; GrlMedia *audio; GrlOperationOptions *options; GError *error = NULL; gchar *lyrics; audio = grl_media_audio_new (); grl_media_set_artist (audio, artist); grl_media_set_title (audio, title); keys = grl_metadata_key_list_new (GRL_METADATA_KEY_LYRICS, NULL); options = grl_operation_options_new (NULL); grl_operation_options_set_resolution_flags (options, GRL_RESOLVE_NORMAL); grl_source_resolve_sync (source, GRL_MEDIA (audio), keys, options, &error); g_assert_no_error (error); lyrics = g_strdup (grl_media_get_lyrics (audio)); g_list_free (keys); g_object_unref (options); g_object_unref (audio); return lyrics; }
static GrlMedia * build_media(gint track_id, const gchar *artist_name, const gchar *album_name, const gchar *track_name, gint track_number, gint duration, const gchar *url_to_mp3) { GrlMedia *media = NULL; GrlMediaAudio *audio = NULL; gchar *str_track_id = NULL; media = grl_media_audio_new(); audio = GRL_MEDIA_AUDIO(media); grl_media_audio_set_track_number(audio, track_number); grl_media_audio_set_artist(audio, artist_name); grl_media_audio_set_album(audio, album_name); grl_media_set_url(media, url_to_mp3); grl_media_set_duration(media, duration); grl_media_set_title(media, track_name); str_track_id = g_strdup_printf("%d", track_id); grl_media_set_id(media, str_track_id); g_free(str_track_id); return media; }
static GrlMedia * build_media(gint track_id, const gchar *artist_name, const gchar *album_name, const gchar *track_name, gint track_number, gint duration, const gchar *url_to_mp3, GPtrArray *url_to_covers) { GrlMedia *media = NULL; gchar *str_track_id = NULL; media = grl_media_audio_new(); grl_media_set_track_number(media, track_number); grl_media_set_artist(media, artist_name); grl_media_set_album(media, album_name); grl_media_set_url(media, url_to_mp3); grl_media_set_duration(media, duration); grl_media_set_title(media, track_name); g_ptr_array_foreach(url_to_covers, add_cover, media); str_track_id = g_strdup_printf("%d", track_id); grl_media_set_id(media, str_track_id); g_free(str_track_id); return media; }
static void test_preconditions (void) { GrlMedia *local_media = NULL; GrlMedia *media = NULL; GError *error = NULL; GrlOperationOptions *options = NULL; test_setup_tmdb (); local_media = grl_media_audio_new (); GrlSource *source = test_get_source(); g_assert (source); options = grl_operation_options_new (NULL); g_assert (options != NULL); grl_source_resolve_sync (source, local_media, grl_source_supported_keys (source), options, &error); /* Check that the plugin didn't even try to resolve data, otherwise the mock * file would have resulted in an error */ g_assert_no_error (error); g_object_unref (local_media); local_media = grl_media_image_new (); grl_source_resolve_sync (source, local_media, grl_source_supported_keys (source), options, &error); /* Check that the plugin didn't even try to resolve data, otherwise the * empty mock file would have resulted in an error */ g_assert (error == NULL); g_object_unref (local_media); /* Check the same for title-less video */ media = grl_media_video_new (); g_assert (media != NULL); grl_source_resolve_sync (source, media, grl_source_supported_keys (source), options, &error); g_assert_no_error (error); g_object_unref (media); media = NULL; g_object_unref (options); options = NULL; test_shutdown_tmdb (); }
/* 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 * grl_tracker_build_grilo_media_default (GHashTable *ht) { if (g_hash_table_lookup (ht, RDF_TYPE_MUSIC)) { return grl_media_audio_new (); } else if (g_hash_table_lookup (ht, RDF_TYPE_VIDEO)) { return grl_media_video_new (); } else if (g_hash_table_lookup (ht, RDF_TYPE_IMAGE)) { return grl_media_image_new (); } else if (g_hash_table_lookup (ht, RDF_TYPE_ARTIST)) { return grl_media_container_new (); } else if (g_hash_table_lookup (ht, RDF_TYPE_ALBUM)) { return grl_media_container_new (); } else if (g_hash_table_lookup (ht, RDF_TYPE_CONTAINER)) { return grl_media_container_new (); } else if (g_hash_table_lookup (ht, RDF_TYPE_FOLDER)) { return grl_media_container_new (); } return NULL; }
static void add_model (MexTrackerPlugin *self, GrlMediaPlugin *plugin, MexTrackerCategory category) { GList *metadata_keys, *query_keys; MexFeed *feed, *dir_feed; GrlMedia *box; gchar *query, *cat_name; GHashTable *models; const gchar *source_name = grl_metadata_source_get_name (GRL_METADATA_SOURCE (plugin)); gint priority; switch (category) { case MEX_TRACKER_CATEGORY_IMAGE: cat_name = "pictures"; query = "?urn a nfo:FileDataObject . " "?urn tracker:available true . " "FILTER (fn:starts-with(nie:mimeType(?urn),'image/'))"; models = self->priv->image_models; metadata_keys = self->priv->image_keys; query_keys = self->priv->query_image_keys; box = grl_media_image_new (); break; case MEX_TRACKER_CATEGORY_VIDEO: cat_name = "videos"; query = "?urn a nfo:FileDataObject . " "?urn tracker:available true . " "FILTER (fn:starts-with(nie:mimeType(?urn),'video/'))"; models = self->priv->video_models; metadata_keys = self->priv->video_keys; query_keys = self->priv->query_video_keys; box = grl_media_video_new (); break; case MEX_TRACKER_CATEGORY_MUSIC: cat_name = "music"; query = "?urn a nfo:FileDataObject . " "?urn tracker:available true . " "FILTER (fn:starts-with(nie:mimeType(?urn),'audio/'))"; models = self->priv->music_models; metadata_keys = self->priv->music_keys; query_keys = self->priv->query_music_keys; box = grl_media_audio_new (); break; } grl_media_set_id (GRL_MEDIA (box), NULL); feed = mex_grilo_tracker_feed_new (GRL_MEDIA_SOURCE (plugin), query_keys, metadata_keys, NULL, box); mex_model_set_sort_func (MEX_MODEL (feed), mex_model_sort_time_cb, GINT_TO_POINTER (TRUE)); mex_grilo_feed_query (MEX_GRILO_FEED (feed), query, 0, MAX_TRACKER_RESULTS); g_hash_table_insert (models, plugin, feed); /* set the local files source to appear first */ if (!g_strcmp0 (source_name, "Local files")) priority = -100; else priority = 0; dir_feed = mex_grilo_tracker_feed_new (GRL_MEDIA_SOURCE (plugin), query_keys, metadata_keys, query, NULL); mex_model_set_sort_func (MEX_MODEL (dir_feed), mex_model_sort_alpha_cb, GINT_TO_POINTER (FALSE)); mex_grilo_feed_browse (MEX_GRILO_FEED (dir_feed), 0, G_MAXINT); g_object_set (G_OBJECT (feed), "category", cat_name, "priority", priority, "alt-model", dir_feed, "alt-model-string", _("Show Folders"), NULL); mex_model_manager_add_model (self->priv->manager, MEX_MODEL (feed)); }