diff --git a/musikr/src/main/cpp/taglib_jni.cpp b/musikr/src/main/cpp/taglib_jni.cpp index 797a2029c..5eda71467 100644 --- a/musikr/src/main/cpp/taglib_jni.cpp +++ b/musikr/src/main/cpp/taglib_jni.cpp @@ -18,9 +18,9 @@ #include #include - #include "JVMInputStream.h" #include "JVMMetadataBuilder.h" +#include "log.h" #include "taglib/fileref.h" #include "taglib/flacfile.h" @@ -34,41 +34,46 @@ extern "C" JNIEXPORT jobject JNICALL Java_org_oxycblt_musikr_metadata_TagLibJNI_openNative(JNIEnv *env, jobject /* this */, jobject inputStream) { - JVMInputStream stream {env, inputStream}; - TagLib::FileRef fileRef {&stream}; - if (fileRef.isNull()) { - return nullptr; - } - TagLib::File *file = fileRef.file(); - JVMMetadataBuilder builder {env}; + try { + JVMInputStream stream {env, inputStream}; + TagLib::FileRef fileRef {&stream}; + if (fileRef.isNull()) { + return nullptr; + } + TagLib::File *file = fileRef.file(); + JVMMetadataBuilder builder {env}; - if (auto *mpegFile = dynamic_cast(file)) { - builder.setMimeType("audio/mpeg"); - builder.setId3v2(*mpegFile->ID3v2Tag()); - } else if (auto *mp4File = dynamic_cast(file)) { - builder.setMimeType("audio/mp4"); - builder.setMp4(*mp4File->tag()); - } else if (auto *flacFile = dynamic_cast(file)) { - builder.setMimeType("audio/flac"); - builder.setId3v2(*flacFile->ID3v2Tag()); - builder.setXiph(*flacFile->xiphComment()); - } else if (auto *opusFile = dynamic_cast(file)) { - builder.setMimeType("audio/opus"); - builder.setXiph(*opusFile->tag()); - } else if (auto *vorbisFile = - dynamic_cast(file)) { - builder.setMimeType("audio/vorbis"); - builder.setXiph(*vorbisFile->tag()); - } else if (auto *wavFile = dynamic_cast(file)) { - builder.setMimeType("audio/wav"); - builder.setId3v2(*wavFile->ID3v2Tag()); - } else { - // While taglib supports other formats, ExoPlayer does not. Ignore them. + if (auto *mpegFile = dynamic_cast(file)) { + builder.setMimeType("audio/mpeg"); + builder.setId3v2(*mpegFile->ID3v2Tag()); + } else if (auto *mp4File = dynamic_cast(file)) { + builder.setMimeType("audio/mp4"); + builder.setMp4(*mp4File->tag()); + } else if (auto *flacFile = dynamic_cast(file)) { + builder.setMimeType("audio/flac"); + builder.setId3v2(*flacFile->ID3v2Tag()); + builder.setXiph(*flacFile->xiphComment()); + } else if (auto *opusFile = dynamic_cast(file)) { + builder.setMimeType("audio/opus"); + builder.setXiph(*opusFile->tag()); + } else if (auto *vorbisFile = + dynamic_cast(file)) { + builder.setMimeType("audio/vorbis"); + builder.setXiph(*vorbisFile->tag()); + } else if (auto *wavFile = dynamic_cast(file)) { + builder.setMimeType("audio/wav"); + builder.setId3v2(*wavFile->ID3v2Tag()); + } else { + // While taglib supports other formats, ExoPlayer does not. Ignore them. + return nullptr; + } + + builder.setProperties(file->audioProperties()); + builder.setCover(file->tag()->complexProperties("PICTURE")); + return builder.build(); + } catch (std::runtime_error e) { + LOGE("Error opening file: %s", e.what()); return nullptr; } - builder.setProperties(file->audioProperties()); - builder.setCover(file->tag()->complexProperties("PICTURE")); - - return builder.build(); }