diff --git a/autotests/taglibwritertest.h b/autotests/taglibwritertest.h --- a/autotests/taglibwritertest.h +++ b/autotests/taglibwritertest.h @@ -10,9 +10,8 @@ QString testFilePath(const QString& fileName) const; private Q_SLOTS: - void initTestCase(); - void test(); - void cleanupTestCase(); + void testCommonData(); + void testCommonData_data(); }; #endif // TAGLIBWRITERTEST_H diff --git a/autotests/taglibwritertest.cpp b/autotests/taglibwritertest.cpp --- a/autotests/taglibwritertest.cpp +++ b/autotests/taglibwritertest.cpp @@ -11,8 +11,6 @@ #include #include -#define TEST_FILENAME "writertest.opus" - using namespace KFileMetaData; static QString t2q(const TagLib::String& t) @@ -25,35 +23,83 @@ return QLatin1String(INDEXER_TESTS_SAMPLE_FILES_PATH) + QDir::separator() + fileName; } -void TagLibWriterTest::initTestCase() +void TagLibWriterTest::testCommonData() { - QFile testFile(testFilePath("test.opus")); - QFile writerTestFile(testFilePath(TEST_FILENAME)); - QFile::copy(testFilePath("test.opus"), testFilePath(TEST_FILENAME)); -} + QFETCH(QString, fileType); + QFETCH(QString, mimeType); -void TagLibWriterTest::test() -{ + QString temporaryFileName = QStringLiteral("writertest.") + fileType; + + QFile::copy(testFilePath("test." + fileType), testFilePath(temporaryFileName)); TagLibWriter writerPlugin{this}; + QCOMPARE(writerPlugin.writeMimetypes().contains(mimeType),true); - WriteData data(testFilePath(TEST_FILENAME), "audio/opus"); - data.add(Property::Title, "Title1"); - data.add(Property::Artist, "Artist1"); + WriteData data(testFilePath(temporaryFileName), mimeType); + data.add(Property::Title, QStringLiteral("Title1")); + data.add(Property::Artist, QStringLiteral("Artist1")); + data.add(Property::Album, QStringLiteral("Album1")); + data.add(Property::TrackNumber, 10); + data.add(Property::ReleaseYear, 1999); + data.add(Property::Genre, QStringLiteral("Genre1")); + data.add(Property::Comment, QStringLiteral("Comment1")); writerPlugin.write(data); - TagLib::FileRef file(testFilePath(TEST_FILENAME).toUtf8().constData(), true); + TagLib::FileRef file(testFilePath(temporaryFileName).toUtf8().constData(), true); TagLib::Tag* tags = file.tag(); QString extractedTitle = t2q(tags->title()); QString extractedArtist = t2q(tags->artist()); + QString extractedAlbum = t2q(tags->album()); + uint extractedTrackNumber = tags->track(); + uint extractedYear = tags->year(); + QString extractedGenre = t2q(tags->genre()); + QString extractedComment = t2q(tags->comment()); QCOMPARE(extractedTitle, QStringLiteral("Title1")); QCOMPARE(extractedArtist, QStringLiteral("Artist1")); + QCOMPARE(extractedAlbum, QStringLiteral("Album1")); + QCOMPARE(extractedTrackNumber, 10u); + QCOMPARE(extractedYear, 1999u); + QCOMPARE(extractedGenre, QStringLiteral("Genre1")); + QCOMPARE(extractedComment, QStringLiteral("Comment1")); + + QFile::remove(testFilePath(temporaryFileName)); } -void TagLibWriterTest::cleanupTestCase() +void TagLibWriterTest::testCommonData_data() { - QFile::remove(testFilePath(TEST_FILENAME)); + QTest::addColumn("fileType"); + QTest::addColumn("mimeType"); + + QTest::addRow("flac") + << QStringLiteral("flac") + << QStringLiteral("audio/flac") + ; + + QTest::addRow("m4a") + << QStringLiteral("m4a") + << QStringLiteral("audio/mp4") + ; + + QTest::addRow("mp3") + << QStringLiteral("mp3") + << QStringLiteral("audio/mpeg3") + ; + + QTest::addRow("mpc") + << QStringLiteral("mpc") + << QStringLiteral("audio/x-musepack") + ; + + QTest::addRow("ogg") + << QStringLiteral("ogg") + << QStringLiteral("audio/ogg") + ; + + QTest::addRow("opus") + << QStringLiteral("opus") + << QStringLiteral("audio/opus") + ; } QTEST_GUILESS_MAIN(TagLibWriterTest) diff --git a/src/writers/taglibwriter.cpp b/src/writers/taglibwriter.cpp --- a/src/writers/taglibwriter.cpp +++ b/src/writers/taglibwriter.cpp @@ -20,11 +20,16 @@ QStringList TagLibWriter::writeMimetypes() const { QStringList types = { + QStringLiteral("audio/flac"), + QStringLiteral("audio/mp4"), QStringLiteral("audio/mpeg"), QStringLiteral("audio/mpeg3"), - QStringLiteral("audio/x-mpeg"), + QStringLiteral("audio/ogg"), QStringLiteral("audio/opus"), - QStringLiteral("audio/x-opus+ogg") + QStringLiteral("audio/x-mpeg"), + QStringLiteral("audio/x-musepack"), + QStringLiteral("audio/x-opus+ogg"), + QStringLiteral("audio/x-vorbis+ogg"), }; return types; @@ -43,17 +48,52 @@ TagLib::Tag* tags = file.tag(); TagLib::String title; - TagLib::String artists; + TagLib::String artist; + TagLib::String album; + TagLib::String genre; + TagLib::String comment; if (properties.contains(Property::Title)) { title = q2t(properties.value(Property::Title).toString()); tags->setTitle(title); } if (properties.contains(Property::Artist)) { - artists = q2t(properties.value(Property::Artist).toString()); - tags->setArtist(artists); + artist = q2t(properties.value(Property::Artist).toString()); + tags->setArtist(artist); + } + + if (properties.contains(Property::Album)) { + album = q2t(properties.value(Property::Album).toString()); + tags->setAlbum(album); } + if (properties.contains(Property::TrackNumber)) { + int trackNumber = properties.value(Property::TrackNumber).toInt(); + //taglib requires uint + if (trackNumber >= 0) { + tags->setTrack(trackNumber); + } + } + + if (properties.contains(Property::ReleaseYear)) { + int year = properties.value(Property::ReleaseYear).toInt(); + //taglib requires uint + if (year >= 0) { + tags->setYear(year); + } + } + + if (properties.contains(Property::Genre)) { + genre = q2t(properties.value(Property::Genre).toString()); + tags->setGenre(genre); + } + + if (properties.contains(Property::Comment)) { + comment = q2t(properties.value(Property::Comment).toString()); + tags->setComment(comment); + } + + file.save(); }