Lyrics: fixed empty line parsing with timestamps
This commit is contained in:
@@ -176,7 +176,7 @@ namespace lms::metadata
|
|||||||
if (parseTag(trimmedLine, lyrics))
|
if (parseTag(trimmedLine, lyrics))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const std::string_view lyricText{ extractTimestamps(trimmedLine, timestamps) };
|
const std::string_view lyricsText{ extractTimestamps(trimmedLine, timestamps) };
|
||||||
|
|
||||||
// If there are timestamps, add as synchronized lyrics
|
// If there are timestamps, add as synchronized lyrics
|
||||||
if (!timestamps.empty())
|
if (!timestamps.empty())
|
||||||
@@ -188,7 +188,16 @@ namespace lms::metadata
|
|||||||
|
|
||||||
applyAccumulatedLyrics();
|
applyAccumulatedLyrics();
|
||||||
for (std::chrono::milliseconds timestamp : timestamps)
|
for (std::chrono::milliseconds timestamp : timestamps)
|
||||||
lyrics.synchronizedLines.emplace(timestamp, lyricText);
|
{
|
||||||
|
auto itLine{ lyrics.synchronizedLines.find(timestamp) };
|
||||||
|
if (itLine != std::cend(lyrics.synchronizedLines))
|
||||||
|
{
|
||||||
|
itLine->second.push_back('\n');
|
||||||
|
itLine->second.append(lyricsText);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lyrics.synchronizedLines.emplace(timestamp, lyricsText);
|
||||||
|
}
|
||||||
|
|
||||||
lastTimestamps = timestamps;
|
lastTimestamps = timestamps;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -271,6 +271,28 @@ SecondLine
|
|||||||
EXPECT_EQ(lyrics.synchronizedLines.find(6s + 750ms)->second, "Foo");
|
EXPECT_EQ(lyrics.synchronizedLines.find(6s + 750ms)->second, "Foo");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(Lyrics, synchronized_emptyLines)
|
||||||
|
{
|
||||||
|
std::istringstream is{ R"([00:03.30]Ooh, ooh
|
||||||
|
[00:03.30]
|
||||||
|
[00:06.75]
|
||||||
|
[00:06.75]Foo
|
||||||
|
)" };
|
||||||
|
|
||||||
|
const Lyrics lyrics{ parseLyrics(is) };
|
||||||
|
|
||||||
|
EXPECT_TRUE(lyrics.displayArtist.empty());
|
||||||
|
EXPECT_TRUE(lyrics.displayAlbum.empty());
|
||||||
|
EXPECT_TRUE(lyrics.displayTitle.empty());
|
||||||
|
EXPECT_EQ(lyrics.offset, std::chrono::milliseconds{ 0 });
|
||||||
|
EXPECT_EQ(lyrics.unsynchronizedLines.size(), 0);
|
||||||
|
ASSERT_EQ(lyrics.synchronizedLines.size(), 2);
|
||||||
|
ASSERT_TRUE(lyrics.synchronizedLines.contains(3s + 300ms));
|
||||||
|
EXPECT_EQ(lyrics.synchronizedLines.find(3s + 300ms)->second, "Ooh, ooh\n");
|
||||||
|
ASSERT_TRUE(lyrics.synchronizedLines.contains(6s + 750ms));
|
||||||
|
EXPECT_EQ(lyrics.synchronizedLines.find(6s + 750ms)->second, "\nFoo");
|
||||||
|
}
|
||||||
|
|
||||||
TEST(Lyrics, synchronized_multitimestamps)
|
TEST(Lyrics, synchronized_multitimestamps)
|
||||||
{
|
{
|
||||||
std::istringstream is{ R"([00:03.30][00:09.16] [00:15.16]Ooh, ooh
|
std::istringstream is{ R"([00:03.30][00:09.16] [00:15.16]Ooh, ooh
|
||||||
|
|||||||
Reference in New Issue
Block a user