diff options
author | Kai Sommerfeld <3226626+ksooo@users.noreply.github.com> | 2023-12-17 23:14:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-17 23:14:46 +0100 |
commit | ca903e28656777b7e8b5157b4b4b1a4e9a8dd380 (patch) | |
tree | 279e60e4aa95904a376dd86dd6418170e1a24900 | |
parent | 8d5f5efcaecf0580853c505673846f17bfed0b1e (diff) | |
parent | 3b8aa55c5a5e99ae3062c946e1155bde7acdf212 (diff) |
Merge pull request #24261 from ksooo/video-version-select-button-visibility
[video] Video version select: Hide extras/versions button if no extras/versions available.
-rw-r--r-- | xbmc/video/guilib/VideoVersionHelper.cpp | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/xbmc/video/guilib/VideoVersionHelper.cpp b/xbmc/video/guilib/VideoVersionHelper.cpp index 1d00e5954d..56b1df9c14 100644 --- a/xbmc/video/guilib/VideoVersionHelper.cpp +++ b/xbmc/video/guilib/VideoVersionHelper.cpp @@ -42,20 +42,37 @@ private: std::shared_ptr<const CFileItem> ChooseVideo(CGUIDialogSelect& dialog, int headingId, int buttonId, - VideoVersionItemType itemType); + const CFileItemList& itemsToDisplay, + const CFileItemList& itemsToSwitchTo); const std::shared_ptr<const CFileItem> m_item; bool m_switchType{false}; + CFileItemList m_videoVersions; + CFileItemList m_videoExtras; }; std::shared_ptr<const CFileItem> CVideoChooser::ChooseVideo() { m_switchType = false; + m_videoVersions.Clear(); + m_videoExtras.Clear(); std::shared_ptr<const CFileItem> result; if (!m_item->HasVideoVersions()) return result; + CVideoDatabase db; + if (!db.Open()) + { + CLog::LogF(LOGERROR, "Unable to open video database!"); + return result; + } + + db.GetVideoVersions(m_item->GetVideoContentType(), m_item->GetVideoInfoTag()->m_iDbId, + m_videoVersions, VideoVersionItemType::PRIMARY); + db.GetVideoVersions(m_item->GetVideoContentType(), m_item->GetVideoInfoTag()->m_iDbId, + m_videoExtras, VideoVersionItemType::EXTRAS); + VideoVersionItemType itemType{VideoVersionItemType::PRIMARY}; while (true) { @@ -88,8 +105,8 @@ std::shared_ptr<const CFileItem> CVideoChooser::ChooseVideoVersion() return {}; } - return ChooseVideo(*dialog, 40210 /* Versions */, 40211 /* Extras */, - VideoVersionItemType::PRIMARY); + return ChooseVideo(*dialog, 40210 /* Versions */, 40211 /* Extras */, m_videoVersions, + m_videoExtras); } std::shared_ptr<const CFileItem> CVideoChooser::ChooseVideoExtra() @@ -102,28 +119,18 @@ std::shared_ptr<const CFileItem> CVideoChooser::ChooseVideoExtra() return {}; } - return ChooseVideo(*dialog, 40211 /* Extras */, 40210 /* Versions */, - VideoVersionItemType::EXTRAS); + return ChooseVideo(*dialog, 40211 /* Extras */, 40210 /* Versions */, m_videoExtras, + m_videoVersions); } std::shared_ptr<const CFileItem> CVideoChooser::ChooseVideo(CGUIDialogSelect& dialog, int headingId, int buttonId, - VideoVersionItemType itemType) + const CFileItemList& itemsToDisplay, + const CFileItemList& itemsToSwitchTo) { - CVideoDatabase db; - if (!db.Open()) - { - CLog::LogF(LOGERROR, "Unable to open video database!"); - return {}; - } - - CFileItemList items; - db.GetVideoVersions(m_item->GetVideoContentType(), m_item->GetVideoInfoTag()->m_iDbId, items, - itemType); - CVideoThumbLoader thumbLoader; - for (auto& item : items) + for (auto& item : itemsToDisplay) { thumbLoader.LoadItem(item.get()); item->SetLabel2(item->GetVideoInfoTag()->m_strFileNameAndPath); @@ -135,10 +142,10 @@ std::shared_ptr<const CFileItem> CVideoChooser::ChooseVideo(CGUIDialogSelect& di StringUtils::Format("{} : {}", g_localizeStrings.Get(headingId), m_item->GetLabel())}; dialog.SetHeading(heading); - dialog.EnableButton(true, buttonId); + dialog.EnableButton(!itemsToSwitchTo.IsEmpty(), buttonId); dialog.SetUseDetails(true); dialog.SetMultiSelection(false); - dialog.SetItems(items); + dialog.SetItems(itemsToDisplay); dialog.Open(); |