summaryrefslogtreecommitdiffstats
path: root/xbmc/pvr/channels/PVRChannelGroupMember.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/pvr/channels/PVRChannelGroupMember.cpp')
-rw-r--r--xbmc/pvr/channels/PVRChannelGroupMember.cpp137
1 files changed, 137 insertions, 0 deletions
diff --git a/xbmc/pvr/channels/PVRChannelGroupMember.cpp b/xbmc/pvr/channels/PVRChannelGroupMember.cpp
new file mode 100644
index 0000000..27592b5
--- /dev/null
+++ b/xbmc/pvr/channels/PVRChannelGroupMember.cpp
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2012-2021 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#include "PVRChannelGroupMember.h"
+
+#include "ServiceBroker.h"
+#include "pvr/PVRDatabase.h"
+#include "pvr/PVRManager.h"
+#include "pvr/addons/PVRClient.h"
+#include "pvr/channels/PVRChannel.h"
+#include "pvr/channels/PVRChannelsPath.h"
+#include "utils/DatabaseUtils.h"
+#include "utils/SortUtils.h"
+#include "utils/Variant.h"
+#include "utils/log.h"
+
+using namespace PVR;
+
+CPVRChannelGroupMember::CPVRChannelGroupMember(const std::string& groupName,
+ int order,
+ const std::shared_ptr<CPVRChannel>& channel)
+ : m_clientChannelNumber(channel->ClientChannelNumber()), m_iOrder(order)
+{
+ SetChannel(channel);
+ SetGroupName(groupName);
+}
+
+CPVRChannelGroupMember::CPVRChannelGroupMember(int iGroupID,
+ const std::string& groupName,
+ const std::shared_ptr<CPVRChannel>& channel)
+ : m_iGroupID(iGroupID),
+ m_clientChannelNumber(channel->ClientChannelNumber()),
+ m_iOrder(channel->ClientOrder())
+{
+ SetChannel(channel);
+ SetGroupName(groupName);
+}
+
+void CPVRChannelGroupMember::Serialize(CVariant& value) const
+{
+ value["channelnumber"] = m_channelNumber.GetChannelNumber();
+ value["subchannelnumber"] = m_channelNumber.GetSubChannelNumber();
+}
+
+void CPVRChannelGroupMember::SetChannel(const std::shared_ptr<CPVRChannel>& channel)
+{
+ // note: no need to set m_bChanged, as these values are not persisted in the db
+ m_channel = channel;
+ m_iClientID = channel->ClientID();
+ m_iChannelUID = channel->UniqueID();
+ m_iChannelDatabaseID = channel->ChannelID();
+ m_bIsRadio = channel->IsRadio();
+}
+
+void CPVRChannelGroupMember::ToSortable(SortItem& sortable, Field field) const
+{
+ if (field == FieldChannelNumber)
+ {
+ sortable[FieldChannelNumber] = m_channelNumber.SortableChannelNumber();
+ }
+ else if (field == FieldClientChannelOrder)
+ {
+ if (m_iOrder)
+ sortable[FieldClientChannelOrder] = m_iOrder;
+ else
+ sortable[FieldClientChannelOrder] = m_clientChannelNumber.SortableChannelNumber();
+ }
+}
+
+void CPVRChannelGroupMember::SetGroupID(int iGroupID)
+{
+ if (m_iGroupID != iGroupID)
+ {
+ m_iGroupID = iGroupID;
+ m_bNeedsSave = true;
+ }
+}
+
+void CPVRChannelGroupMember::SetGroupName(const std::string& groupName)
+{
+ const std::shared_ptr<CPVRClient> client = CServiceBroker::GetPVRManager().GetClient(m_iClientID);
+ if (client)
+ m_path =
+ CPVRChannelsPath(m_bIsRadio, groupName, client->ID(), client->InstanceId(), m_iChannelUID);
+ else
+ CLog::LogF(LOGERROR, "Unable to obtain instance for client id: {}", m_iClientID);
+}
+
+void CPVRChannelGroupMember::SetChannelNumber(const CPVRChannelNumber& channelNumber)
+{
+ if (m_channelNumber != channelNumber)
+ {
+ m_channelNumber = channelNumber;
+ m_bNeedsSave = true;
+ }
+}
+
+void CPVRChannelGroupMember::SetClientChannelNumber(const CPVRChannelNumber& clientChannelNumber)
+{
+ if (m_clientChannelNumber != clientChannelNumber)
+ {
+ m_clientChannelNumber = clientChannelNumber;
+ m_bNeedsSave = true;
+ }
+}
+
+void CPVRChannelGroupMember::SetClientPriority(int iClientPriority)
+{
+ if (m_iClientPriority != iClientPriority)
+ {
+ m_iClientPriority = iClientPriority;
+ // Note: do not set m_bNeedsSave here as priority is not stored in database
+ }
+}
+
+void CPVRChannelGroupMember::SetOrder(int iOrder)
+{
+ if (m_iOrder != iOrder)
+ {
+ m_iOrder = iOrder;
+ m_bNeedsSave = true;
+ }
+}
+
+bool CPVRChannelGroupMember::QueueDelete()
+{
+ const std::shared_ptr<CPVRDatabase> database = CServiceBroker::GetPVRManager().GetTVDatabase();
+ if (!database)
+ return false;
+
+ return database->QueueDeleteQuery(*this);
+}