aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorksooo <3226626+ksooo@users.noreply.github.com>2024-06-21 16:49:05 +0200
committerksooo <3226626+ksooo@users.noreply.github.com>2024-06-27 18:12:58 +0200
commitbea7e6de2f6828e13227c7e6783f865ebd87e046 (patch)
tree9feb421dc53511b443818dfacf0e8816b8746850
parent8a90f175f53fa3f86415e6a376aed54d244cad0e (diff)
[PVR] Group Manager: Fix group thumbnail update.
-rw-r--r--xbmc/pvr/dialogs/GUIDialogPVRGroupManager.cpp60
-rw-r--r--xbmc/pvr/dialogs/GUIDialogPVRGroupManager.h2
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);