diff options
author | Kai Sommerfeld <3226626+ksooo@users.noreply.github.com> | 2024-06-28 09:25:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-28 09:25:00 +0200 |
commit | f517e31cef8206c91dce6970bd551b99e421b78a (patch) | |
tree | 87835d86cae2c076a9d64a580ba6c4a0dd9c38a1 | |
parent | 402d10442eab03cd39ef154ff7ee1a41eae5fc3d (diff) | |
parent | bea7e6de2f6828e13227c7e6783f865ebd87e046 (diff) |
Merge pull request #25393 from ksooo/pvr-fix-groupmanager-thumbnail-update
[PVR] Group Manager: Fix group thumbnail update.
-rw-r--r-- | xbmc/pvr/dialogs/GUIDialogPVRGroupManager.cpp | 60 | ||||
-rw-r--r-- | xbmc/pvr/dialogs/GUIDialogPVRGroupManager.h | 2 |
2 files changed, 53 insertions, 9 deletions
diff --git a/xbmc/pvr/dialogs/GUIDialogPVRGroupManager.cpp b/xbmc/pvr/dialogs/GUIDialogPVRGroupManager.cpp index f04c7502aa..6ef722b6d8 100644 --- a/xbmc/pvr/dialogs/GUIDialogPVRGroupManager.cpp +++ b/xbmc/pvr/dialogs/GUIDialogPVRGroupManager.cpp @@ -26,6 +26,7 @@ #include "pvr/PVRPlaybackState.h" #include "pvr/addons/PVRClient.h" #include "pvr/channels/PVRChannel.h" +#include "pvr/channels/PVRChannelGroup.h" #include "pvr/channels/PVRChannelGroupMember.h" #include "pvr/channels/PVRChannelGroups.h" #include "pvr/channels/PVRChannelGroupsContainer.h" @@ -160,7 +161,7 @@ bool CGUIDialogPVRGroupManager::ActionButtonNewGroup(const CGUIMessage& message) if (!strGroupName.empty()) { // add the group if it doesn't already exist - auto groups = CServiceBroker::GetPVRManager().ChannelGroups()->Get(m_bIsRadio); + CPVRChannelGroups* groups{CServiceBroker::GetPVRManager().ChannelGroups()->Get(m_bIsRadio)}; const auto group = groups->AddGroup(strGroupName); if (group) { @@ -200,7 +201,7 @@ bool CGUIDialogPVRGroupManager::ActionButtonDeleteGroup(const CGUIMessage& messa if (pDialog->IsConfirmed()) { - ClearSelectedGroupsThumbnail(); + ClearGroupThumbnails(*m_channelGroups->Get(m_iSelectedChannelGroup)); if (CServiceBroker::GetPVRManager() .ChannelGroups() ->Get(m_bIsRadio) @@ -237,7 +238,7 @@ bool CGUIDialogPVRGroupManager::ActionButtonRenameGroup(const CGUIMessage& messa if (!strGroupName.empty()) { - ClearSelectedGroupsThumbnail(); + ClearGroupThumbnails(*m_channelGroups->Get(m_iSelectedChannelGroup)); if (CServiceBroker::GetPVRManager() .ChannelGroups() ->Get(m_bIsRadio) @@ -282,7 +283,7 @@ bool CGUIDialogPVRGroupManager::ActionButtonUngroupedChannels(const CGUIMessage& ->Get(m_bIsRadio) ->AppendToGroup(m_selectedGroup, itemChannel->GetPVRChannelGroupMemberInfoTag())) { - ClearSelectedGroupsThumbnail(); + ClearGroupThumbnails(*itemChannel); m_iSelectedChannelGroup = -1; // recalc index in Update() Update(); } @@ -312,7 +313,7 @@ bool CGUIDialogPVRGroupManager::ActionButtonGroupMembers(const CGUIMessage& mess if (m_selectedGroup && m_groupMembers->GetFileCount() > 0) { const auto itemChannel = m_groupMembers->Get(m_iSelectedGroupMember); - ClearSelectedGroupsThumbnail(); + ClearGroupThumbnails(*itemChannel); if (CServiceBroker::GetPVRManager() .ChannelGroups() ->Get(m_bIsRadio) @@ -648,7 +649,7 @@ void CGUIDialogPVRGroupManager::Update() m_groupMembers->Add(std::make_shared<CFileItem>(groupMember)); } - const auto groups = CServiceBroker::GetPVRManager().ChannelGroups()->Get(m_bIsRadio); + CPVRChannelGroups* groups{CServiceBroker::GetPVRManager().ChannelGroups()->Get(m_bIsRadio)}; const auto availableMembers = groups->GetMembersAvailableForGroup(m_selectedGroup); for (const auto& groupMember : availableMembers) @@ -678,7 +679,50 @@ void CGUIDialogPVRGroupManager::Clear() m_channelGroups->Clear(); } -void CGUIDialogPVRGroupManager::ClearSelectedGroupsThumbnail() +void CGUIDialogPVRGroupManager::ClearGroupThumbnails(const CFileItem& changedItem) { - m_thumbLoader.ClearCachedImage(*m_channelGroups->Get(m_iSelectedChannelGroup)); + const CPVRChannelGroups* groups{CServiceBroker::GetPVRManager().ChannelGroups()->Get(m_bIsRadio)}; + + const std::shared_ptr<const CPVRChannelGroupMember> changedMember{ + changedItem.GetPVRChannelGroupMemberInfoTag()}; + if (changedMember) + { + // Item represents a channel group member. + + for (const auto& groupItem : *m_channelGroups) + { + const std::shared_ptr<const CPVRChannelGroup> group{ + groups->GetGroupByPath(groupItem->GetPath())}; + if (!group) + continue; + + // If the changed channel group member is a member of this group, update this group's thumb. + if (group->IsGroupMember(changedMember)) + m_thumbLoader.ClearCachedImage(*groupItem); + } + } + else + { + // Item represents a group. + + const std::shared_ptr<const CPVRChannelGroup> changedGroup{ + groups->GetGroupByPath(changedItem.GetPath())}; + for (const auto& groupItem : *m_channelGroups) + { + const std::shared_ptr<const CPVRChannelGroup> group{ + groups->GetGroupByPath(groupItem->GetPath())}; + if (!group) + continue; + + for (const auto& member : group->GetMembers()) + { + // If this channel group member is a member of the changed group, update this group's thumb. + if (changedGroup->IsGroupMember(member)) + { + m_thumbLoader.ClearCachedImage(*groupItem); + break; // Next group. + } + } + } + } } diff --git a/xbmc/pvr/dialogs/GUIDialogPVRGroupManager.h b/xbmc/pvr/dialogs/GUIDialogPVRGroupManager.h index b5a8aae14f..b0a83101b9 100644 --- a/xbmc/pvr/dialogs/GUIDialogPVRGroupManager.h +++ b/xbmc/pvr/dialogs/GUIDialogPVRGroupManager.h @@ -39,7 +39,7 @@ protected: private: void Clear(); - void ClearSelectedGroupsThumbnail(); + void ClearGroupThumbnails(const CFileItem& changedItem); void Update(); bool ActionButtonOk(const CGUIMessage& message); bool ActionButtonNewGroup(const CGUIMessage& message); |