summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFredrik Noring <noring@nocrew.org>2019-08-05 10:50:47 +0200
committerMax Kellermann <max@musicpd.org>2019-08-10 10:50:51 +0200
commit2d61e526deaa13a835a1307dc6fc701162495932 (patch)
tree68d1aa1053ec36667a5cc471d77e8561a37559eb
parent7723c481db66f089f5ccde941a0a952cb1b16e2e (diff)
decoder/sidplay: Fix date field to have year but not company or author
Field 2 is called <released>, formerly used as <copyright>[1][2]. It is formatted <year><space><company or author or group>, where <year> may be <YYYY>, <YYY?>, <YY??> or <YYYY-YY>, for example "1987", "199?", "19??" or "1985-87". The <company or author or group> may be for example Rob Hubbard. A full field may be for example "1987 Rob Hubbard". This change splits the <released> field at the first <space>, to retain the <year> part. The 51823 SID files in High Voltage SID Collection (HVSC) version 71 have the following distribution of dates: 333 19?? 11 1990-92 6 1995-99 2 2006-08 827 198? 88 1990-93 2140 1996 530 2007 32 1982 69 1990-94 9 1996-97 15 2007-08 1 1982-83 49 1990-95 2 1996-98 2 2007-09 255 1983 3467 1991 5 1996-99 1 2007-10 677 1984 75 1991-92 1840 1997 430 2008 775 1985 65 1991-93 4 1997-98 23 2008-09 3 1985-86 10 1991-94 1276 1998 1 2008-12 10 1985-87 35 1991-97 4 1998-99 631 2009 943 1986 3320 1992 865 1999 1 2009-10 12 1986-87 26 1992-93 24 200? 645 2010 5 1986-89 59 1992-94 590 2000 1 2010-12 2083 1987 1 1992-96 4 2000-01 538 2011 31 1987-88 2996 1993 727 2001 1 2011-12 44 1987-89 42 1993-94 875 2002 651 2012 2510 1988 12 1993-95 2 2002-04 811 2013 129 1988-89 2 1993-97 844 2003 790 2014 91 1988-90 2737 1994 3 2003-05 740 2015 58 1988-91 16 1994-95 842 2004 792 2016 3466 1989 20 1994-96 2 2004-05 775 2017 95 1989-90 17 1994-97 707 2005 638 2018 150 1989-91 2271 1995 1 2005-06 284 2019 1077 199? 2 1995-96 2 2005-07 2834 1990 4 1995-97 785 2006 119 1990-91 2 1995-98 6 2006-07 References: [1] https://www.hvsc.c64.org/download/C64Music/DOCUMENTS/SID_file_format.txt [2] https://hvsc.c64.org/info
-rw-r--r--NEWS1
-rw-r--r--src/decoder/plugins/SidplayDecoderPlugin.cxx26
2 files changed, 26 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 1ca3a3123..acc735d2e 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,7 @@ ver 0.21.14 (not yet released)
* decoder
- sidplay: show track durations in database
- sidplay: convert tag values from Windows-1252 charset
+ - sidplay: strip text from "Date" tag
ver 0.21.13 (2019/08/06)
* input
diff --git a/src/decoder/plugins/SidplayDecoderPlugin.cxx b/src/decoder/plugins/SidplayDecoderPlugin.cxx
index 619ef38f6..8a22e0817 100644
--- a/src/decoder/plugins/SidplayDecoderPlugin.cxx
+++ b/src/decoder/plugins/SidplayDecoderPlugin.cxx
@@ -477,6 +477,30 @@ GetInfoString(const SidTuneInfo &info, unsigned i) noexcept
return Windows1252ToUTF8(s);
}
+gcc_pure
+static AllocatedString<char>
+GetDateString(const SidTuneInfo &info) noexcept
+{
+ /*
+ * Field 2 is called <released>, previously used as <copyright>.
+ * It is formatted <year><space><company or author or group>,
+ * where <year> may be <YYYY>, <YYY?>, <YY??> or <YYYY-YY>, for
+ * example "1987", "199?", "19??" or "1985-87". The <company or
+ * author or group> may be for example Rob Hubbard. A full field
+ * may be for example "1987 Rob Hubbard".
+ */
+ AllocatedString<char> release = GetInfoString(info, 2);
+
+ /* Keep the <year> part only for the date. */
+ for (size_t i = 0; release[i] != AllocatedString<char>::SENTINEL; i++)
+ if (std::isspace(release[i])) {
+ release[i] = AllocatedString<char>::SENTINEL;
+ break;
+ }
+
+ return release;
+}
+
static void
ScanSidTuneInfo(const SidTuneInfo &info, unsigned track, unsigned n_tracks,
TagHandler &handler) noexcept
@@ -498,7 +522,7 @@ ScanSidTuneInfo(const SidTuneInfo &info, unsigned track, unsigned n_tracks,
handler.OnTag(TAG_ARTIST, artist.c_str());
/* date */
- const auto date = GetInfoString(info, 2);
+ const auto date = GetDateString(info);
if (!date.empty())
handler.OnTag(TAG_DATE, date.c_str());