Add support for saving playcounts and ratings to tags

This commit is contained in:
Jonas Kvinge
2021-10-24 16:08:17 +02:00
parent ce7926cfa4
commit 3ab86543ad
22 changed files with 1230 additions and 286 deletions

View File

@@ -94,6 +94,28 @@ class TagReaderTest : public ::testing::Test {
return QString();
}
static void WriteSongPlaycountToFile(const Song &song, const QString &filename) {
#if defined(USE_TAGLIB)
TagReaderTagLib tag_reader;
#elif defined(USE_TAGPARSER)
TagReaderTagParser tag_reader;
#endif
spb::tagreader::SongMetadata pb_song;
song.ToProtobuf(&pb_song);
tag_reader.SaveSongPlaycountToFile(filename, pb_song);
}
static void WriteSongRatingToFile(const Song &song, const QString &filename) {
#if defined(USE_TAGLIB)
TagReaderTagLib tag_reader;
#elif defined(USE_TAGPARSER)
TagReaderTagParser tag_reader;
#endif
spb::tagreader::SongMetadata pb_song;
song.ToProtobuf(&pb_song);
tag_reader.SaveSongRatingToFile(filename, pb_song);
}
};
TEST_F(TagReaderTest, TestFLACAudioFileTagging) {
@@ -1691,4 +1713,314 @@ TEST_F(TagReaderTest, TestM4AAudioFileTagging) {
}
#ifndef USE_TAGPARSER
TEST_F(TagReaderTest, TestFLACAudioFilePlaycount) {
TemporaryResource r(":/audio/strawberry.flac");
{
Song song;
song.set_playcount(4);
WriteSongPlaycountToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_EQ(4, song.playcount());
}
}
TEST_F(TagReaderTest, TestWavPackAudioFilePlaycount) {
TemporaryResource r(":/audio/strawberry.wv");
{
Song song;
song.set_playcount(4);
WriteSongPlaycountToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_EQ(4, song.playcount());
}
}
TEST_F(TagReaderTest, TestOggFLACAudioFilePlaycount) {
TemporaryResource r(":/audio/strawberry.oga");
{
Song song;
song.set_playcount(4);
WriteSongPlaycountToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_EQ(4, song.playcount());
}
}
TEST_F(TagReaderTest, TestOggVorbisAudioFilePlaycount) {
TemporaryResource r(":/audio/strawberry.ogg");
{
Song song;
song.set_playcount(4);
WriteSongPlaycountToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_EQ(4, song.playcount());
}
}
TEST_F(TagReaderTest, TestOggOpusAudioFilePlaycount) {
TemporaryResource r(":/audio/strawberry.opus");
{
Song song;
song.set_playcount(4);
WriteSongPlaycountToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_EQ(4, song.playcount());
}
}
TEST_F(TagReaderTest, TestOggSpeexAudioFilePlaycount) {
TemporaryResource r(":/audio/strawberry.spx");
{
Song song;
song.set_playcount(4);
WriteSongPlaycountToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_EQ(4, song.playcount());
}
}
TEST_F(TagReaderTest, TestOggASFAudioFilePlaycount) {
TemporaryResource r(":/audio/strawberry.asf");
{
Song song;
song.set_playcount(4);
WriteSongPlaycountToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_EQ(4, song.playcount());
}
}
TEST_F(TagReaderTest, TestOggMP3AudioFilePlaycount) {
TemporaryResource r(":/audio/strawberry.mp3");
{
Song song;
song.set_playcount(4);
WriteSongPlaycountToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_EQ(4, song.playcount());
}
}
TEST_F(TagReaderTest, TestOggMP4AudioFilePlaycount) {
TemporaryResource r(":/audio/strawberry.m4a");
{
Song song;
song.set_playcount(4);
WriteSongPlaycountToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_EQ(4, song.playcount());
}
}
#endif // USE_TAGPARSER
TEST_F(TagReaderTest, TestFLACAudioFileRating) {
TemporaryResource r(":/audio/strawberry.flac");
{
Song song;
song.set_rating(0.4);
WriteSongRatingToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_NE(0.4, song.rating());
}
}
TEST_F(TagReaderTest, TestWavPackAudioFileRating) {
TemporaryResource r(":/audio/strawberry.wv");
{
Song song;
song.set_rating(0.4);
WriteSongRatingToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_NE(0.4, song.rating());
}
}
TEST_F(TagReaderTest, TestOggFLACAudioFileRating) {
TemporaryResource r(":/audio/strawberry.oga");
{
Song song;
song.set_rating(0.4);
WriteSongRatingToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_NE(0.4, song.rating());
}
}
TEST_F(TagReaderTest, TestOggVorbisAudioFileRating) {
TemporaryResource r(":/audio/strawberry.ogg");
{
Song song;
song.set_rating(0.4);
WriteSongRatingToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_NE(0.4, song.rating());
}
}
TEST_F(TagReaderTest, TestOggOpusAudioFileRating) {
TemporaryResource r(":/audio/strawberry.opus");
{
Song song;
song.set_rating(0.4);
WriteSongRatingToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_NE(0.4, song.rating());
}
}
TEST_F(TagReaderTest, TestOggSpeexAudioFileRating) {
TemporaryResource r(":/audio/strawberry.spx");
{
Song song;
song.set_rating(0.4);
WriteSongRatingToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_NE(0.4, song.rating());
}
}
TEST_F(TagReaderTest, TestASFAudioFileRating) {
TemporaryResource r(":/audio/strawberry.asf");
{
Song song;
song.set_rating(0.4);
WriteSongRatingToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_NE(0.4, song.rating());
}
}
TEST_F(TagReaderTest, TestMP3AudioFileRating) {
TemporaryResource r(":/audio/strawberry.mp3");
{
Song song;
song.set_rating(0.4);
WriteSongRatingToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_NE(0.4, song.rating());
}
}
TEST_F(TagReaderTest, TestMP4AudioFileRating) {
TemporaryResource r(":/audio/strawberry.m4a");
{
Song song;
song.set_rating(0.4);
WriteSongRatingToFile(song, r.fileName());
}
{
Song song = ReadSongFromFile(r.fileName());
EXPECT_NE(0.4, song.rating());
}
}
} // namespace