From f1c837823b6dde8464f46ccb02a2c91eff69bee0 Mon Sep 17 00:00:00 2001 From: Ignacio Serantes Date: Thu, 14 Jun 2012 20:15:10 +0200 Subject: [PATCH 5/8] Fix: flac analizer was importing only one artist tag. REVIEW:105208 --- lib/endanalyzers/flacendanalyzer.cpp | 37 +++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/lib/endanalyzers/flacendanalyzer.cpp b/lib/endanalyzers/flacendanalyzer.cpp index 7e34270..0a7d680 100644 --- a/lib/endanalyzers/flacendanalyzer.cpp +++ b/lib/endanalyzers/flacendanalyzer.cpp @@ -30,6 +30,7 @@ #include #include #include +#include using namespace Strigi; using namespace std; @@ -212,7 +213,7 @@ FlacEndAnalyzer::analyze(Strigi::AnalysisResult& indexable, Strigi::InputStream* // in Vorbis comments the "artist" field is used for the performer in modern music // but for the composer in calssical music. Thus, we cache both and make the decision // at the end - string artist, performer; + list artists, performers; // read all the comments p2 += 4; @@ -252,7 +253,7 @@ FlacEndAnalyzer::analyze(Strigi::AnalysisResult& indexable, Strigi::InputStream* indexable.addValue(iter->second, value); } } else if(name=="artist") { - artist = value; + artists.push_back(value); } else if(name=="lyrics") { indexable.addText(value.c_str(), (int32_t)value.length()); @@ -285,7 +286,7 @@ FlacEndAnalyzer::analyze(Strigi::AnalysisResult& indexable, Strigi::InputStream* indexable.addTriplet(publisherUri, typePropertyName, contactClassName); indexable.addTriplet(publisherUri, fullnamePropertyName, value); } else if(name=="performer") { - performer = value; + performers.push_back(value); } } } else { @@ -298,8 +299,8 @@ FlacEndAnalyzer::analyze(Strigi::AnalysisResult& indexable, Strigi::InputStream* // we now decide how to store the artist and performer as suggested by the Vorbis comments spec const Strigi::RegisteredField* artistField = 0; const Strigi::RegisteredField* performerField = 0; - if (!artist.empty()) { - if (!performer.empty()) { + if (!artists.empty()) { + if (!performers.empty()) { artistField = factory->composerField; performerField = factory->performerField; } @@ -307,22 +308,30 @@ FlacEndAnalyzer::analyze(Strigi::AnalysisResult& indexable, Strigi::InputStream* artistField = factory->performerField; } } - else if (!performer.empty()) { + else if (!performers.empty()) { performerField = factory->performerField; } if (artistField) { - const string artistUri( indexable.newAnonymousUri() ); + list::iterator aIt; - indexable.addValue(artistField, artistUri); - indexable.addTriplet(artistUri, typePropertyName, contactClassName); - indexable.addTriplet(artistUri, fullnamePropertyName, artist); + for(aIt=artists.begin(); aIt != artists.end(); ++aIt) { + const string artistUri( indexable.newAnonymousUri() ); + + indexable.addValue(artistField, artistUri); + indexable.addTriplet(artistUri, typePropertyName, contactClassName); + indexable.addTriplet(artistUri, fullnamePropertyName, *aIt); + } } if (performerField) { - const string performerUri( indexable.newAnonymousUri() ); + list::iterator pIt; - indexable.addValue(performerField, performerUri); - indexable.addTriplet(performerUri, typePropertyName, contactClassName); - indexable.addTriplet(performerUri, fullnamePropertyName, performer); + for(pIt=performers.begin(); pIt != performers.end(); ++pIt) { + const string performerUri( indexable.newAnonymousUri() ); + + indexable.addValue(performerField, performerUri); + indexable.addTriplet(performerUri, typePropertyName, contactClassName); + indexable.addTriplet(performerUri, fullnamePropertyName, *pIt); + } } if(!albumUri.empty()) { -- 1.7.10.4