/** * call-seq: * submission_url() -> string or nil * * Returns a submission URL for the DiscID as a string. * * Returns +nil+ if no ID was yet read. */ static VALUE mb_discid_submission_url(VALUE self) { if (rb_iv_get(self, "@read") == Qfalse) return Qnil; else { DiscId *disc; Data_Get_Struct(self, DiscId, disc); return rb_str_new2(discid_get_submission_url(disc)); } }
int main(int argc, char *argv[]) { int i, first_track, last_track; char *device = NULL; char time_str[14]; int sectors; DiscId *disc; disc = discid_new(); /* If we have an argument, use it as the device name */ if (argc > 1) { device = argv[1]; } else { /* this will use discid_get_default_device() internally */ device = NULL; } if (discid_read_sparse(disc, device, 0) == 0) { fprintf(stderr, "Error: %s\n", discid_get_error_msg(disc)); discid_free(disc); return 1; } printf("DiscID : %s\n", discid_get_id(disc)); printf("FreeDB DiscID : %s\n", discid_get_freedb_id(disc)); first_track = discid_get_first_track_num(disc); last_track = discid_get_last_track_num(disc); printf("First track : %d\n", first_track); printf("Last track : %d\n", last_track); sectors = discid_get_sectors(disc); sectors_to_time(sectors, ROUND_SECONDS, time_str, sizeof time_str); printf("Length : %d sectors (%s)\n", sectors, time_str); for ( i = first_track; i <= last_track; i++ ) { sectors = discid_get_track_length(disc, i); sectors_to_time(sectors, ROUND_SECONDS, time_str, sizeof time_str); printf("Track %-2d : %8d %8d (%s)\n", i, discid_get_track_offset(disc, i), sectors, time_str); } printf("Submit via : %s\n", discid_get_submission_url(disc)); discid_free(disc); return 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; }
int main(int argc, char *argv[]) { DiscId *d; char *tmp, *expected; int ret; int ntests = 0, nok = 0; int offsets[] = { 303602, 150, 9700, 25887, 39297, 53795, 63735, 77517, 94877, 107270, 123552, 135522, 148422, 161197, 174790, 192022, 205545, 218010, 228700, 239590, 255470, 266932, 288750, }; d = discid_new(); /* Setting TOC */ printf("Testing discid_put ... "); ret = discid_put(d, 1, 22, offsets); if ( ret ) { printf("OK\n"); nok++; } else printf("Failed\n"); ntests++; /* MusicBrainz DiscID */ printf("Testing discid_get_id ... "); tmp = discid_get_id(d); expected = "xUp1F2NkfP8s8jaeFn_Av3jNEI4-"; if ( strcmp(tmp, expected) == 0 ) { printf("OK\n"); nok++; } else { printf("Failed\n"); printf(" Expected : %s\n", expected); printf(" Actual : %s\n", tmp); } ntests++; /* FreeDB DiscID */ printf("Testing discid_get_freedb_id ... "); tmp = discid_get_freedb_id(d); expected = "370fce16"; if ( strcmp(tmp, expected) == 0 ) { printf("OK\n"); nok++; } else { printf("Failed\n"); printf(" Expected : %s\n", expected); printf(" Actual : %s\n", tmp); } ntests++; /* MusicBrainz web submit URL */ printf("Testing discid_get_submission_url ... "); tmp = discid_get_submission_url(d); expected = "http://mm.musicbrainz.org/bare/cdlookup.html?id=xUp1F2NkfP8s8jaeFn_Av3jNEI4-&tracks=22&toc=1+22+303602+150+9700+25887+39297+53795+63735+77517+94877+107270+123552+135522+148422+161197+174790+192022+205545+218010+228700+239590+255470+266932+288750"; if ( strcmp(tmp, expected) == 0 ) { printf("OK\n"); nok++; } else { printf("Failed\n"); printf(" Expected : %s\n", expected); printf(" Actual : %s\n", tmp); } ntests++; printf("\n%d tests, %d passed, %d failed\n", ntests, nok, ntests - nok); discid_free(d); return ntests != nok; }