void CompositeSource::addSourceWithChapter( const std::shared_ptr<ISeekableSource> &src, const std::wstring &title) { addSource(src); ITagParser *parser = dynamic_cast<ITagParser*>(src.get()); if (parser) { if (count() == 1) fetchAlbumTags(parser); const std::vector<chapters::entry_t> *chaps; if ((chaps = parser->getChapters())) { std::copy(chaps->begin(), chaps->end(), std::back_inserter(m_chapters)); return; } const std::map<uint32_t, std::wstring> &tags = parser->getTags(); std::map<uint32_t, std::wstring>::const_iterator tag = tags.find(Tag::kTitle); if (tag != tags.end()) { addChapter(tag->second, src->length() / m_asbd.mSampleRate); return; } } addChapter(title, src->length() / m_asbd.mSampleRate); }
void CompositeSource::addSourceWithChapter( const std::shared_ptr<ISeekableSource> &src, const std::wstring &title) { addSource(src); std::wstring name(title); auto parser = dynamic_cast<ITagParser*>(src.get()); auto cp = dynamic_cast<IChapterParser*>(src.get()); if (cp) { auto &chaps = cp->getChapters(); if (chaps.size()) { std::copy(chaps.begin(), chaps.end(), std::back_inserter(m_chapters)); return; } } if (parser) { auto tags = parser->getTags(); if (tags.find("title") != tags.end()) name = strutil::us2w(tags["title"]); } addChapter(name, src->length() / m_asbd.mSampleRate); }