# HG changeset patch # User yaz # Date 1167303462 28800 # Node ID 597c89a37d07b1235c6f71ff230ea07c139ea9de # Parent 7e4e672de0dc77f8f30d34901a05f3632a7ff15e [svn] - add DYEAR and DGENRE support. diff -r 7e4e672de0dc -r 597c89a37d07 ChangeLog --- a/ChangeLog Sun Dec 24 07:08:26 2006 -0800 +++ b/ChangeLog Thu Dec 28 02:57:42 2006 -0800 @@ -1,3 +1,11 @@ +2006-12-24 15:08:26 +0000 Michael Hanselmann + revision [872] + Add .s3m to allowed extensions, reported by Chainsaw. + + trunk/src/modplug/plugin.cxx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + + 2006-12-23 22:46:28 +0000 Michael Hanselmann revision [870] Fix endian issues on ppc32. diff -r 7e4e672de0dc -r 597c89a37d07 src/cdaudio/cdaudio.c --- a/src/cdaudio/cdaudio.c Sun Dec 24 07:08:26 2006 -0800 +++ b/src/cdaudio/cdaudio.c Thu Dec 28 02:57:42 2006 -0800 @@ -1058,6 +1058,9 @@ if (!tuple->track_name) tuple->track_name = g_strdup_printf(_("CD Audio Track %02u"), track); + tuple->genre = g_strdup(cdinfo.genre); + tuple->year = cdinfo.year; + return tuple; } diff -r 7e4e672de0dc -r 597c89a37d07 src/cdaudio/cddb.c --- 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); diff -r 7e4e672de0dc -r 597c89a37d07 src/cdaudio/cdinfo.c --- a/src/cdaudio/cdinfo.c Sun Dec 24 07:08:26 2006 -0800 +++ b/src/cdaudio/cdinfo.c Thu Dec 28 02:57:42 2006 -0800 @@ -118,18 +118,23 @@ /* - * Function cdda_cdinfo_cd_set (cdinfo, cdname, cdartist) + * Function cdda_cdinfo_cd_set (cdinfo, cdname, cdartist, discid, + * genre, year) * - * Set name and artist for a cd. If CD is a multiartist disc, the - * `artist' should be set to NULL. + * Set name, artist, discid, genre and year for a cd. If CD is a + * multiartist disc, the `artist' should be set to NULL. * */ void -cdda_cdinfo_cd_set(cdinfo_t * cdinfo, gchar * cdname, gchar * cdartist) +cdda_cdinfo_cd_set(cdinfo_t * cdinfo, gchar * cdname, gchar * cdartist, + gchar * discid, gchar * genre, gchar *year) { + cdinfo->is_valid = TRUE; cdinfo->albname = cdname; cdinfo->artname = cdartist; - cdinfo->is_valid = TRUE; + cdinfo->discid = discid ? atoi(discid) : 0; + cdinfo->genre = genre; + cdinfo->year = year ? atoi(year) : 0; } @@ -188,9 +193,20 @@ cdinfo->albname); else bmp_rcfile_write_string(rcfile, sectionname, "Albumname", ""); + if (cdinfo->artname) bmp_rcfile_write_string(rcfile, sectionname, "Artistname", cdinfo->artname); + if (cdinfo->year) { + gchar *yearstr = g_strdup_printf("%4d", cdinfo->year); + bmp_rcfile_write_string(rcfile, sectionname, "Year", yearstr); + g_free(yearstr); + } + + if (cdinfo->genre) + bmp_rcfile_write_string(rcfile, sectionname, "Genre", cdinfo->genre); + + for (i = 1; i <= numtracks; i++) { if (cdinfo->tracks[i].artist) { sprintf(trackstr, "track_artist%d", i); @@ -224,6 +240,7 @@ gchar sectionname[10], trackstr[16]; gint i, numtracks = cddb_discid & 0xff; gboolean track_found; + gchar *yearstr = NULL; sprintf(sectionname, "%08x", cddb_discid); @@ -242,6 +259,15 @@ bmp_rcfile_read_string(rcfile, sectionname, "Artistname", &cdinfo->artname); + bmp_rcfile_read_string(rcfile, sectionname, "Year", &yearstr); + if (yearstr) { + cdinfo->year = atoi(yearstr); + g_free(yearstr); + yearstr = NULL; + } + + bmp_rcfile_read_string(rcfile, sectionname, "Genre", &cdinfo->genre); + for (i = 1; i <= numtracks; i++) { track_found = FALSE; sprintf(trackstr, "track_artist%d", i); diff -r 7e4e672de0dc -r 597c89a37d07 src/cdaudio/cdinfo.h --- a/src/cdaudio/cdinfo.h Sun Dec 24 07:08:26 2006 -0800 +++ b/src/cdaudio/cdinfo.h Thu Dec 28 02:57:42 2006 -0800 @@ -36,8 +36,11 @@ */ typedef struct { gboolean is_valid; + gint discid; gchar *albname; gchar *artname; + gchar *genre; + gint year; trackinfo_t tracks[100]; } cdinfo_t; @@ -45,9 +48,8 @@ cdinfo_t *cdda_cdinfo_new(void); void cdda_cdinfo_delete(cdinfo_t * info); void cdda_cdinfo_track_set(cdinfo_t * cdinfo, gint, gchar *, gchar *); -void cdda_cdinfo_cd_set(cdinfo_t * cdinfo, gchar *, gchar *); -gint cdda_cdinfo_get(cdinfo_t * cdinfo, gint num, gchar **, gchar **, - gchar **); +void cdda_cdinfo_cd_set(cdinfo_t * cdinfo, gchar *, gchar *, gchar *, gchar *, gchar *); +gint cdda_cdinfo_get(cdinfo_t * cdinfo, gint num, gchar **, gchar **, gchar **); gboolean cdda_cdinfo_read_file(guint32 cddb_discid, cdinfo_t * cdinfo); void cdda_cdinfo_write_file(guint32 cddb_discid, cdinfo_t * cdinfo);