Hi all,

a patch to increase the number of metadata in MPD. More a basis for
discussion as a finished product. So far, only ID3 support.

New metadata is: conductor,remixer,bpm,contentgroup,copyright,
discsubtitle,encodedby,isrc,label,language,lyricist,mood,originalartist,
originaldate,releasedate,subtitle,totaldiscs,totaltracks

Here we go.


diff --git a/src/db/plugins/simple/DatabaseSave.cxx
b/src/db/plugins/simple/DatabaseSave.cxx
index fa39164..980d672 100644
--- a/src/db/plugins/simple/DatabaseSave.cxx
+++ b/src/db/plugins/simple/DatabaseSave.cxx
@@ -42,7 +42,7 @@
 #define DIRECTORY_FS_CHARSET "fs_charset: "
 #define DB_TAG_PREFIX "tag: "

-static constexpr unsigned DB_FORMAT = 2;
+static constexpr unsigned DB_FORMAT = 3;

 /**
  * The oldest database format understood by this MPD version.
diff --git a/src/tag/Mask.hxx b/src/tag/Mask.hxx
index f2c51bb..7dfc5fb 100644
--- a/src/tag/Mask.hxx
+++ b/src/tag/Mask.hxx
@@ -22,6 +22,6 @@

 #include <stdint.h>

-typedef uint_least32_t tag_mask_t;
+typedef uint_least64_t tag_mask_t;

 #endif
diff --git a/src/tag/Settings.hxx b/src/tag/Settings.hxx
index e656330..8e64b0c 100644
--- a/src/tag/Settings.hxx
+++ b/src/tag/Settings.hxx
@@ -28,7 +28,7 @@ extern tag_mask_t global_tag_mask;

 gcc_const
 static inline bool
-IsTagEnabled(unsigned tag)
+IsTagEnabled(unsigned long long tag)
 {
        return global_tag_mask & (1u << tag);
 }
diff --git a/src/tag/TagHandler.cxx b/src/tag/TagHandler.cxx
index 5a965c3..45b7ce3 100644
--- a/src/tag/TagHandler.cxx
+++ b/src/tag/TagHandler.cxx
@@ -38,7 +38,7 @@ add_tag_tag(TagType type, const char *value, void *ctx)
 {
        TagBuilder &tag = *(TagBuilder *)ctx;

-       if (type == TAG_TRACK || type == TAG_DISC) {
+       if (type == TAG_TRACK || type == TAG_DISC || type ==
TAG_TOTALDISCS) {
                /* filter out this extra data and leading zeroes */
                char *end;
                unsigned n = strtoul(value, &end, 10);
diff --git a/src/tag/TagId3.cxx b/src/tag/TagId3.cxx
index 7330bda..a5b53be 100644
--- a/src/tag/TagId3.cxx
+++ b/src/tag/TagId3.cxx
@@ -319,14 +319,60 @@ scan_id3_tag(struct id3_tag *tag,
                            handler, handler_ctx);
        tag_id3_import_text(tag, ID3_FRAME_COMPOSER, TAG_COMPOSER,
                            handler, handler_ctx);
-       tag_id3_import_text(tag, "TPE3", TAG_PERFORMER,
+        /* New in DB_FORMAT 3 */
+        tag_id3_import_text(tag, "TSOC", TAG_COMPOSER_SORT,
+                            handler, handler_ctx);
+        /* Compatibility with DB_FORMAT 2 */
+        tag_id3_import_text(tag, "TPE3", TAG_PERFORMER,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TPE4", TAG_PERFORMER,
+                            handler, handler_ctx);
+
+        /* New in DB_FORMAT 3 */
+        tag_id3_import_text(tag, "TPE3", TAG_CONDUCTOR,
                            handler, handler_ctx);
-       tag_id3_import_text(tag, "TPE4", TAG_PERFORMER, handler,
handler_ctx);
+        tag_id3_import_text(tag, "TPE4", TAG_REMIXER,
+                           handler, handler_ctx);
+
        tag_id3_import_comment(tag, ID3_FRAME_COMMENT, TAG_COMMENT,
                               handler, handler_ctx);
        tag_id3_import_text(tag, ID3_FRAME_DISC, TAG_DISC,
                            handler, handler_ctx);

+        /* New in DB_FORMAT 3 */
+       tag_id3_import_text(tag, "TBPM", TAG_BPM,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TIT1", TAG_CONTENTGROUP,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TCOP", TAG_COPYRIGHT,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TSST", TAG_DISCSUBTITLE,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TENC", TAG_ENCODEDBY,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "ISRC", TAG_ISRC,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TPUB", TAG_LABEL,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TLAN", TAG_LANGUAGE,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TEXT", TAG_LYRICIST,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TMOO", TAG_MOOD,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TOPE", TAG_ORIGINALARTIST,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TDOR", TAG_ORIGINALDATE,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TDRL", TAG_RELEASEDATE,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TIT3", TAG_SUBTITLE,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TPOS", TAG_TOTALDISCS,
+                            handler, handler_ctx);
+        tag_id3_import_text(tag, "TRCK",TAG_TOTALTRACKS,
+                            handler, handler_ctx);
+
        tag_id3_import_musicbrainz(tag, handler, handler_ctx);
        tag_id3_import_ufid(tag, handler, handler_ctx);
 }
diff --git a/src/tag/TagNames.c b/src/tag/TagNames.c
index aab33b1..a7c780d 100644
--- a/src/tag/TagNames.c
+++ b/src/tag/TagNames.c
@@ -28,15 +28,40 @@ const char *const
tag_item_names[TAG_NUM_OF_ITEM_TYPES] = {
        [TAG_ALBUM_ARTIST] = "AlbumArtist",
        [TAG_ALBUM_ARTIST_SORT] = "AlbumArtistSort",
        [TAG_TITLE] = "Title",
+        /* New in DB_FORMAT 3 */
+        [TAG_TITLE_SORT] = "TitleSort",
        [TAG_TRACK] = "Track",
        [TAG_NAME] = "Name",
        [TAG_GENRE] = "Genre",
        [TAG_DATE] = "Date",
        [TAG_COMPOSER] = "Composer",
+        /* New in DB_FORMAT 3 */
+        [TAG_COMPOSER_SORT] = "ComposerSort",
+       /* Compatibility with DB_FORMAT 2 */
        [TAG_PERFORMER] = "Performer",
        [TAG_COMMENT] = "Comment",
        [TAG_DISC] = "Disc",

+        /* New in DB_FORMAT 3 */
+        [TAG_BPM] = "BPM",
+        [TAG_CONDUCTOR] = "Conductor",
+        [TAG_CONTENTGROUP] = "Contentgroup",
+        [TAG_COPYRIGHT] = "Copyright",
+        [TAG_DISCSUBTITLE] = "Discsubtitle",
+        [TAG_ENCODEDBY] = "Encodedby",
+        [TAG_ISRC] = "ISRC",
+        [TAG_LABEL] = "Label",
+        [TAG_LANGUAGE] = "Language",
+        [TAG_LYRICIST] = "Lyricist",
+        [TAG_MOOD] = "Mood",
+        [TAG_ORIGINALARTIST] = "Originalartist",
+        [TAG_ORIGINALDATE] = "Originaldate",
+        [TAG_RELEASEDATE] = "Releasedate",
+        [TAG_REMIXER] = "Remixer",
+        [TAG_SUBTITLE] = "Subtitle",
+        [TAG_TOTALDISCS] = "Totaldiscs",
+        [TAG_TOTALTRACKS] = "Totaltracks",
+
        /* MusicBrainz tags from
http://musicbrainz.org/doc/MusicBrainzTag */
        [TAG_MUSICBRAINZ_ARTISTID] = "MUSICBRAINZ_ARTISTID",
        [TAG_MUSICBRAINZ_ALBUMID] = "MUSICBRAINZ_ALBUMID",
diff --git a/src/tag/TagType.h b/src/tag/TagType.h
index 8aabbc5..b521579 100644
--- a/src/tag/TagType.h
+++ b/src/tag/TagType.h
@@ -42,15 +42,40 @@ enum TagType
        TAG_ALBUM_ARTIST,
        TAG_ALBUM_ARTIST_SORT,
        TAG_TITLE,
+       /* New in DB_FORMAT 3 */
+       TAG_TITLE_SORT,
        TAG_TRACK,
        TAG_NAME,
        TAG_GENRE,
        TAG_DATE,
        TAG_COMPOSER,
+       /* New in DB_FORMAT 3 */
+       TAG_COMPOSER_SORT,
+       /* Compatibility with DB_FORMAT 2 */
        TAG_PERFORMER,
        TAG_COMMENT,
        TAG_DISC,

+        /* New in DB_FORMAT 3 */
+       TAG_BPM,
+        TAG_CONDUCTOR,
+        TAG_CONTENTGROUP,
+       TAG_COPYRIGHT,
+       TAG_DISCSUBTITLE,
+       TAG_ENCODEDBY,
+       TAG_ISRC,
+       TAG_LABEL,
+       TAG_LANGUAGE,
+       TAG_LYRICIST,
+       TAG_MOOD,
+       TAG_ORIGINALARTIST,
+       TAG_ORIGINALDATE,
+       TAG_RELEASEDATE,
+       TAG_REMIXER,
+       TAG_SUBTITLE,
+       TAG_TOTALDISCS,
+       TAG_TOTALTRACKS,
+
        TAG_MUSICBRAINZ_ARTISTID,
+        /* New in DB_FORMAT 3 */
+       TAG_BPM,
+        TAG_CONDUCTOR,
+        TAG_CONTENTGROUP,
+       TAG_COPYRIGHT,
+       TAG_DISCSUBTITLE,
+       TAG_ENCODEDBY,
+       TAG_ISRC,
+       TAG_LABEL,
+       TAG_LANGUAGE,
+       TAG_LYRICIST,
+       TAG_MOOD,
+       TAG_ORIGINALARTIST,
+       TAG_ORIGINALDATE,
+       TAG_RELEASEDATE,
+       TAG_REMIXER,
+       TAG_SUBTITLE,
+       TAG_TOTALDISCS,
+       TAG_TOTALTRACKS,
+
        TAG_MUSICBRAINZ_ARTISTID,
        TAG_MUSICBRAINZ_ALBUMID,
        TAG_MUSICBRAINZ_ALBUMARTISTID,


That's all folks.





Best regards,
jr.
_______________________________________________
mpd-devel mailing list
[email protected]
http://mailman.blarg.de/listinfo/mpd-devel

Reply via email to