コード例 #1
0
/*
 * 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;
}
コード例 #2
0
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;
}