aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Alex Bennee <alex@bennee.com>2010-07-14 16:11:42 +0100
committerGravatar Alex Bennee <alex@bennee.com>2010-07-14 16:11:42 +0100
commit7801e5b946b21fd1ae51980bdd99c5ad7698c7af (patch)
tree6fc706da90cffafb4b4fbf7353947b0dab9450fa
parente5d57fd684d1baa084cac5d5082f4020fc5e540b (diff)
Applied Gentoo cddb patch
-rwxr-xr-xsrc/cddb.c117
1 files changed, 80 insertions, 37 deletions
diff --git a/src/cddb.c b/src/cddb.c
index f23de7e..a150fce 100755
--- a/src/cddb.c
+++ b/src/cddb.c
@@ -2158,10 +2158,12 @@ gchar *Cddb_Generate_Request_String_With_Fields_And_Categories_Options (void)
*/
gboolean Cddb_Search_Album_List_From_String (void)
{
- if ( strstr(CDDB_SERVER_NAME_MANUAL_SEARCH,"freedb") != NULL )
- return Cddb_Search_Album_List_From_String_Freedb();
- else
+ if ( strstr(CDDB_SERVER_NAME_MANUAL_SEARCH,"gnudb") != NULL )
+ // Use of gnudb
return Cddb_Search_Album_List_From_String_Gnudb();
+ else
+ // Use of freedb
+ return Cddb_Search_Album_List_From_String_Freedb();
}
@@ -2255,7 +2257,7 @@ gboolean Cddb_Search_Album_List_From_String_Freedb (void)
g_free(string);
g_free(tmp);
g_free(proxy_auth);
- //g_print("Request : '%s'\n", cddb_in);
+ //g_print("Request Cddb_Search_Album_List_From_String_Freedb : '%s'\n", cddb_in);
// Send the request
gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,_("Sending request ..."));
@@ -2574,7 +2576,7 @@ gboolean Cddb_Search_Album_List_From_String_Gnudb (void)
);
next_page_found = FALSE;
g_free(proxy_auth);
- //g_print("Request : '%s'\n", cddb_in);
+ //g_print("Request Cddb_Search_Album_List_From_String_Gnudb : '%s'\n", cddb_in);
// Send the request
gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,_("Sending request ..."));
@@ -3130,7 +3132,7 @@ gboolean Cddb_Search_Album_From_Selected_Files (void)
(proxy_auth=Cddb_Format_Proxy_Authentification())
);
g_free(proxy_auth);
- //g_print("Request : '%s'\n", cddb_in);
+ //g_print("Request Cddb_Search_Album_From_Selected_Files : '%s'\n", cddb_in);
msg = g_strdup_printf(_("Sending request (CddbId: %s, #tracks: %d, Disc length: %d) ..."),
cddb_discid,num_tracks,disc_length);
@@ -3394,24 +3396,47 @@ gboolean Cddb_Get_Album_Tracks_List (GtkTreeSelection* selection)
CDDB_USE_PROXY?CDDB_PROXY_PORT:cddb_server_port)) <= 0 )
return FALSE;
- // CDDB Request (ex: GET /~cddb/cddb.cgi?cmd=cddb+read+jazz+0200a401&hello=noname+localhost+EasyTAG+0.31&proto=1 HTTP/1.1\r\nHost: freedb.freedb.org:80\r\nConnection: close)
- // Without proxy : "GET /~cddb/cddb.cgi?..." but doesn't work with a proxy.
- // With proxy : "GET http://freedb.freedb.org/~cddb/cddb.cgi?..."
- cddb_in = g_strdup_printf("GET %s%s%s?cmd=cddb+read+"
- "%s+%s"
- "&hello=noname+localhost+%s+%s"
- "&proto=6 HTTP/1.1\r\n"
- "Host: %s:%d\r\n"
- "%s"
- "Connection: close\r\n\r\n",
- CDDB_USE_PROXY?"http://":"",CDDB_USE_PROXY?cddb_server_name:"", cddb_server_cgi_path,
- cddbalbum->category,cddbalbum->id,
- APPNAME,VERSION,
- cddb_server_name,cddb_server_port,
- (proxy_auth=Cddb_Format_Proxy_Authentification())
- );
- g_free(proxy_auth);
- //g_print("Request : '%s'\n", cddb_in);
+ if ( strstr(cddb_server_name,"gnudb") != NULL )
+ {
+ // For gnudb
+ // New version of gnudb doesn't use a cddb request, but a http request
+ cddb_in = g_strdup_printf("GET %s%s/gnudb/"
+ "%s/%s"
+ " HTTP/1.1\r\n"
+ "Host: %s:%d\r\n"
+ "User-Agent: %s %s\r\n"
+ "%s"
+ "Connection: close\r\n"
+ "\r\n",
+ CDDB_USE_PROXY?"http://":"", CDDB_USE_PROXY?cddb_server_name:"", // Needed when using proxy
+ cddbalbum->category,cddbalbum->id,
+ cddb_server_name,cddb_server_port,
+ APPNAME,VERSION,
+ (proxy_auth=Cddb_Format_Proxy_Authentification())
+ );
+ }else
+ {
+ // CDDB Request (ex: GET /~cddb/cddb.cgi?cmd=cddb+read+jazz+0200a401&hello=noname+localhost+EasyTAG+0.31&proto=1 HTTP/1.1\r\nHost: freedb.freedb.org:80\r\nConnection: close)
+ // Without proxy : "GET /~cddb/cddb.cgi?..." but doesn't work with a proxy.
+ // With proxy : "GET http://freedb.freedb.org/~cddb/cddb.cgi?..."
+ cddb_in = g_strdup_printf("GET %s%s%s?cmd=cddb+read+"
+ "%s+%s"
+ "&hello=noname+localhost+%s+%s"
+ "&proto=6 HTTP/1.1\r\n"
+ "Host: %s:%d\r\n"
+ "%s"
+ "Connection: close\r\n\r\n",
+ CDDB_USE_PROXY?"http://":"",CDDB_USE_PROXY?cddb_server_name:"", cddb_server_cgi_path,
+ cddbalbum->category,cddbalbum->id,
+ APPNAME,VERSION,
+ cddb_server_name,cddb_server_port,
+ (proxy_auth=Cddb_Format_Proxy_Authentification())
+ );
+ }
+
+
+ g_free(proxy_auth);
+ //g_print("Request Cddb_Get_Album_Tracks_List : '%s'\n", cddb_in);
// Send the request
gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,_("Sending request ..."));
@@ -3444,20 +3469,38 @@ gboolean Cddb_Get_Album_Tracks_List (GtkTreeSelection* selection)
}
- // Parse server answer : Check HTTP Header and CDDB Header
+ // Parse server answer : Check HTTP Header (freedb or gnudb) and CDDB Header (freedb only)
file = NULL;
- if ( Cddb_Read_Http_Header(&file,&cddb_out) <= 0
- || Cddb_Read_Cddb_Header(&file,&cddb_out) <= 0 )
- {
- gchar *msg = g_strdup_printf(_("The server returned a wrong answer! (%s)"),cddb_out);
- gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
- Log_Print(LOG_ERROR,"%s",msg);
- g_free(msg);
- g_free(cddb_out);
- if (file)
- fclose(file);
- return FALSE;
- }
+ if ( strstr(cddb_server_name,"gnudb") != NULL )
+ {
+ // For gnudb (don't check CDDB header)
+ if ( Cddb_Read_Http_Header(&file,&cddb_out) <= 0 )
+ {
+ gchar *msg = g_strdup_printf(_("The server returned a wrong answer! (%s)"),cddb_out);
+ gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
+ Log_Print(LOG_ERROR,"%s",msg);
+ g_free(msg);
+ g_free(cddb_out);
+ if (file)
+ fclose(file);
+ return FALSE;
+ }
+ }else
+ {
+ // For freedb
+ if ( Cddb_Read_Http_Header(&file,&cddb_out) <= 0
+ || Cddb_Read_Cddb_Header(&file,&cddb_out) <= 0 )
+ {
+ gchar *msg = g_strdup_printf(_("The server returned a wrong answer! (%s)"),cddb_out);
+ gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
+ Log_Print(LOG_ERROR,"%s",msg);
+ g_free(msg);
+ g_free(cddb_out);
+ if (file)
+ fclose(file);
+ return FALSE;
+ }
+ }
g_free(cddb_out);
}