From e519e8f8be8d0a584d0596bd265221c6845207b1 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Tue, 7 Jan 2025 19:34:30 -0700 Subject: [PATCH] musikr: handle null tags --- musikr/src/main/cpp/JVMMetadataBuilder.cpp | 14 --------- musikr/src/main/cpp/taglib_jni.cpp | 35 +++++++++++++++++----- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/musikr/src/main/cpp/JVMMetadataBuilder.cpp b/musikr/src/main/cpp/JVMMetadataBuilder.cpp index 647583ec0..6f2630177 100644 --- a/musikr/src/main/cpp/JVMMetadataBuilder.cpp +++ b/musikr/src/main/cpp/JVMMetadataBuilder.cpp @@ -35,34 +35,20 @@ void JVMMetadataBuilder::setMimeType(const std::string_view type) { void JVMMetadataBuilder::setId3v2(const TagLib::ID3v2::Tag &tag) { for (auto frame : tag.frameList()) { - LOGD("Frame Check"); - if (frame == nullptr) - continue; - LOGD("Text Frame Check"); if (auto txxxFrame = dynamic_cast(frame)) { - LOGD("TXXX ID"); TagLib::String id = frame->frameID(); - LOGD("TXXX Fields"); TagLib::StringList frameText = txxxFrame->fieldList(); - LOGD("TXXX Check"); if (frameText.isEmpty()) continue; - LOGD("TXXX Begin"); auto begin = frameText.begin(); - LOGD("TXXX Desc"); TagLib::String description = *begin; - LOGD("TXXX Erase"); frameText.erase(begin); - LOGD("TXXX Add"); id3v2.add_combined(id, description, frameText); } else if (auto textFrame = dynamic_cast(frame)) { - LOGD("T*** ID"); TagLib::String key = frame->frameID(); - LOGD("T*** Fields"); TagLib::StringList frameText = textFrame->fieldList(); - LOGD("T*** Add"); id3v2.add_id(key, frameText); } else { continue; diff --git a/musikr/src/main/cpp/taglib_jni.cpp b/musikr/src/main/cpp/taglib_jni.cpp index a1ec002a4..7e476a84e 100644 --- a/musikr/src/main/cpp/taglib_jni.cpp +++ b/musikr/src/main/cpp/taglib_jni.cpp @@ -46,24 +46,45 @@ Java_org_oxycblt_musikr_metadata_TagLibJNI_openNative(JNIEnv *env, if (auto *mpegFile = dynamic_cast(file)) { builder.setMimeType("audio/mpeg"); - builder.setId3v2(*mpegFile->ID3v2Tag()); + auto tag = mpegFile->ID3v2Tag(); + if (tag != nullptr) { + builder.setId3v2(*tag); + } } else if (auto *mp4File = dynamic_cast(file)) { builder.setMimeType("audio/mp4"); - builder.setMp4(*mp4File->tag()); + auto tag = mp4File->tag(); + if (tag != nullptr) { + builder.setMp4(*tag); + } } else if (auto *flacFile = dynamic_cast(file)) { builder.setMimeType("audio/flac"); - builder.setId3v2(*flacFile->ID3v2Tag()); - builder.setXiph(*flacFile->xiphComment()); + auto id3v2Tag = flacFile->ID3v2Tag(); + if (id3v2Tag != nullptr) { + builder.setId3v2(*id3v2Tag); + } + auto xiphComment = flacFile->xiphComment(); + if (xiphComment != nullptr) { + builder.setXiph(*xiphComment); + } } else if (auto *opusFile = dynamic_cast(file)) { builder.setMimeType("audio/opus"); - builder.setXiph(*opusFile->tag()); + auto tag = opusFile->tag(); + if (tag != nullptr) { + builder.setXiph(*tag); + } } else if (auto *vorbisFile = dynamic_cast(file)) { builder.setMimeType("audio/vorbis"); - builder.setXiph(*vorbisFile->tag()); + auto tag = vorbisFile->tag(); + if (tag != nullptr) { + builder.setXiph(*tag); + } } else if (auto *wavFile = dynamic_cast(file)) { builder.setMimeType("audio/wav"); - builder.setId3v2(*wavFile->ID3v2Tag()); + auto tag = wavFile->ID3v2Tag(); + if (tag != nullptr) { + builder.setId3v2(*tag); + } } else { // While taglib supports other formats, ExoPlayer does not. Ignore them. LOGE("Unsupported file format");