Skip to content

Commit

Permalink
Extract generic ALBUMARTIST tag
Browse files Browse the repository at this point in the history
  • Loading branch information
sdrik committed May 2, 2017
1 parent cac07c7 commit 0f280a2
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 2 deletions.
16 changes: 14 additions & 2 deletions src/metadata/taglib_handler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#ifdef HAVE_TAGLIB


#include <taglib/tpropertymap.h>
#include <taglib/attachedpictureframe.h>
#include <taglib/aifffile.h>
#include <taglib/apefile.h>
Expand Down Expand Up @@ -60,7 +61,7 @@ TagLibHandler::TagLibHandler() : MetadataHandler()
{
}

static void addField(metadata_fields_t field, const TagLib::Tag* tag, Ref<CdsItem> item)
static void addField(metadata_fields_t field, const TagLib::File& file, const TagLib::Tag* tag, Ref<CdsItem> item)
{
if (tag == nullptr)
return;
Expand All @@ -71,6 +72,7 @@ static void addField(metadata_fields_t field, const TagLib::Tag* tag, Ref<CdsIte
Ref<StringConverter> sc = StringConverter::i2i(); // sure is sure

TagLib::String val;
TagLib::StringList list;
String value;
unsigned int i;

Expand Down Expand Up @@ -108,6 +110,16 @@ static void addField(metadata_fields_t field, const TagLib::Tag* tag, Ref<CdsIte
} else
return;
break;
case M_ALBUMARTIST:
// we have to use file.properties() instead of tag->properties()
// because the latter returns incomplete properties
// https://mail.kde.org/pipermail/taglib-devel/2015-May/002729.html
list = file.properties()["ALBUMARTIST"];
if (!list.isEmpty())
val = list[0];
else
return;
break;
default:
return;
}
Expand All @@ -131,7 +143,7 @@ void TagLibHandler::populateGenericTags(Ref<CdsItem> item, const TagLib::File& f
const TagLib::Tag* tag = file.tag();

for (int i = 0; i < M_MAX; i++)
addField((metadata_fields_t)i, tag, item);
addField((metadata_fields_t)i, file, tag, item);

int temp;

Expand Down
1 change: 1 addition & 0 deletions src/metadata_handler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ mt_key MT_KEYS[] = {
{ "M_RATING", "upnp:rating"},
{ "M_ACTOR", "upnp:actor"},
{ "M_PRODUCER", "upnp:producer"},
{ "M_ALBUMARTIST", "upnp:artist@role[AlbumArtist]"},
};

res_key RES_KEYS[] = {
Expand Down
1 change: 1 addition & 0 deletions src/metadata_handler.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ typedef enum
M_RATING,
M_ACTOR,
M_PRODUCER,
M_ALBUMARTIST,

M_MAX
} metadata_fields_t;
Expand Down
15 changes: 15 additions & 0 deletions src/mxml/element.cc
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,22 @@ void Element::setText(String str, enum mxml_value_type type)

void Element::appendTextChild(String name, String text, enum mxml_value_type type)
{
String attr;
String val;
int i, j;

// name@attr[val] => <name attr="val">
if (((i = name.index('@')) > 0)
&& ((j = name.index(i + 1, '[')) > 0)
&& (name[name.length() - 1] == ']'))
{
attr = name.substring(i + 1, j - i - 1);
val = name.substring(j + 1, name.length() - j - 2);
name = name.substring(0, i);
}
Ref<Element> el = Ref<Element>(new Element(name));
if (attr.length() && val.length())
el->addAttribute(attr, val, type);
el->setText(text, type);
appendElementChild(el);
}
Expand Down

0 comments on commit 0f280a2

Please sign in to comment.