From ccb4f44caf34c9d24ab5b4c7404be75effc69cb2 Mon Sep 17 00:00:00 2001
From: Bart Nagel <bart@tremby.net>
Date: Sun, 16 Apr 2017 16:08:19 -0700
Subject: [PATCH] Add support for the OriginalDate tag

See https://picard.musicbrainz.org/docs/mappings/

This tag is useful when the user would like all releases of the same
album to be sorted next to each other.
---
 src/db/plugins/ProxyDatabasePlugin.cxx   | 3 +++
 src/output/plugins/HaikuOutputPlugin.cxx | 1 +
 src/tag/Id3Scan.cxx                      | 6 ++++++
 src/tag/Names.c                          | 1 +
 src/tag/Type.h                           | 1 +
 5 files changed, 12 insertions(+)

diff --git a/src/db/plugins/ProxyDatabasePlugin.cxx b/src/db/plugins/ProxyDatabasePlugin.cxx
index 6c793054a..985fce35a 100644
--- a/src/db/plugins/ProxyDatabasePlugin.cxx
+++ b/src/db/plugins/ProxyDatabasePlugin.cxx
@@ -158,6 +158,9 @@ static constexpr struct {
 	{ TAG_NAME, MPD_TAG_NAME },
 	{ TAG_GENRE, MPD_TAG_GENRE },
 	{ TAG_DATE, MPD_TAG_DATE },
+#if LIBMPDCLIENT_CHECK_VERSION(2,12,0)
+	{ TAG_ORIGINAL_DATE, MPD_TAG_ORIGINAL_DATE },
+#endif
 	{ TAG_COMPOSER, MPD_TAG_COMPOSER },
 	{ TAG_PERFORMER, MPD_TAG_PERFORMER },
 	{ TAG_COMMENT, MPD_TAG_COMMENT },
diff --git a/src/output/plugins/HaikuOutputPlugin.cxx b/src/output/plugins/HaikuOutputPlugin.cxx
index 1220f94fe..b8353db9b 100644
--- a/src/output/plugins/HaikuOutputPlugin.cxx
+++ b/src/output/plugins/HaikuOutputPlugin.cxx
@@ -395,6 +395,7 @@ HaikuOutput::SendTag(const Tag &tag)
 			break;
 		case TAG_GENRE:
 		case TAG_DATE:
+		case TAG_ORIGINAL_DATE:
 		case TAG_PERFORMER:
 		case TAG_COMMENT:
 		case TAG_DISC:
diff --git a/src/tag/Id3Scan.cxx b/src/tag/Id3Scan.cxx
index 74433fa47..495676f33 100644
--- a/src/tag/Id3Scan.cxx
+++ b/src/tag/Id3Scan.cxx
@@ -55,6 +55,10 @@
 #define ID3_FRAME_ALBUM_ARTIST "TPE2"
 #endif
 
+#ifndef ID3_FRAME_ORIGINAL_RELEASE_DATE
+#define ID3_FRAME_ORIGINAL_RELEASE_DATE "TDOR"
+#endif
+
 gcc_pure
 static id3_utf8_t *
 tag_id3_getstring(const struct id3_frame *frame, unsigned i)
@@ -317,6 +321,8 @@ scan_id3_tag(struct id3_tag *tag,
 			    handler, handler_ctx);
 	tag_id3_import_text(tag, ID3_FRAME_YEAR, TAG_DATE,
 			    handler, handler_ctx);
+	tag_id3_import_text(tag, ID3_FRAME_ORIGINAL_RELEASE_DATE, TAG_ORIGINAL_DATE,
+			    handler, handler_ctx);
 	tag_id3_import_text(tag, ID3_FRAME_GENRE, TAG_GENRE,
 			    handler, handler_ctx);
 	tag_id3_import_text(tag, ID3_FRAME_COMPOSER, TAG_COMPOSER,
diff --git a/src/tag/Names.c b/src/tag/Names.c
index 6e5ebc2bc..7f99877c4 100644
--- a/src/tag/Names.c
+++ b/src/tag/Names.c
@@ -32,6 +32,7 @@ const char *const tag_item_names[TAG_NUM_OF_ITEM_TYPES] = {
 	[TAG_NAME] = "Name",
 	[TAG_GENRE] = "Genre",
 	[TAG_DATE] = "Date",
+	[TAG_ORIGINAL_DATE] = "OriginalDate",
 	[TAG_COMPOSER] = "Composer",
 	[TAG_PERFORMER] = "Performer",
 	[TAG_COMMENT] = "Comment",
diff --git a/src/tag/Type.h b/src/tag/Type.h
index e5a4ef1f7..4aeb24dff 100644
--- a/src/tag/Type.h
+++ b/src/tag/Type.h
@@ -46,6 +46,7 @@ enum TagType
 	TAG_NAME,
 	TAG_GENRE,
 	TAG_DATE,
+	TAG_ORIGINAL_DATE,
 	TAG_COMPOSER,
 	TAG_PERFORMER,
 	TAG_COMMENT,