adobe / asset-share-commons

A modern, open-source asset share reference implementation built on Adobe Experience Manager (AEM)
https://opensource.adobe.com/asset-share-commons/
Apache License 2.0
88 stars 107 forks source link

Asset details page resolution for video files (.mp4) #1090

Open dominiklaci opened 7 months ago

dominiklaci commented 7 months ago

Describe the bug The issue is about asset details page resolution. The asset of type .mp4 was resolved to default details.html page which is not correct and it should be video.html. That happens because of the way how String getAssetTypeFromMimetypeConfiguration(String mimeType) in com.adobe.aem.commons.assetshare.content.properties.impl.AssetTypeImpl is implemented. Service user "mimetype-service" fetches "/mnt/overlay/dam/gui/content/assets/jcr:content/mimeTypeLookup" and then looks for a subnode matching the file extension. For current data in /libs/dam/gui/content/assets/jcr:content/mimeTypeLookup, "Multimedia" is the match for "video/mp4", i.e. mp4.

I solved this issue by overlaying /libs/dam/gui/content/assets/jcr:content/mimeTypeLookup and adding a new "Video" subnode containing a configuration for MP4. In "Multimedia" node, I removed the entry for "MP4".

Important note: for Resource Merger to work properly, "mimetype-service" must be granted access to the overlaid "/apps/dam" node.

Environment

To Reproduce Steps to reproduce the behavior:

  1. In Search page properties, configure "Asset Details Page Selector" to "Asset Type"
  2. From search results, open any .mp4 video asset in details page
  3. The system resolves the default "details.html" page as redirect URL

Expected behavior "video.html" is expected

Screenshots /libs/dam/gui/content/assets/jcr:content/mimeTypeLookup/Multimedia Screenshot 2024-02-27 at 16 08 44

Possible fix Screenshot 2024-02-27 at 16 09 49

"mimetype-service" needs additional read permission on /apps/dam, otherwise the Merger will not work properly Screenshot 2024-02-27 at 16 10 38

Additional context Ideally, this resolution should be configurable in OSGi configuration.

davidjgonzalez commented 6 months ago

Have you checked out the newer Content Type asset details selector?

https://opensource.adobe.com/asset-share-commons/pages/search/search-page/#asset-details-page-selector

these are maps that drive it (left is mime/type or prefix type, and right is the content type name (which is turned lowercase with - for spaces in asset details)

https://github.com/adobe/asset-share-commons/blob/main/core/src/main/java/com/adobe/aem/commons/assetshare/content/properties/impl/ContentTypeImpl.java#L67-L99

Unfortunately the original decision to rely on AEM logic for determining this turned out to be a bad decision ... You can use the new Content Type one, or you could make your own selector that you can have full control over; theyre pretty easy to make:

https://github.com/adobe/asset-share-commons/blob/develop/core/src/main/java/com/adobe/aem/commons/assetshare/configuration/impl/selectors/ContentTypeSelectorImpl.java

davidjgonzalez commented 6 months ago

There are a few issues logged about this already - if you want to use "asset type" selector, i believe the page name is now multimedia.html ... it was video at one time, however the AEM API asset type uses changed at some point and is now returning multimedia ...

here's an example: https://github.com/adobe/asset-share-commons/issues/917