summaryrefslogtreecommitdiffstats
path: root/xbmc/pvr/providers/PVRProvider.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/pvr/providers/PVRProvider.h')
-rw-r--r--xbmc/pvr/providers/PVRProvider.h245
1 files changed, 245 insertions, 0 deletions
diff --git a/xbmc/pvr/providers/PVRProvider.h b/xbmc/pvr/providers/PVRProvider.h
new file mode 100644
index 0000000..1e8d835
--- /dev/null
+++ b/xbmc/pvr/providers/PVRProvider.h
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2012-2018 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.
+ */
+
+#pragma once
+
+#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/pvr/pvr_providers.h"
+#include "pvr/PVRCachedImage.h"
+#include "threads/CriticalSection.h"
+#include "utils/ISerializable.h"
+
+#include <memory>
+#include <string>
+#include <vector>
+
+namespace PVR
+{
+
+enum class ProviderUpdateMode
+{
+ BY_CLIENT,
+ BY_DATABASE
+};
+
+static constexpr int PVR_PROVIDER_ADDON_UID = -1;
+static constexpr int PVR_PROVIDER_INVALID_DB_ID = -1;
+
+class CPVRProvider final : public ISerializable
+{
+public:
+ static const std::string IMAGE_OWNER_PATTERN;
+
+ CPVRProvider(int iUniqueId, int iClientId);
+ CPVRProvider(const PVR_PROVIDER& provider, int iClientId);
+ CPVRProvider(int iClientId,
+ const std::string& addonProviderName,
+ const std::string& addonIconPath,
+ const std::string& addonThumbPath);
+
+ bool operator==(const CPVRProvider& right) const;
+ bool operator!=(const CPVRProvider& right) const;
+
+ void Serialize(CVariant& value) const override;
+
+ /*!
+ * @brief The database id of this provider
+ *
+ * A unique identifier for this provider.
+ * It can be used to find the same provider on this clients backend
+ *
+ * @return The database id of this provider
+ */
+ int GetDatabaseId() const;
+
+ /*!
+ * @brief Set the database id of this provider
+ * @param iDatabaseId The new ID.
+ * @return True if the something changed, false otherwise.
+ */
+ bool SetDatabaseId(int iDatabaseId);
+
+ /*!
+ * @brief A unique identifier for this provider.
+ *
+ * A unique identifier for this provider.
+ * It can be used to find the same provider on this clients backend
+ *
+ * @return The Unique ID.
+ */
+ int GetUniqueId() const;
+
+ /*!
+ * @return The identifier of the client that supplies this provider.
+ */
+ int GetClientId() const;
+
+ /*!
+ * @return The name of the provider. Can be user provided or the backend name
+ */
+ std::string GetName() const;
+
+ /*!
+ * @brief Set the name of the provider.
+ * @param name The new name of the provider.
+ * @return True if the something changed, false otherwise.
+ */
+ bool SetName(const std::string& iName);
+
+ /*!
+ * @brief Checks whether this provider has a known type
+ * @return True if this provider has a type other than unknown, false otherwise
+ */
+ bool HasType() const { return m_type != PVR_PROVIDER_TYPE_UNKNOWN; }
+
+ /*!
+ * @brief Gets the type of this provider.
+ * @return the type of this provider.
+ */
+ PVR_PROVIDER_TYPE GetType() const;
+
+ /*!
+ * @brief Sets the type of this provider.
+ * @param type the new provider type.
+ * @return True if the something changed, false otherwise.
+ */
+ bool SetType(PVR_PROVIDER_TYPE type);
+
+ /*!
+ * @brief Get the path for this provider's icon
+ * @return iconpath for this provider's icon
+ */
+ std::string GetIconPath() const;
+
+ /*!
+ * @brief Set the path for this icon
+ * @param strIconPath The new path of the icon.
+ * @return true if the icon path was updated successfully
+ */
+ bool SetIconPath(const std::string& strIconPath);
+
+ /*!
+ * @return Get the path to the icon for this provider as given by the client.
+ */
+ std::string GetClientIconPath() const;
+
+ /*!
+ * @brief Get this provider's country codes (ISO 3166).
+ * @return This provider's country codes.
+ */
+ std::vector<std::string> GetCountries() const;
+
+ /*!
+ * @brief Set the country codes for this provider
+ * @param countries The new ISO 3166 country codes for this provider.
+ * @return true if the country codes were updated successfully
+ */
+ bool SetCountries(const std::vector<std::string>& countries);
+
+ /*!
+ * @brief Get this provider's country codes (ISO 3166) as a string.
+ * @return This provider's country codes.
+ */
+ std::string GetCountriesDBString() const;
+
+ /*!
+ * @brief Set the country codes for this provider from a string
+ * @param strCountries The new ISO 3166 country codes for this provider.
+ * @return true if the country codes were updated successfully
+ */
+ bool SetCountriesFromDBString(const std::string& strCountries);
+
+ /*!
+ * @brief Get this provider's language codes (RFC 5646).
+ * @return This provider's language codes
+ */
+ std::vector<std::string> GetLanguages() const;
+
+ /*!
+ * @brief Set the language codes for this provider
+ * @param languages The new RFC 5646 language codes for this provider.
+ * @return true if the language codes were updated successfully
+ */
+ bool SetLanguages(const std::vector<std::string>& languages);
+
+ /*!
+ * @brief Get this provider's language codes (RFC 5646) as a string.
+ * @return This provider's language codes.
+ */
+ std::string GetLanguagesDBString() const;
+
+ /*!
+ * @brief Set the language codes for this provider from a string
+ * @param strLanguages The new RFC 5646 language codes for this provider.
+ * @return true if the language codes were updated successfully
+ */
+ bool SetLanguagesFromDBString(const std::string& strLanguages);
+
+ /*!
+ * @brief Get if this provider has a thumb image path.
+ * @return True if this add-on provider has a thumb image path, false otherwise.
+ */
+ bool HasThumbPath() const;
+
+ /*!
+ * @brief Get this provider's thumb image path. Note only PVR add-on providers will set this value.
+ * @return This add-on provider's thumb image path.
+ */
+ std::string GetThumbPath() const;
+
+ /*!
+ * @return Get the path to the thumb for this provider as given by the client.
+ */
+ std::string GetClientThumbPath() const;
+
+ /*!
+ * @brief Whether a provider is a default provider of a PVR Client add-on or not
+ * @return True if this provider is of a PVR Client add-on, false otherwise.
+ */
+ bool IsClientProvider() const { return m_bIsClientProvider; }
+
+ /*!
+ * @brief updates this provider from the provided entry
+ * @param fromProvider A provider containing the data that shall be merged into this provider's data.
+ * @param updateMode update as User, Client or DB
+ * @return true if the provider was updated successfully
+ */
+ bool UpdateEntry(const std::shared_ptr<CPVRProvider>& fromProvider,
+ ProviderUpdateMode updateMode);
+
+ /*!
+ * @brief Persist this provider in the local database.
+ * @param updateRecord True if an existing record should be updated, false for an insert
+ * @return True on success, false otherwise.
+ */
+ bool Persist(bool updateRecord = false);
+
+ /*!
+ * @brief Delete this provider from the local database.
+ * @return True on success, false otherwise.
+ */
+ bool DeleteFromDatabase();
+
+private:
+ CPVRProvider(const CPVRProvider& provider) = delete;
+ CPVRProvider& operator=(const CPVRProvider& orig) = delete;
+
+ int m_iDatabaseId = PVR_PROVIDER_INVALID_DB_ID; /*!< the identifier given to this provider by the TV database */
+
+ int m_iUniqueId = PVR_PROVIDER_ADDON_UID; /*!< @brief unique ID of the provider on the backend */
+ int m_iClientId; /*!< @brief ID of the backend */
+ std::string m_strName; /*!< @brief name of this provider */
+ PVR_PROVIDER_TYPE m_type = PVR_PROVIDER_TYPE_UNKNOWN; /*!< @brief service type for this provider */
+ CPVRCachedImage m_iconPath; /*!< @brief the path to the icon for this provider */
+ std::string m_strCountries; /*!< @brief the country codes for this provider (empty if undefined) */
+ std::string m_strLanguages; /*!< @brief the language codes for this provider (empty if undefined) */
+ bool m_bIsClientProvider = false; /*!< the provider is a default provider of a PVR Client add-on */
+ CPVRCachedImage m_thumbPath; /*!< a thumb image path for providers that are PVR add-ons */
+
+ mutable CCriticalSection m_critSection;
+};
+} // namespace PVR