From 1a1660e939c35b22ca6a9e73e998d7d7fa31ff85 Mon Sep 17 00:00:00 2001 From: ksooo <3226626+ksooo@users.noreply.github.com> Date: Sun, 15 Oct 2023 17:53:45 +0200 Subject: [PATCH] [fileitem] Fix mimetype not set/updated properly on loading details. --- xbmc/FileItem.cpp | 21 ++++++++++++++++----- xbmc/FileItem.h | 6 ++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/xbmc/FileItem.cpp b/xbmc/FileItem.cpp index 651500326f64a..8184943a7ae71 100644 --- a/xbmc/FileItem.cpp +++ b/xbmc/FileItem.cpp @@ -1629,6 +1629,16 @@ void CFileItem::FillInMimeType(bool lookup /*= true*/) } } +void CFileItem::UpdateMimeType(bool lookup /*= true*/) +{ + //! @todo application/octet-stream might actually have been set by a web lookup. Currently we + //! cannot distinguish between set as fallback only (see FillInMimeType) or as an actual value. + if (m_mimetype == "application/octet-stream") + m_mimetype.clear(); + + FillInMimeType(lookup); +} + void CFileItem::SetMimeTypeForInternetFile() { if (m_doContentLookup && IsInternetStream()) @@ -1768,6 +1778,7 @@ void CFileItem::UpdateInfo(const CFileItem &item, bool replaceLabels /*=true*/) if (!item.GetArt().empty()) SetArt(item.GetArt()); AppendProperties(item); + UpdateMimeType(); } void CFileItem::MergeInfo(const CFileItem& item) @@ -1836,6 +1847,7 @@ void CFileItem::MergeInfo(const CFileItem& item) SetArt(item.GetArt()); } AppendProperties(item); + UpdateMimeType(); } void CFileItem::SetFromVideoInfoTag(const CVideoInfoTag &video) @@ -3781,10 +3793,9 @@ bool CFileItem::LoadDetails() if (ret) { - m_videoInfoTag = tag.release(); - m_strDynPath = m_videoInfoTag->m_strFileNameAndPath; + const CFileItem loadedItem{*tag}; + UpdateInfo(loadedItem); } - return ret; } @@ -3816,8 +3827,8 @@ bool CFileItem::LoadDetails() auto tag{std::make_unique()}; if (db.LoadVideoInfo(GetDynPath(), *tag)) { - m_videoInfoTag = tag.release(); - m_strDynPath = m_videoInfoTag->m_strFileNameAndPath; + const CFileItem loadedItem{*tag}; + UpdateInfo(loadedItem); return true; } diff --git a/xbmc/FileItem.h b/xbmc/FileItem.h index 464ce10a3548a..d5fdc4b3f8407 100644 --- a/xbmc/FileItem.h +++ b/xbmc/FileItem.h @@ -636,6 +636,12 @@ class CFileItem : */ void Initialize(); + /*! \brief Recalculate item's MIME type if it is not set or is set to "application/octet-stream". + Resolve the MIME type based on file extension or a web lookup. + \sa FillInMimeType + */ + void UpdateMimeType(bool lookup = true); + /*! \brief Return the current resume point for this item. \return The resume point.