diff options
-rw-r--r-- | xbmc/FileItem.cpp | 10 | ||||
-rw-r--r-- | xbmc/cores/VideoPlayer/DVDSubtitles/DVDFactorySubtitle.cpp | 15 |
2 files changed, 19 insertions, 6 deletions
diff --git a/xbmc/FileItem.cpp b/xbmc/FileItem.cpp index 5623e9a7e1..3898d14e84 100644 --- a/xbmc/FileItem.cpp +++ b/xbmc/FileItem.cpp @@ -1801,7 +1801,10 @@ void CFileItem::UpdateInfo(const CFileItem &item, bool replaceLabels /*=true*/) if (!item.GetArt().empty()) SetArt(item.GetArt()); AppendProperties(item); - UpdateMimeType(); + + SetContentLookup(item.m_doContentLookup); + SetMimeType(item.m_mimetype); + UpdateMimeType(m_doContentLookup); } void CFileItem::MergeInfo(const CFileItem& item) @@ -1871,7 +1874,10 @@ void CFileItem::MergeInfo(const CFileItem& item) SetArt(item.GetArt()); } AppendProperties(item); - UpdateMimeType(); + + SetContentLookup(item.m_doContentLookup); + SetMimeType(item.m_mimetype); + UpdateMimeType(m_doContentLookup); } void CFileItem::SetFromVideoInfoTag(const CVideoInfoTag &video) diff --git a/xbmc/cores/VideoPlayer/DVDSubtitles/DVDFactorySubtitle.cpp b/xbmc/cores/VideoPlayer/DVDSubtitles/DVDFactorySubtitle.cpp index 51270337c6..6f922cd02f 100644 --- a/xbmc/cores/VideoPlayer/DVDSubtitles/DVDFactorySubtitle.cpp +++ b/xbmc/cores/VideoPlayer/DVDSubtitles/DVDFactorySubtitle.cpp @@ -20,6 +20,12 @@ #include <cstring> #include <memory> +#include <regex> + +namespace +{ +constexpr const char* ASS_SCRIPT_TYPE_RE = "^ScriptType:\\s*v4\\.00\\+?"; +} CDVDSubtitleParser* CDVDFactorySubtitle::CreateParser(std::string& strFile) { @@ -32,6 +38,8 @@ CDVDSubtitleParser* CDVDFactorySubtitle::CreateParser(std::string& strFile) return nullptr; } + const std::regex reAssScriptType{ASS_SCRIPT_TYPE_RE}; + for (int t = 0; t < 256; t++) { if (pStream->ReadLine(line)) @@ -55,10 +63,9 @@ CDVDSubtitleParser* CDVDFactorySubtitle::CreateParser(std::string& strFile) return new CDVDSubtitleParserVplayer(std::move(pStream), strFile); } else if (!StringUtils::CompareNoCase(line, "!: This is a Sub Station Alpha v", 32) || - !StringUtils::CompareNoCase(line, "ScriptType: v4.00", 17) || - !StringUtils::CompareNoCase(line, "Dialogue: Marked", 16) || - !StringUtils::CompareNoCase(line, "Dialogue: ", 10) || - !StringUtils::CompareNoCase(line, "[Events]", 8)) + std::regex_match(line, reAssScriptType) || + !StringUtils::CompareNoCase(line, "[Events]", 8) || + !StringUtils::CompareNoCase(line, "Dialogue:", 9)) { return new CDVDSubtitleParserSSA(std::move(pStream), strFile); } |