musikr.metadata: wrap exceptions into log
Not ideal, but avoids a total catastrophic crash on failed metadata extractions.
This commit is contained in:
parent
b6bc065a4a
commit
c379174ffe
1 changed files with 39 additions and 34 deletions
|
@ -18,9 +18,9 @@
|
||||||
|
|
||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "JVMInputStream.h"
|
#include "JVMInputStream.h"
|
||||||
#include "JVMMetadataBuilder.h"
|
#include "JVMMetadataBuilder.h"
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
#include "taglib/fileref.h"
|
#include "taglib/fileref.h"
|
||||||
#include "taglib/flacfile.h"
|
#include "taglib/flacfile.h"
|
||||||
|
@ -34,41 +34,46 @@ extern "C" JNIEXPORT jobject JNICALL
|
||||||
Java_org_oxycblt_musikr_metadata_TagLibJNI_openNative(JNIEnv *env,
|
Java_org_oxycblt_musikr_metadata_TagLibJNI_openNative(JNIEnv *env,
|
||||||
jobject /* this */,
|
jobject /* this */,
|
||||||
jobject inputStream) {
|
jobject inputStream) {
|
||||||
JVMInputStream stream {env, inputStream};
|
try {
|
||||||
TagLib::FileRef fileRef {&stream};
|
JVMInputStream stream {env, inputStream};
|
||||||
if (fileRef.isNull()) {
|
TagLib::FileRef fileRef {&stream};
|
||||||
return nullptr;
|
if (fileRef.isNull()) {
|
||||||
}
|
return nullptr;
|
||||||
TagLib::File *file = fileRef.file();
|
}
|
||||||
JVMMetadataBuilder builder {env};
|
TagLib::File *file = fileRef.file();
|
||||||
|
JVMMetadataBuilder builder {env};
|
||||||
|
|
||||||
if (auto *mpegFile = dynamic_cast<TagLib::MPEG::File *>(file)) {
|
if (auto *mpegFile = dynamic_cast<TagLib::MPEG::File *>(file)) {
|
||||||
builder.setMimeType("audio/mpeg");
|
builder.setMimeType("audio/mpeg");
|
||||||
builder.setId3v2(*mpegFile->ID3v2Tag());
|
builder.setId3v2(*mpegFile->ID3v2Tag());
|
||||||
} else if (auto *mp4File = dynamic_cast<TagLib::MP4::File *>(file)) {
|
} else if (auto *mp4File = dynamic_cast<TagLib::MP4::File *>(file)) {
|
||||||
builder.setMimeType("audio/mp4");
|
builder.setMimeType("audio/mp4");
|
||||||
builder.setMp4(*mp4File->tag());
|
builder.setMp4(*mp4File->tag());
|
||||||
} else if (auto *flacFile = dynamic_cast<TagLib::FLAC::File *>(file)) {
|
} else if (auto *flacFile = dynamic_cast<TagLib::FLAC::File *>(file)) {
|
||||||
builder.setMimeType("audio/flac");
|
builder.setMimeType("audio/flac");
|
||||||
builder.setId3v2(*flacFile->ID3v2Tag());
|
builder.setId3v2(*flacFile->ID3v2Tag());
|
||||||
builder.setXiph(*flacFile->xiphComment());
|
builder.setXiph(*flacFile->xiphComment());
|
||||||
} else if (auto *opusFile = dynamic_cast<TagLib::Ogg::Opus::File *>(file)) {
|
} else if (auto *opusFile = dynamic_cast<TagLib::Ogg::Opus::File *>(file)) {
|
||||||
builder.setMimeType("audio/opus");
|
builder.setMimeType("audio/opus");
|
||||||
builder.setXiph(*opusFile->tag());
|
builder.setXiph(*opusFile->tag());
|
||||||
} else if (auto *vorbisFile =
|
} else if (auto *vorbisFile =
|
||||||
dynamic_cast<TagLib::Ogg::Vorbis::File *>(file)) {
|
dynamic_cast<TagLib::Ogg::Vorbis::File *>(file)) {
|
||||||
builder.setMimeType("audio/vorbis");
|
builder.setMimeType("audio/vorbis");
|
||||||
builder.setXiph(*vorbisFile->tag());
|
builder.setXiph(*vorbisFile->tag());
|
||||||
} else if (auto *wavFile = dynamic_cast<TagLib::RIFF::WAV::File *>(file)) {
|
} else if (auto *wavFile = dynamic_cast<TagLib::RIFF::WAV::File *>(file)) {
|
||||||
builder.setMimeType("audio/wav");
|
builder.setMimeType("audio/wav");
|
||||||
builder.setId3v2(*wavFile->ID3v2Tag());
|
builder.setId3v2(*wavFile->ID3v2Tag());
|
||||||
} else {
|
} else {
|
||||||
// While taglib supports other formats, ExoPlayer does not. Ignore them.
|
// 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;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.setProperties(file->audioProperties());
|
|
||||||
builder.setCover(file->tag()->complexProperties("PICTURE"));
|
|
||||||
|
|
||||||
return builder.build();
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue