diff --git a/libraries/hfm/src/hfm/HFMFormatRegistry.cpp b/libraries/hfm/src/hfm/HFMFormatRegistry.cpp index 1125486f5e..b96662bdcc 100644 --- a/libraries/hfm/src/hfm/HFMFormatRegistry.cpp +++ b/libraries/hfm/src/hfm/HFMFormatRegistry.cpp @@ -50,7 +50,14 @@ std::shared_ptr FormatRegistry::getSerializerForMIMEType(const hifi: { // TODO: shared_lock in C++14 std::lock_guard lock(*const_cast(&_libraryLock)); - id = _mimeTypeLibrary.findMatchingMIMEType(data, url, webMediaType); + + id = _mimeTypeLibrary.findMIMETypeForData(data); + if (id == INVALID_MIME_TYPE_ID) { + id = _mimeTypeLibrary.findMIMETypeForURL(url); + } + if (id == INVALID_MIME_TYPE_ID) { + id = _mimeTypeLibrary.findMIMETypeForMediaType(webMediaType); + } } return getSerializerForMIMETypeID(id); } diff --git a/libraries/shared/src/shared/MIMETypeLibrary.cpp b/libraries/shared/src/shared/MIMETypeLibrary.cpp index 7bc9defab6..f3874012b1 100644 --- a/libraries/shared/src/shared/MIMETypeLibrary.cpp +++ b/libraries/shared/src/shared/MIMETypeLibrary.cpp @@ -35,7 +35,7 @@ MIMEType MIMETypeLibrary::getMIMEType(const MIMETypeLibrary::ID& id) const { return MIMEType::NONE; } -MIMETypeLibrary::ID MIMETypeLibrary::findMatchingMIMEType(const hifi::ByteArray& data, const hifi::URL& url, const std::string& webMediaType) const { +MIMETypeLibrary::ID MIMETypeLibrary::findMIMETypeForData(const hifi::ByteArray& data) const { // Check file contents for (auto& mimeType : _mimeTypes) { for (auto& fileSignature : mimeType.mimeType.fileSignatures) { @@ -46,6 +46,10 @@ MIMETypeLibrary::ID MIMETypeLibrary::findMatchingMIMEType(const hifi::ByteArray& } } + return INVALID_ID; +} + +MIMETypeLibrary::ID MIMETypeLibrary::findMIMETypeForURL(const hifi::URL& url) const { // Check file extension std::string urlString = url.path().toStdString(); std::size_t extensionSeparator = urlString.rfind('.'); @@ -60,6 +64,10 @@ MIMETypeLibrary::ID MIMETypeLibrary::findMatchingMIMEType(const hifi::ByteArray& } } + return INVALID_ID; +} + +MIMETypeLibrary::ID MIMETypeLibrary::findMIMETypeForMediaType(const std::string& webMediaType) const { // Check web media type if (webMediaType != "") { for (auto& supportedFormat : _mimeTypes) { @@ -71,6 +79,5 @@ MIMETypeLibrary::ID MIMETypeLibrary::findMatchingMIMEType(const hifi::ByteArray& } } - // Supported file type not found. return INVALID_ID; } diff --git a/libraries/shared/src/shared/MIMETypeLibrary.h b/libraries/shared/src/shared/MIMETypeLibrary.h index 94dba0b3c8..33e415a86c 100644 --- a/libraries/shared/src/shared/MIMETypeLibrary.h +++ b/libraries/shared/src/shared/MIMETypeLibrary.h @@ -68,7 +68,10 @@ public: void unregisterMIMEType(const ID& id); MIMEType getMIMEType(const ID& id) const; - ID findMatchingMIMEType(const hifi::ByteArray& data, const hifi::URL& url, const std::string& webMediaType) const; + + ID findMIMETypeForData(const hifi::ByteArray& data) const; + ID findMIMETypeForURL(const hifi::URL& url) const; + ID findMIMETypeForMediaType(const std::string& webMediaType) const; protected: ID nextID { 1 };