Mercurial > audlegacy-plugins
diff src/cdaudio/cddb.c @ 399:597c89a37d07 trunk
[svn] - add DYEAR and DGENRE support.
author | yaz |
---|---|
date | Thu, 28 Dec 2006 02:57:42 -0800 |
parents | e6822648a3d5 |
children | 9549fea94794 |
line wrap: on
line diff
--- a/src/cdaudio/cddb.c Sun Dec 24 07:08:26 2006 -0800 +++ b/src/cdaudio/cddb.c Thu Dec 28 02:57:42 2006 -0800 @@ -302,9 +302,11 @@ { gint sock; gchar *readstr; - gchar buffer[256], buffer2[BUF2SIZE]; + gchar buffer[256]; /* http line buffer */ + gchar *discid = NULL, *dartist = NULL, *dtitle = NULL, + *dyear = NULL, *dgenre = NULL, *ttitle = NULL; gchar *realstr, *temp; - gint len, command, bufs; + gint len, command; gint num, oldnum; if ((sock = cddb_http_open_connection(server, 80)) == 0) @@ -331,10 +333,8 @@ cddb_log("Read response: %s", buffer); command = 1; - bufs = 0; oldnum = -1; do { -/* fprintf(stderr,"%s\n",buffer); */ realstr = strchr(buffer, '='); if (buffer[0] == '#' || !realstr) continue; @@ -344,58 +344,55 @@ switch (command) { case 1: - if (!strncmp(buffer, "DISCID", 6)) - break; + if (!strncmp(buffer, "DISCID", 6)) { + discid = g_strdup(realstr); + break; + } command++; case 2: if (!strncmp(buffer, "DTITLE", 6)) { - strncpy(buffer2 + bufs, realstr, BUF2SIZE - bufs); - bufs += len; + if((temp = strstr(buffer, " / ")) != NULL) { + dtitle = g_strdup(temp+3); + dartist = g_strndup(realstr, temp - realstr); + } + else { + dtitle = g_strdup(realstr); + } break; } - if (bufs > 0) { - buffer2[BUF2SIZE - 1] = '\0'; - if ((temp = strstr(buffer2, " / ")) != NULL) { - cdda_cdinfo_cd_set(cdinfo, g_strdup(temp + 3), - g_strndup(buffer2, temp - buffer2)); - } - else - cdda_cdinfo_cd_set(cdinfo, g_strdup(buffer2), - g_strdup(buffer2)); - bufs = 0; - } command++; case 3: if (!strncmp(buffer, "DYEAR", 5)) { + dyear = g_strdup(realstr); break; } command++; case 4: if (!strncmp(buffer, "DGENRE", 6)) { + dgenre = g_strdup(realstr); break; } + + // we have obtained all necessary data to set discinfo + cdda_cdinfo_cd_set(cdinfo, dtitle, dartist, discid, dgenre, dyear); + command++; case 5: if (!strncmp(buffer, "TTITLE", 6)) { num = atoi(buffer + 6); if (oldnum < 0 || num == oldnum) { - strncpy(buffer2 + bufs, realstr, BUF2SIZE - bufs); - bufs += len; + ttitle = g_strdup(realstr); } else { - buffer2[BUF2SIZE - 1] = '\0'; - cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, - g_strdup(buffer2)); - strncpy(buffer2, realstr, BUF2SIZE); - bufs = len; + cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, ttitle); + ttitle = g_strdup(realstr); } oldnum = num; break; } if (oldnum >= 0) - cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, - g_strdup(buffer2)); - bufs = 0; + cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, ttitle); + oldnum = -1; command++; case 6: @@ -422,7 +419,7 @@ } while (http_read_line(sock, buffer, 256) >= 0); if (oldnum >= 0) - cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, g_strdup(buffer2)); + cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, ttitle); http_close_connection(sock); return TRUE; @@ -553,16 +550,17 @@ cdinfo_t * cdinfo) { FILE *fd; - gchar buffer[256], buffer2[BUF2SIZE]; + gchar buffer[256]; gchar *realstr, *temp; - gint len, command, bufs; + gchar *discid = NULL, *dartist = NULL, *dtitle = NULL, + *dyear = NULL, *dgenre = NULL, *ttitle = NULL; + gint len, command; gint num, oldnum; if ((fd = fopen(file, "r")) == NULL) return 0; command = 1; - bufs = 0; oldnum = -1; while (fgets(buffer, 256, fd) != NULL) { realstr = strchr(buffer, '='); @@ -576,58 +574,55 @@ switch (command) { case 1: - if (!strncmp(buffer, "DISCID", 6)) + if (!strncmp(buffer, "DISCID", 6)) { + discid = g_strdup(realstr); break; + } command++; case 2: if (!strncmp(buffer, "DTITLE", 6)) { - strncpy(buffer2 + bufs, realstr, BUF2SIZE - bufs); - bufs += len; + if((temp = strstr(buffer, " / ")) != NULL) { + dtitle = g_strdup(temp+3); + dartist = g_strndup(realstr, temp - realstr); + } + else { + dtitle = g_strdup(realstr); + } break; } - if (bufs > 0) { - buffer2[BUF2SIZE - 1] = '\0'; - if ((temp = strstr(buffer2, " / ")) != NULL) { - cdda_cdinfo_cd_set(cdinfo, g_strdup(temp + 3), - g_strndup(buffer2, temp - buffer2)); - } - else - cdda_cdinfo_cd_set(cdinfo, g_strdup(buffer2), - g_strdup(buffer2)); - bufs = 0; - } command++; case 3: if (!strncmp(buffer, "DYEAR", 5)) { + dyear = g_strdup(realstr); break; } command++; case 4: if (!strncmp(buffer, "DGENRE", 6)) { + dgenre = g_strdup(realstr); break; } + + // we have obtained all necessary data to set discinfo + cdda_cdinfo_cd_set(cdinfo, dtitle, dartist, discid, dgenre, dyear); + command++; case 5: if (!strncmp(buffer, "TTITLE", 6)) { num = atoi(buffer + 6); if (oldnum < 0 || num == oldnum) { - strncpy(buffer2 + bufs, realstr, BUF2SIZE - bufs); - bufs += len; + ttitle = g_strdup(realstr); } else { - buffer2[BUF2SIZE - 1] = '\0'; - cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, - g_strdup(buffer2)); - strncpy(buffer2, realstr, BUF2SIZE); - bufs = len; + cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, ttitle); + ttitle = g_strdup(realstr); } oldnum = num; break; } if (oldnum >= 0) - cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, - g_strdup(buffer2)); - bufs = 0; + cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, ttitle); + oldnum = -1; command++; case 6: @@ -654,7 +649,7 @@ } if (oldnum >= 0) - cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, g_strdup(buffer2)); + cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, ttitle); fclose(fd); return (1);