diff options
author | Miguel Borges de Freitas <92enen@gmail.com> | 2024-03-23 10:37:11 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-23 10:37:11 +0000 |
commit | eea5308b40b478e63bdc051907018c9c4c7a66d0 (patch) | |
tree | c65d69e95ad986971bc8248fc9427a83d3283b56 | |
parent | e03cbeb54de45bfb6cf2537483c26491d3e73f4b (diff) | |
parent | 9fe92dd4843ea77ad0259640dcefe1fb50f8ce87 (diff) |
Merge pull request #24880 from enen92/handle_stack_errors
stacks: make InitializeStackStartPartAndOffset return optional and ha…
-rw-r--r-- | xbmc/application/Application.cpp | 10 | ||||
-rw-r--r-- | xbmc/application/ApplicationStackHelper.cpp | 4 | ||||
-rw-r--r-- | xbmc/application/ApplicationStackHelper.h | 4 |
3 files changed, 13 insertions, 5 deletions
diff --git a/xbmc/application/Application.cpp b/xbmc/application/Application.cpp index cf45deafb5..d3bc14d33c 100644 --- a/xbmc/application/Application.cpp +++ b/xbmc/application/Application.cpp @@ -2264,10 +2264,16 @@ bool CApplication::PlayStack(CFileItem& item, bool bRestart) if (!stackHelper->InitializeStack(item)) return false; - int startoffset = stackHelper->InitializeStackStartPartAndOffset(item); + std::optional<int> startoffset = stackHelper->InitializeStackStartPartAndOffset(item); + if (!startoffset) + { + CLog::LogF(LOGERROR, "Failed to obtain start offset for stack {}. Aborting playback.", + item.GetDynPath()); + return false; + } CFileItem selectedStackPart = stackHelper->GetCurrentStackPartFileItem(); - selectedStackPart.SetStartOffset(startoffset); + selectedStackPart.SetStartOffset(startoffset.value()); if (item.HasProperty("savedplayerstate")) { diff --git a/xbmc/application/ApplicationStackHelper.cpp b/xbmc/application/ApplicationStackHelper.cpp index 4e62388a62..fbc7219bd5 100644 --- a/xbmc/application/ApplicationStackHelper.cpp +++ b/xbmc/application/ApplicationStackHelper.cpp @@ -81,7 +81,7 @@ bool CApplicationStackHelper::InitializeStack(const CFileItem & item) return true; } -int CApplicationStackHelper::InitializeStackStartPartAndOffset(const CFileItem& item) +std::optional<int> CApplicationStackHelper::InitializeStackStartPartAndOffset(const CFileItem& item) { CVideoDatabase dbs; int64_t startoffset = 0; @@ -163,7 +163,7 @@ int CApplicationStackHelper::InitializeStackStartPartAndOffset(const CFileItem& if (!CDVDFileInfo::GetFileDuration(GetStackPartFileItem(i).GetDynPath(), duration)) { m_currentStack->Clear(); - return false; + return std::nullopt; } totalTimeMs += duration; // set end time in every part diff --git a/xbmc/application/ApplicationStackHelper.h b/xbmc/application/ApplicationStackHelper.h index 6af0044372..4cdbc39e42 100644 --- a/xbmc/application/ApplicationStackHelper.h +++ b/xbmc/application/ApplicationStackHelper.h @@ -13,6 +13,7 @@ #include <map> #include <memory> +#include <optional> #include <string> class CFileItem; @@ -36,8 +37,9 @@ public: /*! \brief Initialize stack times for each part, start & end, total time, and current part number if resume offset is specified. \param item the FileItem object that is the stack + \returns the part offset if available, nullopt in case of errors */ - int InitializeStackStartPartAndOffset(const CFileItem& item); + std::optional<int> InitializeStackStartPartAndOffset(const CFileItem& item); /*! \brief returns the current part number |