/* * Virtual methods */ static GList * mb4_list_albums (SjMetadata *metadata, char **url, GError **error) { SjMetadataMusicbrainz4Private *priv; GList *albums = NULL; Mb4ReleaseList releases; Mb4Release release; const char *discid = NULL; char buffer[1024]; int i; g_return_val_if_fail (SJ_IS_METADATA_MUSICBRAINZ4 (metadata), NULL); priv = GET_PRIVATE (metadata); if (sj_metadata_helper_check_media (priv->cdrom, error) == FALSE) { return NULL; } priv->disc = discid_new (); if (priv->disc == NULL) return NULL; if (discid_read (priv->disc, priv->cdrom) == 0) return NULL; if (url != NULL) *url = g_strdup (discid_get_submission_url (priv->disc)); if (g_getenv("MUSICBRAINZ_FORCE_DISC_ID")) { discid = g_getenv("MUSICBRAINZ_FORCE_DISC_ID"); } else { discid = discid_get_id (priv->disc); } releases = mb4_query_lookup_discid(priv->mb, discid); if (releases == NULL) { return NULL; } if (mb4_release_list_size (releases) == 0) { return NULL; } for (i = 0; i < mb4_release_list_size (releases); i++) { AlbumDetails *album; release = mb4_release_list_item (releases, i); if (release) { char *releaseid = NULL; Mb4Release full_release; releaseid = NULL; GET(releaseid, mb4_release_get_id, release); full_release = mb4_query_lookup_release (priv->mb, releaseid); g_free (releaseid); if (full_release) { Mb4MediumList media; Mb4Metadata metadata = NULL; Mb4ReleaseGroup group; unsigned int j; group = mb4_release_get_releasegroup (full_release); if (group) { /* The release-group information we can extract from the * lookup_release query doesn't have the url relations for the * release-group, so run a separate query to get these urls */ char *releasegroupid = NULL; char *params_names[] = { "inc" }; char *params_values[] = { "artists url-rels" }; GET (releasegroupid, mb4_releasegroup_get_id, group); metadata = mb4_query_query (priv->mb, "release-group", releasegroupid, "", 1, params_names, params_values); g_free (releasegroupid); } if (metadata && mb4_metadata_get_releasegroup (metadata)) group = mb4_metadata_get_releasegroup (metadata); media = mb4_release_media_matching_discid (full_release, discid); for (j = 0; j < mb4_medium_list_size (media); j++) { Mb4Medium medium; medium = mb4_medium_list_item (media, j); if (medium) { album = make_album_from_release (group, full_release, medium); album->metadata_source = SOURCE_MUSICBRAINZ; albums = g_list_append (albums, album); } } mb4_metadata_delete (metadata); mb4_medium_list_delete (media); mb4_release_delete (full_release); } } } mb4_release_list_delete (releases); return albums; }
static GList * mb_list_albums (SjMetadata *metadata, char **url, GError **error) { SjMetadataMusicbrainz3Private *priv; GList *albums = NULL; MbQuery query; MbReleaseFilter filter; MbResultList results; MbRelease release; char *id = NULL; char buffer[1024]; int i; g_return_val_if_fail (SJ_IS_METADATA_MUSICBRAINZ3 (metadata), NULL); priv = GET_PRIVATE (metadata); if (sj_metadata_helper_check_media (priv->cdrom, error) == FALSE) { return NULL; } priv->disc = mb_read_disc (priv->cdrom); if (priv->disc == NULL) return NULL; if (url != NULL) { mb_get_submission_url (priv->disc, NULL, 0, buffer, sizeof (buffer)); *url = g_strdup (buffer); } if (g_getenv("MUSICBRAINZ_FORCE_DISC_ID")) { id = g_strdup (g_getenv("MUSICBRAINZ_FORCE_DISC_ID")); } else { GET(id, mb_disc_get_id, priv->disc); } query = mb_query_new (priv->mb, "sound-juicer"); filter = mb_release_filter_new (); filter = mb_release_filter_disc_id (filter, id); results = mb_query_get_releases (query, filter); mb_release_filter_free (filter); g_free (id); if (results == NULL) { mb_query_free (query); return NULL; } if (mb_result_list_get_size (results) == 0) { mb_result_list_free (results); mb_query_free (query); return NULL; } for (i = 0; i < mb_result_list_get_size (results); i++) { AlbumDetails *album; MbReleaseIncludes includes; char buffer[512]; release = mb_result_list_get_release (results, i); if(release) { mb_release_get_id (release, buffer, sizeof (buffer)); includes = get_release_includes (); release = mb_query_get_release_by_id (query, buffer, includes); if(release) { mb_release_includes_free (includes); album = make_album_from_release (release); album->metadata_source = SOURCE_MUSICBRAINZ; fill_empty_durations (priv->disc, album); albums = g_list_append (albums, album); mb_release_free (release); } } } mb_result_list_free (results); mb_query_free (query); return albums; }