Use CD-Text for disc info too.

This commit is contained in:
rocky
2005-03-13 03:37:18 +00:00
parent fcc0806e8d
commit 31796641ec

View File

@@ -1,5 +1,5 @@
/* /*
$Id: cdda-player.c,v 1.8 2005/03/12 20:32:23 rocky Exp $ $Id: cdda-player.c,v 1.9 2005/03/13 03:37:18 rocky Exp $
Copyright (C) 2005 Rocky Bernstein <rocky@panix.com> Copyright (C) 2005 Rocky Bernstein <rocky@panix.com>
@@ -191,8 +191,7 @@ typedef enum {
LINE_LAST = 25 LINE_LAST = 25
} track_line_t; } track_line_t;
/*! Curses window initialization. */
static void static void
tty_raw() tty_raw()
{ {
@@ -205,20 +204,22 @@ tty_raw()
refresh(); refresh();
} }
/*! Curses window finalization. */
static void static void
tty_restore() tty_restore()
{ {
if (!interactive) return; if (!interactive) return;
endwin(); endwin();
} }
/* Signal handler - Ctrl-C and others. */
static void static void
ctrlc(int signal) ctrlc(int signal)
{ {
b_sig = true; b_sig = true;
} }
/* Timed wait on an event. */
static int static int
select_wait(int sec) select_wait(int sec)
{ {
@@ -291,6 +292,7 @@ oops(const char *psz_msg, int rc)
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
/*! Stop playing audio CD */
static void static void
cd_stop(CdIo_t *p_cdio) cd_stop(CdIo_t *p_cdio)
{ {
@@ -302,6 +304,7 @@ cd_stop(CdIo_t *p_cdio)
} }
} }
/*! Eject CD */
static void static void
cd_eject(void) cd_eject(void)
{ {
@@ -315,6 +318,7 @@ cd_eject(void)
} }
} }
/*! Close CD tray */
static void static void
cd_close(const char *psz_device) cd_close(const char *psz_device)
{ {
@@ -325,6 +329,7 @@ cd_close(const char *psz_device)
} }
} }
/*! Pause playing audio CD */
static void static void
cd_pause(CdIo_t *p_cdio) cd_pause(CdIo_t *p_cdio)
{ {
@@ -333,6 +338,7 @@ cd_pause(CdIo_t *p_cdio)
xperror("pause"); xperror("pause");
} }
/*! Get status/track/position info of an audio CD */
static void static void
read_subchannel(CdIo_t *p_cdio) read_subchannel(CdIo_t *p_cdio)
{ {
@@ -348,9 +354,58 @@ read_subchannel(CdIo_t *p_cdio)
} }
#define add_cddb_disc_info(format_str, field) \ #define add_cddb_disc_info(format_str, field) \
if (p_cddb_disc->field) \ if (p_cddb_disc->field && !strlen(field)) \
snprintf(field, sizeof(field), format_str, p_cddb_disc->field); snprintf(field, sizeof(field), format_str, p_cddb_disc->field);
static void
get_cddb_disc_info(CdIo_t *p_cdio)
{
#ifdef HAVE_CDDB
b_db = init_cddb(p_cdio, &p_conn, &p_cddb_disc, xperror, i_first_track,
i_tracks, &i_cddb_matches);
if (b_db) {
add_cddb_disc_info("%s", artist);
add_cddb_disc_info("%s", title);
add_cddb_disc_info("%s", genre);
add_cddb_disc_info("%4d", year);
}
#endif
return;
}
#define add_cdtext_disc_info(format_str, info_field, FIELD) \
if (p_cdtext->field[FIELD] && !strlen(info_field)) { \
snprintf(info_field, sizeof(info_field), format_str, \
p_cdtext->field[FIELD]); \
}
static void
get_cdtext_disc_info(CdIo_t *p_cdio)
{
cdtext_t *p_cdtext = cdio_get_cdtext(p_cdio, 0);
if (p_cdtext) {
add_cdtext_disc_info("%s", title, CDTEXT_TITLE);
add_cdtext_disc_info("%s", artist, CDTEXT_PERFORMER);
add_cdtext_disc_info("%s", genre, CDTEXT_GENRE);
cdtext_destroy(p_cdtext);
}
}
static void
get_disc_info(CdIo_t *p_cdio)
{
b_db = false;
if (b_prefer_cdtext) {
get_cdtext_disc_info(p_cdio);
get_cddb_disc_info(p_cdio);
} else {
get_cddb_disc_info(p_cdio);
get_cdtext_disc_info(p_cdio);
}
}
/*! Read CD TOC and set CD information. */
static void static void
read_toc(CdIo_t *p_cdio) read_toc(CdIo_t *p_cdio)
{ {
@@ -376,19 +431,7 @@ read_toc(CdIo_t *p_cdio)
} else { } else {
b_cd = true; b_cd = true;
data = 0; data = 0;
#ifdef HAVE_CDDB get_disc_info(p_cdio);
b_db = init_cddb(p_cdio, &p_conn, &p_cddb_disc, xperror, i_first_track,
i_tracks, &i_cddb_matches);
if (b_db) {
add_cddb_disc_info("%s", artist);
add_cddb_disc_info("%s", title);
add_cddb_disc_info("%s", genre);
add_cddb_disc_info("%4d", year);
}
#else
b_db = false;
#endif
for (i = i_first_track; i <= i_last_track+1; i++) { for (i = i_first_track; i <= i_last_track+1; i++) {
int s; int s;
if ( !cdio_get_track_msf(p_cdio, i, &(toc[i])) ) if ( !cdio_get_track_msf(p_cdio, i, &(toc[i])) )
@@ -429,6 +472,7 @@ read_toc(CdIo_t *p_cdio)
display_cdinfo(p_cdio, i_tracks, i_first_track); display_cdinfo(p_cdio, i_tracks, i_first_track);
} }
/*! Play an audio track. */
static void static void
play_track(track_t i_start_track, track_t i_end_track) play_track(track_t i_start_track, track_t i_end_track)
{ {
@@ -614,8 +658,8 @@ get_cdtext_track_info(track_t i_track)
if (NULL != p_cdtext) { if (NULL != p_cdtext) {
add_cdtext_track_info("%s", title, CDTEXT_TITLE); add_cdtext_track_info("%s", title, CDTEXT_TITLE);
add_cdtext_track_info("%s", title, CDTEXT_PERFORMER); add_cdtext_track_info("%s", title, CDTEXT_PERFORMER);
}
cdtext_destroy(p_cdtext); cdtext_destroy(p_cdtext);
}
} }
static void static void