diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
commit | c04dcc2e7d834218ef2d4194331e383402495ae1 (patch) | |
tree | 7333e38d10d75386e60f336b80c2443c1166031d /xbmc/addons/binary-addons/AddonInstanceHandler.h | |
parent | Initial commit. (diff) | |
download | kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip |
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'xbmc/addons/binary-addons/AddonInstanceHandler.h')
-rw-r--r-- | xbmc/addons/binary-addons/AddonInstanceHandler.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/xbmc/addons/binary-addons/AddonInstanceHandler.h b/xbmc/addons/binary-addons/AddonInstanceHandler.h new file mode 100644 index 0000000..27ba95b --- /dev/null +++ b/xbmc/addons/binary-addons/AddonInstanceHandler.h @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2005-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/IAddon.h" +#include "addons/kodi-dev-kit/include/kodi/c-api/addon_base.h" +#include "addons/kodi-dev-kit/include/kodi/versions.h" +#include "threads/CriticalSection.h" + +#include <memory> +#include <string> + +class CSetting; + +namespace ADDON +{ + +class CAddonDll; +using AddonDllPtr = std::shared_ptr<CAddonDll>; + +class CAddonInfo; +using AddonInfoPtr = std::shared_ptr<CAddonInfo>; + +class CBinaryAddonBase; +using BinaryAddonBasePtr = std::shared_ptr<CBinaryAddonBase>; + +class IAddonInstanceHandler +{ +public: + /** + * @brief Class constructor for handling add-on instance processes, allowing + * an add-on to handle multiple work simultaneously and independently. + * + * @param[in] type The associated add-on type which is processed in the running + * instance. + * @param[in] addonInfo Class for querying available add-on information (e.g. + * content declared in addon.xml). + * @param[in] parentInstance *[opt]* Above running add-on instance which starts this + * instance. Used to have the associated class for + * work to open in the add-on.\n\n + * **Currently used values:** + * | Parent | Target | Description + * |--------|--------|------------- + * | @ref kodi::addon::CInstanceInputStream | @ref kodi::addon::CInstanceVideoCodec | In order to be able to access the overlying input stream instance in the video codec created by Kodi on the add-on. + * @param[in] uniqueWorkID *[opt]* Identification value intended to pass any special + * values to the instance to be opened. + * If not used, the IAddonInstanceHandler class pointer + * is used as a string.\n\n + * **Currently used values:** + * | Add-on instance type | Description + * |----------------------|--------------------- + * | @ref kodi::addon::CInstanceInputStream "Inputstream" | To transfer special values to inputstream using the property @ref STREAM_PROPERTY_INPUTSTREAM_INSTANCE_ID from external space, for example PVR add-on which also supports inputstream can exchange special values with it, e.g. select the necessary add-on processing class, since it is not known at the start what is being executed ( live TV, radio, recordings...) and add-on may use different classes. + * | All other | The used class pointer of Kodi's @ref IAddonInstanceHandler is used as a value to have an individually different value. + */ + IAddonInstanceHandler(ADDON_TYPE type, + const AddonInfoPtr& addonInfo, + AddonInstanceId instanceId = ADDON_INSTANCE_ID_UNUSED, + KODI_HANDLE parentInstance = nullptr, + const std::string& uniqueWorkID = ""); + virtual ~IAddonInstanceHandler(); + + ADDON_TYPE UsedType() const { return m_type; } + AddonInstanceId InstanceId() const { return m_instanceId; } + const std::string& UniqueWorkID() { return m_uniqueWorkID; } + + std::string ID() const; + std::string Name() const; + std::string Author() const; + std::string Icon() const; + std::string Path() const; + std::string Profile() const; + CAddonVersion Version() const; + + ADDON_STATUS CreateInstance(); + void DestroyInstance(); + const AddonDllPtr& Addon() const { return m_addon; } + AddonInfoPtr GetAddonInfo() const { return m_addonInfo; } + + virtual void OnPreInstall() {} + virtual void OnPostInstall(bool update, bool modal) {} + virtual void OnPreUnInstall() {} + virtual void OnPostUnInstall() {} + +protected: + KODI_ADDON_INSTANCE_INFO m_info{}; + KODI_ADDON_INSTANCE_STRUCT m_ifc{}; + +private: + std::shared_ptr<CSetting> GetSetting(const std::string& setting); + + static char* get_instance_user_path(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl); + static bool is_instance_setting_using_default(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id); + static bool get_instance_setting_bool(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + bool* value); + static bool get_instance_setting_int(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + int* value); + static bool get_instance_setting_float(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + float* value); + static bool get_instance_setting_string(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + char** value); + static bool set_instance_setting_bool(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + bool value); + static bool set_instance_setting_int(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + int value); + static bool set_instance_setting_float(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + float value); + static bool set_instance_setting_string(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + const char* value); + + const ADDON_TYPE m_type; + const AddonInstanceId m_instanceId; + std::string m_uniqueWorkID; + KODI_HANDLE m_parentInstance; + AddonInfoPtr m_addonInfo; + BinaryAddonBasePtr m_addonBase; + AddonDllPtr m_addon; + static CCriticalSection m_cdSec; +}; + +} /* namespace ADDON */ |