diff src/cdaudio-ng/cdaudio-ng.c @ 2384:0824c92b6132

- fixed a bug which writes TRUE as the default port number. - fixed a bug that a discid had been stored in signed int. (should be uint.) - fixed a potential memory leak. - cddb cache has been enabled. - code for processing config values has been cleaned up. - removed unnecessary create_tuple_from_trackinfo().
author Yoshiki Yazawa <yaz@cc.rim.or.jp>
date Wed, 13 Feb 2008 01:29:20 +0900
parents 854b5fae995e
children 944a510f5200
line wrap: on
line diff
--- a/src/cdaudio-ng/cdaudio-ng.c	Tue Feb 12 02:25:03 2008 -0600
+++ b/src/cdaudio-ng/cdaudio-ng.c	Wed Feb 13 01:29:20 2008 +0900
@@ -48,15 +48,15 @@
 #include "configure.h"
 
 
-struct cdng_cfg_t			cdng_cfg;
-static gint					firsttrackno = -1;
-static gint					lasttrackno = -1;
+cdng_cfg_t				cdng_cfg;
+static gint				firsttrackno = -1;
+static gint				lasttrackno = -1;
 static CdIo_t				*pcdio = NULL;
 static trackinfo_t			*trackinfo = NULL;
 static gboolean				is_paused = FALSE;
-static gint					playing_track = -1;
+static gint				playing_track = -1;
 static dae_params_t			*pdae_params = NULL;
-static InputPlayback		*pglobalinputplayback = NULL;
+static InputPlayback			*pglobalinputplayback = NULL;
 static GtkWidget			*main_menu_item, *playlist_menu_item;
 static GThread				*scan_cd_thread = NULL;
 
@@ -73,11 +73,10 @@
 static gint			cdaudio_set_volume(gint l, gint r);
 static void			cdaudio_cleanup(void);
 static void			cdaudio_get_song_info(gchar *filename, gchar **title, gint *length);
-static Tuple		*cdaudio_get_song_tuple(gchar *filename);
+static Tuple			*cdaudio_get_song_tuple(gchar *filename);
 
 static void			menu_click(void);
-static Tuple		*create_tuple_from_trackinfo_and_filename(gchar *filename);
-static Tuple		*create_tuple_from_trackinfo(int trackno);
+static Tuple			*create_tuple_from_trackinfo_and_filename(gchar *filename);
 static void			dae_play_loop(dae_params_t *pdae_params);
 static void			*scan_cd(void *nothing);
 static void			scan_cd_threaded();
@@ -139,7 +138,20 @@
 
 	debug("cdaudio_init()\n");
 
-	memset(&cdng_cfg, 0, sizeof(cdng_cfg));
+	cdng_cfg.use_dae = TRUE;
+	cdng_cfg.use_cdtext = TRUE;
+	cdng_cfg.use_cddb = TRUE;
+	cdng_cfg.debug = FALSE;
+	cdng_cfg.device = g_strdup("");
+	cdng_cfg.cddb_server = g_strdup(CDDA_DEFAULT_CDDB_SERVER);
+	cdng_cfg.cddb_port = CDDA_DEFAULT_CDDB_PORT;
+	cdng_cfg.cddb_http = FALSE;
+	cdng_cfg.limitspeed = CDDA_DEFAULT_LIMIT_SPEED;
+	cdng_cfg.use_proxy = FALSE;
+	cdng_cfg.proxy_host = g_strdup("");
+	cdng_cfg.proxy_port = CDDA_DEFAULT_PROXY_PORT;
+	cdng_cfg.proxy_username = g_strdup("");
+	cdng_cfg.proxy_password = g_strdup("");
 
 	if ((db = aud_cfg_db_open()) == NULL) {
 		cdaudio_error("Failed to read configuration.\n");
@@ -150,42 +162,26 @@
 	if (!cdio_init()) {
 		cdaudio_error("Failed to initialize cdio subsystem.\n");
 		cleanup_on_error();
+		aud_cfg_db_close(db);
 		return;
 	}
 
 	libcddb_init();
 
-	/*
-	if (!aud_cfg_db_get_bool(db, "CDDA", "use_dae", &cdng_cfg.use_dae))
-	*/
-	cdng_cfg.use_dae = TRUE;
-
-	if (!aud_cfg_db_get_int(db, "CDDA", "limitspeed", &cdng_cfg.limitspeed))
-		cdng_cfg.limitspeed = 1;
-	if (!aud_cfg_db_get_bool(db, "CDDA", "use_cdtext", &cdng_cfg.use_cdtext))
-		cdng_cfg.use_cdtext = TRUE;
-	if (!aud_cfg_db_get_bool(db, "CDDA", "use_cddb", &cdng_cfg.use_cddb))
-		cdng_cfg.use_cddb = TRUE;
-	if (!aud_cfg_db_get_string(db, "CDDA", "cddbserver", &cdng_cfg.cddb_server))
-		cdng_cfg.cddb_server = g_strdup(CDDA_DEFAULT_CDDB_SERVER);
-	if (!aud_cfg_db_get_int(db, "CDDA", "cddbport", &cdng_cfg.cddb_port))
-		cdng_cfg.cddb_port = CDDA_DEFAULT_CDDB_PORT;
-	if (!aud_cfg_db_get_bool(db, "CDDA", "cddbhttp", &cdng_cfg.cddb_http))
-		cdng_cfg.cddb_port = FALSE;
-	if (!aud_cfg_db_get_string(db, "CDDA", "device", &cdng_cfg.device))
-		cdng_cfg.device = g_strdup("");
-	if (!aud_cfg_db_get_bool(db, "CDDA", "debug", &cdng_cfg.debug))
-		cdng_cfg.debug = FALSE;
-	if (!aud_cfg_db_get_bool(db, "audacious", "use_proxy", &cdng_cfg.use_proxy))
-		cdng_cfg.use_proxy = FALSE;
-	if (!aud_cfg_db_get_string(db, "audacious", "proxy_host", &cdng_cfg.proxy_host))
-		cdng_cfg.proxy_host = g_strdup("");
-	if (!aud_cfg_db_get_int(db, "audacious", "proxy_port", &cdng_cfg.proxy_port))
-		cdng_cfg.proxy_port = 8080;
-	if (!aud_cfg_db_get_string(db, "audacious", "proxy_user", &cdng_cfg.proxy_username))
-		cdng_cfg.proxy_username = g_strdup("");
-	if (!aud_cfg_db_get_string(db, "audacious", "proxy_pass", &cdng_cfg.proxy_password))
-		cdng_cfg.proxy_password = g_strdup("");
+	aud_cfg_db_get_bool(db, "CDDA", "use_dae", &cdng_cfg.use_dae);
+	aud_cfg_db_get_bool(db, "CDDA", "use_cdtext", &cdng_cfg.use_cdtext);
+	aud_cfg_db_get_bool(db, "CDDA", "use_cddb", &cdng_cfg.use_cddb);
+	aud_cfg_db_get_bool(db, "CDDA", "debug", &cdng_cfg.debug);
+	aud_cfg_db_get_string(db, "CDDA", "device", &cdng_cfg.device);
+	aud_cfg_db_get_string(db, "CDDA", "cddbserver", &cdng_cfg.cddb_server);
+	aud_cfg_db_get_int(db, "CDDA", "cddbport", &cdng_cfg.cddb_port);
+	aud_cfg_db_get_bool(db, "CDDA", "cddbhttp", &cdng_cfg.cddb_http);
+	aud_cfg_db_get_int(db, "CDDA", "limitspeed", &cdng_cfg.limitspeed);
+	aud_cfg_db_get_bool(db, "audacious", "use_proxy", &cdng_cfg.use_proxy);
+	aud_cfg_db_get_string(db, "audacious", "proxy_host", &cdng_cfg.proxy_host);
+	aud_cfg_db_get_int(db, "audacious", "proxy_port", &cdng_cfg.proxy_port);
+	aud_cfg_db_get_string(db, "audacious", "proxy_user", &cdng_cfg.proxy_username);
+	aud_cfg_db_get_string(db, "audacious", "proxy_pass", &cdng_cfg.proxy_password);
 
 	aud_cfg_db_close(db);
 
@@ -565,7 +561,7 @@
 	// todo: destroy the gui
 
 	ConfigDb *db = aud_cfg_db_open();
-	/*aud_cfg_db_set_bool(db, "CDDA", "use_dae", cdng_cfg.use_dae);*/
+	aud_cfg_db_set_bool(db, "CDDA", "use_dae", cdng_cfg.use_dae);
 	aud_cfg_db_set_int(db, "CDDA", "limitspeed", cdng_cfg.limitspeed);
 	aud_cfg_db_set_bool(db, "CDDA", "use_cdtext", cdng_cfg.use_cdtext);
 	aud_cfg_db_set_bool(db, "CDDA", "use_cddb", cdng_cfg.use_cddb);
@@ -646,40 +642,6 @@
 	}
 }
 
-static Tuple *create_tuple_from_trackinfo(int trackno)
-{
-	Tuple *tuple = aud_tuple_new();
-
-	if (trackinfo == NULL)
-		return tuple;
-
-	if (trackno < firsttrackno || trackno > lasttrackno)
-		return tuple;
-
-	if(strlen(trackinfo[trackno].performer)) {
-		aud_tuple_associate_string(tuple, FIELD_ARTIST, NULL, trackinfo[trackno].performer);
-	}
-	if(strlen(trackinfo[0].name)) {
-		aud_tuple_associate_string(tuple, FIELD_ALBUM, NULL, trackinfo[0].name);
-	}
-	if(strlen(trackinfo[trackno].name)) {
-		aud_tuple_associate_string(tuple, FIELD_TITLE, NULL, trackinfo[trackno].name);
-	}
-
-	aud_tuple_associate_int(tuple, FIELD_TRACK_NUMBER, NULL, trackno);
-	aud_tuple_associate_string(tuple, -1, "ext", "cda"); //XXX should do? --yaz
-
-	aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL,
-		calculate_track_length(trackinfo[trackno].startlsn, trackinfo[trackno].endlsn));
-
-	if(strlen(trackinfo[trackno].genre)) {
-		aud_tuple_associate_string(tuple, FIELD_GENRE, NULL,  trackinfo[trackno].genre);
-	}
-	//tuple->year = 0; todo: set the year
-
-	return tuple;
-}
-
 static Tuple *create_tuple_from_trackinfo_and_filename(gchar *filename)
 {
 	Tuple *tuple = aud_tuple_new_from_filename(filename);
@@ -955,6 +917,9 @@
 			else {
 				debug("getting CDDB info\n");
 
+				cddb_cache_enable(pcddb_conn);
+				//cddb_cache_set_dir(pcddb_conn, "~/.cddbslave");
+
 				if (cdng_cfg.use_proxy) {
 					cddb_http_proxy_enable(pcddb_conn);
 					cddb_set_http_proxy_server_name(pcddb_conn, cdng_cfg.proxy_host);
@@ -988,7 +953,7 @@
 				cddb_disc_set_length(pcddb_disc, cdio_audio_get_msf_seconds(&endmsf) - cdio_audio_get_msf_seconds(&startmsf));
 
 				cddb_disc_calc_discid(pcddb_disc);
-				int discid = cddb_disc_get_discid(pcddb_disc);
+				unsigned int discid = cddb_disc_get_discid(pcddb_disc);
 				debug("CDDB disc id = %x\n", discid);
 
 				gint matches;