Commit 78c0d8cc authored by Max Kellermann's avatar Max Kellermann

playlist/asx: use class TagBuilder

parent b23d2ad4
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#include "MemorySongEnumerator.hxx" #include "MemorySongEnumerator.hxx"
#include "InputStream.hxx" #include "InputStream.hxx"
#include "Song.hxx" #include "Song.hxx"
#include "tag/Tag.hxx" #include "tag/TagBuilder.hxx"
#include "util/ASCII.hxx" #include "util/ASCII.hxx"
#include "util/Error.hxx" #include "util/Error.hxx"
#include "util/Domain.hxx" #include "util/Domain.hxx"
...@@ -65,6 +65,8 @@ struct AsxParser { ...@@ -65,6 +65,8 @@ struct AsxParser {
*/ */
Song *song; Song *song;
TagBuilder tag_builder;
AsxParser() AsxParser()
:state(ROOT) {} :state(ROOT) {}
...@@ -106,18 +108,13 @@ asx_start_element(gcc_unused GMarkupParseContext *context, ...@@ -106,18 +108,13 @@ asx_start_element(gcc_unused GMarkupParseContext *context,
attribute_values, attribute_values,
"href"); "href");
if (href != nullptr) { if (href != nullptr) {
/* create new song object, and copy /* create new song object; we cannot
the existing tag over; we cannot
replace the existing song's URI, replace the existing song's URI,
because that attribute is because that attribute is
immutable */ immutable */
Song *song = Song::NewRemote(href); Song *song = Song::NewRemote(href);
if (parser->song != nullptr)
if (parser->song != nullptr) {
song->tag = parser->song->tag;
parser->song->tag = nullptr;
parser->song->Free(); parser->song->Free();
}
parser->song = song; parser->song = song;
} }
...@@ -145,9 +142,11 @@ asx_end_element(gcc_unused GMarkupParseContext *context, ...@@ -145,9 +142,11 @@ asx_end_element(gcc_unused GMarkupParseContext *context,
case AsxParser::ENTRY: case AsxParser::ENTRY:
if (StringEqualsCaseASCII(element_name, "entry")) { if (StringEqualsCaseASCII(element_name, "entry")) {
if (strcmp(parser->song->uri, "asx:") != 0) if (strcmp(parser->song->uri, "asx:") != 0) {
assert(parser->song->tag == nullptr);
parser->song->tag = parser->tag_builder.Commit();
parser->songs.emplace_front(parser->song); parser->songs.emplace_front(parser->song);
else } else
parser->song->Free(); parser->song->Free();
parser->state = AsxParser::ROOT; parser->state = AsxParser::ROOT;
...@@ -171,9 +170,7 @@ asx_text(gcc_unused GMarkupParseContext *context, ...@@ -171,9 +170,7 @@ asx_text(gcc_unused GMarkupParseContext *context,
case AsxParser::ENTRY: case AsxParser::ENTRY:
if (parser->tag_type != TAG_NUM_OF_ITEM_TYPES) { if (parser->tag_type != TAG_NUM_OF_ITEM_TYPES) {
if (parser->song->tag == nullptr) parser->tag_builder.AddItem(parser->tag_type,
parser->song->tag = new Tag();
parser->song->tag->AddItem(parser->tag_type,
text, text_len); text, text_len);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment