Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support both taglib-1 and taglib-2 #7374

Merged
merged 2 commits into from
Jan 9, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions ext/libclementine-tagreader/cloudstream.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,11 @@ void CloudStream::Precache() {
clear();
}

#if (TAGLIB_MAJOR_VERSION == 2)
TagLib::ByteVector CloudStream::readBlock(size_t length) {
#else
TagLib::ByteVector CloudStream::readBlock(ulong length) {
#endif
const uint start = cursor_;
const uint end = qMin(cursor_ + length - 1, length_ - 1);

Expand Down Expand Up @@ -144,11 +148,19 @@ void CloudStream::writeBlock(const TagLib::ByteVector&) {
qLog(Debug) << Q_FUNC_INFO << "not implemented";
}

#if (TAGLIB_MAJOR_VERSION == 2)
void CloudStream::insert(const TagLib::ByteVector&, TagLib::offset_t, size_t) {
#else
void CloudStream::insert(const TagLib::ByteVector&, ulong, ulong) {
#endif
qLog(Debug) << Q_FUNC_INFO << "not implemented";
}

#if (TAGLIB_MAJOR_VERSION == 2)
void CloudStream::removeBlock(TagLib::offset_t, size_t) {
#else
void CloudStream::removeBlock(ulong, ulong) {
#endif
qLog(Debug) << Q_FUNC_INFO << "not implemented";
}

Expand All @@ -159,7 +171,11 @@ bool CloudStream::readOnly() const {

bool CloudStream::isOpen() const { return true; }

#if (TAGLIB_MAJOR_VERSION == 2)
void CloudStream::seek(TagLib::offset_t offset, TagLib::IOStream::Position p) {
#else
void CloudStream::seek(long offset, TagLib::IOStream::Position p) {
#endif
switch (p) {
case TagLib::IOStream::Beginning:
cursor_ = offset;
Expand All @@ -178,11 +194,19 @@ void CloudStream::seek(long offset, TagLib::IOStream::Position p) {

void CloudStream::clear() { cursor_ = 0; }

#if (TAGLIB_MAJOR_VERSION == 2)
TagLib::offset_t CloudStream::tell() const { return cursor_; }

TagLib::offset_t CloudStream::length() { return length_; }

void CloudStream::truncate(TagLib::offset_t) {
#else
long CloudStream::tell() const { return cursor_; }

long CloudStream::length() { return length_; }

void CloudStream::truncate(long) {
#endif
qLog(Debug) << Q_FUNC_INFO << "not implemented";
}

Expand Down
14 changes: 14 additions & 0 deletions ext/libclementine-tagreader/cloudstream.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,19 @@ class CloudStream : public QObject, public TagLib::IOStream {

// Taglib::IOStream
virtual TagLib::FileName name() const;
#if (TAGLIB_MAJOR_VERSION == 2)
virtual TagLib::ByteVector readBlock(size_t length);
virtual void writeBlock(const TagLib::ByteVector&);
virtual void insert(const TagLib::ByteVector&, TagLib::offset_t, size_t);
virtual void removeBlock(TagLib::offset_t, size_t);
virtual bool readOnly() const;
virtual bool isOpen() const;
virtual void seek(TagLib::offset_t offset, TagLib::IOStream::Position p);
virtual void clear();
virtual TagLib::offset_t tell() const;
virtual TagLib::offset_t length();
virtual void truncate(TagLib::offset_t);
#else
virtual TagLib::ByteVector readBlock(ulong length);
virtual void writeBlock(const TagLib::ByteVector&);
virtual void insert(const TagLib::ByteVector&, ulong, ulong);
Expand All @@ -46,6 +59,7 @@ class CloudStream : public QObject, public TagLib::IOStream {
virtual long tell() const;
virtual long length();
virtual void truncate(long);
#endif

google::sparsetable<char>::size_type cached_bytes() const {
return cache_.num_nonempty();
Expand Down
28 changes: 20 additions & 8 deletions ext/libclementine-tagreader/tagreader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ void TagReader::ReadFile(const QString& filename,
// Find album artists
TagLib::APE::ItemListMap::ConstIterator it = items.find("ALBUM ARTIST");
if (it != items.end()) {
TagLib::StringList album_artists = it->second.toStringList();
TagLib::StringList album_artists = it->second.values();
if (!album_artists.isEmpty()) {
Decode(album_artists.front(), nullptr, song->mutable_albumartist());
}
Expand Down Expand Up @@ -243,22 +243,22 @@ void TagReader::ReadFile(const QString& filename,
}

if (items.contains("BPM")) {
Decode(items["BPM"].toStringList().toString(", "), nullptr,
Decode(items["BPM"].values().toString(", "), nullptr,
song->mutable_performer());
}

if (items.contains("PERFORMER")) {
Decode(items["PERFORMER"].toStringList().toString(", "), nullptr,
Decode(items["PERFORMER"].values().toString(", "), nullptr,
song->mutable_performer());
}

if (items.contains("COMPOSER")) {
Decode(items["COMPOSER"].toStringList().toString(", "), nullptr,
Decode(items["COMPOSER"].values().toString(", "), nullptr,
song->mutable_composer());
}

if (items.contains("GROUPING")) {
Decode(items["GROUPING"].toStringList().toString(" "), nullptr,
Decode(items["GROUPING"].values().toString(" "), nullptr,
song->mutable_grouping());
}

Expand Down Expand Up @@ -565,8 +565,8 @@ void TagReader::ReadFile(const QString& filename,
if (fileref->audioProperties()) {
song->set_bitrate(fileref->audioProperties()->bitrate());
song->set_samplerate(fileref->audioProperties()->sampleRate());
song->set_length_nanosec(fileref->audioProperties()->length() *
kNsecPerSec);
song->set_length_nanosec(fileref->audioProperties()->lengthInMilliseconds() *
kNsecPerMsec);
}

// Get the filetype if we can
Expand Down Expand Up @@ -1376,9 +1376,15 @@ bool TagReader::ReadCloudFile(const QUrl& download_url, const QString& title,
std::unique_ptr<TagLib::File> tag;
if (mime_type == "audio/mpeg" &&
title.endsWith(".mp3", Qt::CaseInsensitive)) {
#if (TAGLIB_MAJOR_VERSION == 2)
tag.reset(new TagLib::MPEG::File(stream.get(), true,
TagLib::AudioProperties::Accurate,
TagLib::ID3v2::FrameFactory::instance()));
#else
tag.reset(new TagLib::MPEG::File(stream.get(),
TagLib::ID3v2::FrameFactory::instance(),
TagLib::AudioProperties::Accurate));
#endif
} else if (mime_type == "audio/mp4" ||
(mime_type == "audio/mpeg" &&
title.endsWith(".m4a", Qt::CaseInsensitive))) {
Expand All @@ -1398,9 +1404,15 @@ bool TagReader::ReadCloudFile(const QUrl& download_url, const QString& title,
TagLib::AudioProperties::Accurate));
} else if (mime_type == "application/x-flac" || mime_type == "audio/flac" ||
mime_type == "audio/x-flac") {
#if (TAGLIB_MAJOR_VERSION == 2)
tag.reset(new TagLib::FLAC::File(stream.get(), true,
TagLib::AudioProperties::Accurate,
TagLib::ID3v2::FrameFactory::instance()));
#else
tag.reset(new TagLib::FLAC::File(stream.get(),
TagLib::ID3v2::FrameFactory::instance(),
true, TagLib::AudioProperties::Accurate));
#endif
} else if (mime_type == "audio/x-ms-wma") {
tag.reset(new TagLib::ASF::File(stream.get(), true,
TagLib::AudioProperties::Accurate));
Expand Down Expand Up @@ -1431,7 +1443,7 @@ bool TagReader::ReadCloudFile(const QUrl& download_url, const QString& title,
song->set_type(cpb::tagreader::SongMetadata_Type_STREAM);

if (tag->audioProperties()) {
song->set_length_nanosec(tag->audioProperties()->length() * kNsecPerSec);
song->set_length_nanosec(tag->audioProperties()->lengthInMilliseconds() * kNsecPerMsec);
}
return true;
}
Expand Down