11#include "c-api/addon_base.h"
19#include "tools/StringUtils.h"
62using HardwareContext = ADDON_HARDWARE_CONTEXT;
82inline char* AllocAndCopyString(
const char* source)
86 const size_t len{strlen(source) + 1};
87 char* target =
new char[len];
88 memcpy(target, source, len);
97inline void FreeString(
const char* str)
105inline void ReallocAndCopyString(
const char** stringToRealloc,
const char* stringToCopy)
107 FreeString(*stringToRealloc);
108 *stringToRealloc = AllocAndCopyString(stringToCopy);
114template<
typename CPP_CLASS,
typename C_STRUCT>
115inline static C_STRUCT** AllocAndCopyPointerArray(std::vector<CPP_CLASS>& sourceVector,
116 unsigned int& targetArraySize)
118 targetArraySize =
static_cast<unsigned int>(sourceVector.size());
119 if (targetArraySize > 0)
121 C_STRUCT** targetArray =
new C_STRUCT* [targetArraySize] {};
124 for (
auto& entry : sourceVector)
127 C_STRUCT** arrayElem{&targetArray[i]};
128 *arrayElem = entry.release();
139template<
typename CPP_CLASS,
typename C_STRUCT>
140inline static void FreeDynamicPointerArray(C_STRUCT** targetArray,
unsigned int targetArraySize)
142 for (
unsigned int i = 0; i < targetArraySize; ++i)
144 C_STRUCT** arrayElem{&targetArray[i]};
145 CPP_CLASS::FreeResources(*arrayElem);
148 delete[] targetArray;
154template<
typename CPP_CLASS,
typename C_STRUCT>
155inline static void FreeStaticPointerArray(C_STRUCT** targetArray,
unsigned int targetArraySize)
157 for (
unsigned int i = 0; i < targetArraySize; ++i)
159 C_STRUCT** arrayElem{&targetArray[i]};
162 delete[] targetArray;
205template<
class CPP_CLASS,
typename C_STRUCT>
209 CStructHdl() : m_cStructure(
new C_STRUCT()), m_owner(
true) {}
212 : m_cStructure(
new C_STRUCT(*cppClass.m_cStructure)),
217 explicit CStructHdl(
const C_STRUCT* cStructure)
218 : m_cStructure(
new C_STRUCT(*cStructure)),
223 explicit CStructHdl(C_STRUCT* cStructure) : m_cStructure(cStructure) { assert(cStructure); }
230 if (m_cStructure && !m_owner)
232 memcpy(m_cStructure, right.m_cStructure,
sizeof(C_STRUCT));
239 m_cStructure =
new C_STRUCT(*right.m_cStructure);
244 const CStructHdl& operator=(
const C_STRUCT& right)
248 if (m_cStructure == &right)
251 if (m_cStructure && !m_owner)
253 memcpy(m_cStructure, &right,
sizeof(C_STRUCT));
260 m_cStructure =
new C_STRUCT(*right);
271 operator C_STRUCT*() {
return m_cStructure; }
272 operator const C_STRUCT*()
const {
return m_cStructure; }
274 const C_STRUCT* GetCStructure()
const {
return m_cStructure; }
283 C_STRUCT* m_cStructure =
nullptr;
286 bool m_owner =
false;
289template<
class CPP_CLASS,
typename C_STRUCT>
295 memset(m_cStructure, 0,
sizeof(C_STRUCT));
299 : m_cStructure(
new C_STRUCT(*cppClass.m_cStructure)),
302 CPP_CLASS::AllocResources(cppClass.m_cStructure, m_cStructure);
306 : m_cStructure(
new C_STRUCT(*cStructure)),
309 CPP_CLASS::AllocResources(cStructure, m_cStructure);
322 CPP_CLASS::FreeResources(m_cStructure);
323 if (m_cStructure && !m_owner)
325 memcpy(m_cStructure, right.m_cStructure,
sizeof(C_STRUCT));
332 m_cStructure =
new C_STRUCT(*right.m_cStructure);
334 CPP_CLASS::AllocResources(right.m_cStructure, m_cStructure);
342 if (m_cStructure == &right)
345 CPP_CLASS::FreeResources(m_cStructure);
346 if (m_cStructure && !m_owner)
348 memcpy(m_cStructure, &right,
sizeof(C_STRUCT));
355 m_cStructure =
new C_STRUCT(*right);
357 CPP_CLASS::AllocResources(&right, m_cStructure);
365 CPP_CLASS::FreeResources(m_cStructure);
370 operator C_STRUCT*() {
return m_cStructure; }
371 operator const C_STRUCT*()
const {
return m_cStructure; }
373 const C_STRUCT* GetCStructure()
const {
return m_cStructure; }
382 C_STRUCT* m_cStructure =
nullptr;
385 bool m_owner =
false;
444 explicit CSettingValue(
const std::string& settingValue) : str(settingValue) {}
446 bool empty()
const {
return str.empty(); }
468 int GetInt()
const {
return std::atoi(str.c_str()); }
471 unsigned int GetUInt()
const {
return std::atoi(str.c_str()); }
474 bool GetBoolean()
const {
return std::atoi(str.c_str()) > 0; }
477 float GetFloat()
const {
return static_cast<float>(std::atof(str.c_str())); }
481 template<
typename enumType>
484 return static_cast<enumType
>(GetInt());
490 const std::string str;
524 KODI_ADDON_INSTANCE_TYPE
GetType()
const {
return m_instance->info->type; }
530 bool IsType(KODI_ADDON_INSTANCE_TYPE type)
const {
return m_instance->info->type == type; }
533 uint32_t
GetNumber()
const {
return m_instance->info->number; }
536 std::string
GetID()
const {
return m_instance->info->id; }
551 IInstanceInfo() =
delete;
552 IInstanceInfo(
const IInstanceInfo&) =
delete;
571 m_instance->functions->instance_setting_change_string = INSTANCE_instance_setting_change_string;
572 m_instance->functions->instance_setting_change_integer =
573 INSTANCE_instance_setting_change_integer;
574 m_instance->functions->instance_setting_change_boolean =
575 INSTANCE_instance_setting_change_boolean;
576 m_instance->functions->instance_setting_change_float = INSTANCE_instance_setting_change_float;
581 KODI_ADDON_INSTANCE_HDL& hdl)
583 return ADDON_STATUS_NOT_IMPLEMENTED;
586 std::string GetInstanceAPIVersion()
const {
return m_instance->info->version; }
594 int version[3] = {0, 0, 0};
595 std::sscanf(GetInstanceAPIVersion().c_str(),
"%d.%d.%d", &version[0], &version[1], &version[2]);
596 const int wanted[3] = {major, minor, patch};
597 for (
unsigned int i = 0; i < 3; ++i)
599 if (version[i] != wanted[i])
600 return version[i] > wanted[i];
605 virtual ADDON_STATUS SetInstanceSetting(
const std::string& settingName,
611 inline bool IsInstanceSettingUsingDefault(
const std::string& settingName)
613 return m_instance->info->functions->is_instance_setting_using_default(m_instance->info->kodi,
614 settingName.c_str());
617 inline std::string GetInstanceUserPath(
const std::string& append =
"")
619 using namespace kodi::addon;
621 char* str = m_instance->info->functions->get_instance_user_path(
622 CPrivateBase::m_interface->toKodi->kodiBase);
623 std::string ret = str;
624 CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase,
628 if (append.at(0) !=
'\\' && append.at(0) !=
'/')
639 inline bool CheckInstanceSettingString(
const std::string& settingName, std::string& settingValue)
641 char* buffer =
nullptr;
642 bool ret = m_instance->info->functions->get_instance_setting_string(
643 m_instance->info->kodi, settingName.c_str(), &buffer);
647 settingValue = buffer;
653 inline std::string GetInstanceSettingString(
const std::string& settingName,
654 const std::string& defaultValue =
"")
656 std::string settingValue = defaultValue;
657 CheckInstanceSettingString(settingName, settingValue);
661 inline void SetInstanceSettingString(
const std::string& settingName,
662 const std::string& settingValue)
664 m_instance->info->functions->set_instance_setting_string(
665 m_instance->info->kodi, settingName.c_str(), settingValue.c_str());
668 inline bool CheckInstanceSettingInt(
const std::string& settingName,
int& settingValue)
671 return cb->get_instance_setting_int(m_instance->info->kodi, settingName.c_str(), &settingValue);
674 inline int GetInstanceSettingInt(
const std::string& settingName,
int defaultValue = 0)
676 int settingValue = defaultValue;
677 CheckInstanceSettingInt(settingName, settingValue);
681 inline void SetInstanceSettingInt(
const std::string& settingName,
int settingValue)
683 m_instance->info->functions->set_instance_setting_int(m_instance->info->kodi,
684 settingName.c_str(), settingValue);
687 inline bool CheckInstanceSettingBoolean(
const std::string& settingName,
bool& settingValue)
689 return m_instance->info->functions->get_instance_setting_bool(
690 m_instance->info->kodi, settingName.c_str(), &settingValue);
693 inline bool GetInstanceSettingBoolean(
const std::string& settingName,
bool defaultValue =
false)
695 bool settingValue = defaultValue;
696 CheckInstanceSettingBoolean(settingName, settingValue);
700 inline void SetInstanceSettingBoolean(
const std::string& settingName,
bool settingValue)
702 m_instance->info->functions->set_instance_setting_bool(m_instance->info->kodi,
703 settingName.c_str(), settingValue);
706 inline bool CheckInstanceSettingFloat(
const std::string& settingName,
float& settingValue)
708 return m_instance->info->functions->get_instance_setting_float(
709 m_instance->info->kodi, settingName.c_str(), &settingValue);
712 inline float GetInstanceSettingFloat(
const std::string& settingName,
float defaultValue = 0.0f)
714 float settingValue = defaultValue;
715 CheckInstanceSettingFloat(settingName, settingValue);
719 inline void SetInstanceSettingFloat(
const std::string& settingName,
float settingValue)
721 m_instance->info->functions->set_instance_setting_float(m_instance->info->kodi,
722 settingName.c_str(), settingValue);
725 template<
typename enumType>
726 inline bool CheckInstanceSettingEnum(
const std::string& settingName, enumType& settingValue)
728 using namespace kodi::addon;
730 int settingValueInt =
static_cast<int>(settingValue);
731 bool ret = m_instance->info->functions->get_instance_setting_int(
732 m_instance->info->kodi, settingName.c_str(), &settingValueInt);
734 settingValue =
static_cast<enumType
>(settingValueInt);
738 template<
typename enumType>
739 inline enumType GetInstanceSettingEnum(
const std::string& settingName,
740 enumType defaultValue =
static_cast<enumType
>(0))
742 enumType settingValue = defaultValue;
743 CheckInstanceSettingEnum(settingName, settingValue);
747 template<
typename enumType>
748 inline void SetInstanceSettingEnum(
const std::string& settingName, enumType settingValue)
750 m_instance->info->functions->set_instance_setting_int(
751 m_instance->info->kodi, settingName.c_str(),
static_cast<int>(settingValue));
755 static inline ADDON_STATUS INSTANCE_instance_setting_change_string(
756 const KODI_ADDON_INSTANCE_HDL hdl,
const char* name,
const char* value)
761 static inline ADDON_STATUS INSTANCE_instance_setting_change_boolean(
762 const KODI_ADDON_INSTANCE_HDL hdl,
const char* name,
bool value)
764 return static_cast<IAddonInstance*
>(hdl)->SetInstanceSetting(name,
768 static inline ADDON_STATUS INSTANCE_instance_setting_change_integer(
769 const KODI_ADDON_INSTANCE_HDL hdl,
const char* name,
int value)
775 static inline ADDON_STATUS INSTANCE_instance_setting_change_float(
776 const KODI_ADDON_INSTANCE_HDL hdl,
const char* name,
float value)
802 CPrivateBase::m_interface->toAddon->create =
nullptr;
803 CPrivateBase::m_interface->toAddon->destroy = ADDONBASE_Destroy;
804 CPrivateBase::m_interface->toAddon->create_instance = ADDONBASE_CreateInstance;
805 CPrivateBase::m_interface->toAddon->destroy_instance = ADDONBASE_DestroyInstance;
806 CPrivateBase::m_interface->toAddon->setting_change_string = ADDONBASE_setting_change_string;
807 CPrivateBase::m_interface->toAddon->setting_change_boolean = ADDONBASE_setting_change_boolean;
808 CPrivateBase::m_interface->toAddon->setting_change_integer = ADDONBASE_setting_change_integer;
809 CPrivateBase::m_interface->toAddon->setting_change_float = ADDONBASE_setting_change_float;
944 KODI_ADDON_INSTANCE_HDL& hdl)
946 return ADDON_STATUS_NOT_IMPLEMENTED;
967 std::shared_ptr<kodi::gui::IRenderHelper> m_renderHelper;
970 static inline void ADDONBASE_Destroy(
const KODI_ADDON_HDL hdl)
975 static inline ADDON_STATUS ADDONBASE_CreateInstance(
const KODI_ADDON_HDL hdl,
987 if (CPrivateBase::m_interface->firstKodiInstance == instance &&
988 CPrivateBase::m_interface->globalSingleInstance &&
989 static_cast<IAddonInstance*
>(CPrivateBase::m_interface->globalSingleInstance)
990 ->m_instance->info->type == instance->info->type)
995 instance->hdl = CPrivateBase::m_interface->globalSingleInstance;
1007 if (instance->info->parent !=
nullptr)
1009 ->CreateInstance(instanceInfo, instance->hdl);
1012 if (status == ADDON_STATUS_NOT_IMPLEMENTED)
1018 if (instance->hdl ==
nullptr)
1022 CPrivateBase::m_interface->toKodi->addon_log_msg(
1024 "kodi::addon::CAddonBase CreateInstance returned an "
1025 "empty instance pointer, but reported OK!");
1034 if (
static_cast<IAddonInstance*
>(instance->hdl)->m_instance->info->type != instance->info->type)
1036 CPrivateBase::m_interface->toKodi->addon_log_msg(
1038 "kodi::addon::CAddonBase CreateInstance difference between given and returned");
1040 instance->hdl =
nullptr;
1047 static inline void ADDONBASE_DestroyInstance(
const KODI_ADDON_HDL hdl,
1052 if (CPrivateBase::m_interface->globalSingleInstance ==
nullptr && instance->hdl != base)
1060 static inline ADDON_STATUS ADDONBASE_setting_change_string(
const KODI_ADDON_HDL hdl,
1067 static inline ADDON_STATUS ADDONBASE_setting_change_boolean(
const KODI_ADDON_HDL hdl,
1074 static inline ADDON_STATUS ADDONBASE_setting_change_integer(
const KODI_ADDON_HDL hdl,
1081 static inline ADDON_STATUS ADDONBASE_setting_change_float(
const KODI_ADDON_HDL hdl,
1096inline std::string ATTR_DLL_LOCAL
GetAddonPath(
const std::string& append =
"")
1098 using namespace kodi::addon;
1100 char* str = CPrivateBase::m_interface->toKodi->kodi_addon->get_addon_path(
1101 CPrivateBase::m_interface->toKodi->kodiBase);
1102 std::string ret = str;
1103 CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, str);
1104 if (!append.empty())
1106 if (append.at(0) !=
'\\' && append.at(0) !=
'/')
1107#ifdef TARGET_WINDOWS
1133inline std::string ATTR_DLL_LOCAL
GetLibPath(
const std::string& append =
"")
1135 using namespace kodi::addon;
1137 char* str = CPrivateBase::m_interface->toKodi->kodi_addon->get_lib_path(
1138 CPrivateBase::m_interface->toKodi->kodiBase);
1139 std::string ret = str;
1140 CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, str);
1141 if (!append.empty())
1143 if (append.at(0) !=
'\\' && append.at(0) !=
'/')
1144#ifdef TARGET_WINDOWS
1165inline std::string ATTR_DLL_LOCAL
GetUserPath(
const std::string& append =
"")
1167 using namespace kodi::addon;
1169 char* str = CPrivateBase::m_interface->toKodi->kodi_addon->get_user_path(
1170 CPrivateBase::m_interface->toKodi->kodiBase);
1171 std::string ret = str;
1172 CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, str);
1173 if (!append.empty())
1175 if (append.at(0) !=
'\\' && append.at(0) !=
'/')
1176#ifdef TARGET_WINDOWS
1198inline std::string ATTR_DLL_LOCAL
GetTempPath(
const std::string& append =
"")
1200 using namespace kodi::addon;
1202 char* str = CPrivateBase::m_interface->toKodi->kodi_addon->get_temp_path(
1203 CPrivateBase::m_interface->toKodi->kodiBase);
1204 std::string ret = str;
1205 CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, str);
1206 if (!append.empty())
1208 if (append.at(0) !=
'\\' && append.at(0) !=
'/')
1209#ifdef TARGET_WINDOWS
1248 const std::string& defaultStr =
"")
1250 using namespace kodi::addon;
1252 std::string retString = defaultStr;
1253 char* strMsg = CPrivateBase::m_interface->toKodi->kodi_addon->get_localized_string(
1254 CPrivateBase::m_interface->toKodi->kodiBase, labelId);
1255 if (strMsg !=
nullptr)
1257 if (std::strlen(strMsg))
1259 CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase,
1298 using namespace kodi::addon;
1299 return CPrivateBase::m_interface->toKodi->kodi_addon->open_settings_dialog(
1300 CPrivateBase::m_interface->toKodi->kodiBase);
1314 using namespace kodi::addon;
1315 return CPrivateBase::m_interface->toKodi->kodi_addon->is_setting_using_default(
1316 CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str());
1344 std::string& settingValue)
1346 using namespace kodi::addon;
1348 char* buffer =
nullptr;
1349 bool ret = CPrivateBase::m_interface->toKodi->kodi_addon->get_setting_string(
1350 CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), &buffer);
1354 settingValue = buffer;
1355 CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase,
1382 const std::string& defaultValue =
"")
1384 std::string settingValue = defaultValue;
1386 return settingValue;
1410 const std::string& settingValue)
1412 using namespace kodi::addon;
1414 CPrivateBase::m_interface->toKodi->kodi_addon->set_setting_string(
1415 CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), settingValue.c_str());
1442inline bool ATTR_DLL_LOCAL
CheckSettingInt(
const std::string& settingName,
int& settingValue)
1444 using namespace kodi::addon;
1446 return CPrivateBase::m_interface->toKodi->kodi_addon->get_setting_int(
1447 CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), &settingValue);
1470inline int ATTR_DLL_LOCAL
GetSettingInt(
const std::string& settingName,
int defaultValue = 0)
1472 int settingValue = defaultValue;
1474 return settingValue;
1497inline void ATTR_DLL_LOCAL
SetSettingInt(
const std::string& settingName,
int settingValue)
1499 using namespace kodi::addon;
1501 CPrivateBase::m_interface->toKodi->kodi_addon->set_setting_int(
1502 CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), settingValue);
1531 using namespace kodi::addon;
1533 return CPrivateBase::m_interface->toKodi->kodi_addon->get_setting_bool(
1534 CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), &settingValue);
1558 bool defaultValue =
false)
1560 bool settingValue = defaultValue;
1562 return settingValue;
1587 using namespace kodi::addon;
1589 CPrivateBase::m_interface->toKodi->kodi_addon->set_setting_bool(
1590 CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), settingValue);
1619 using namespace kodi::addon;
1621 return CPrivateBase::m_interface->toKodi->kodi_addon->get_setting_float(
1622 CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), &settingValue);
1646 float defaultValue = 0.0f)
1648 float settingValue = defaultValue;
1650 return settingValue;
1673inline void ATTR_DLL_LOCAL
SetSettingFloat(
const std::string& settingName,
float settingValue)
1675 using namespace kodi::addon;
1677 CPrivateBase::m_interface->toKodi->kodi_addon->set_setting_float(
1678 CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), settingValue);
1713template<
typename enumType>
1714inline bool ATTR_DLL_LOCAL
CheckSettingEnum(
const std::string& settingName, enumType& settingValue)
1716 using namespace kodi::addon;
1718 int settingValueInt =
static_cast<int>(settingValue);
1719 bool ret = CPrivateBase::m_interface->toKodi->kodi_addon->get_setting_int(
1720 CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), &settingValueInt);
1722 settingValue =
static_cast<enumType
>(settingValueInt);
1755template<
typename enumType>
1757 enumType defaultValue =
static_cast<enumType
>(0))
1759 enumType settingValue = defaultValue;
1761 return settingValue;
1793template<
typename enumType>
1794inline void ATTR_DLL_LOCAL
SetSettingEnum(
const std::string& settingName, enumType settingValue)
1796 using namespace kodi::addon;
1798 CPrivateBase::m_interface->toKodi->kodi_addon->set_setting_int(
1799 CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(),
1800 static_cast<int>(settingValue));
1834 using namespace kodi::addon;
1838 std::string strReturn;
1839 char* strMsg = toKodi->kodi_addon->get_addon_info(toKodi->kodiBase,
id.c_str());
1840 if (strMsg !=
nullptr)
1842 if (std::strlen(strMsg))
1844 toKodi->free_string(toKodi->kodiBase, strMsg);
1868inline void*
GetInterface(
const std::string& name,
const std::string& version)
1870 using namespace kodi::addon;
1874 return toKodi->kodi_addon->get_interface(toKodi->kodiBase, name.c_str(), version.c_str());
1890 using namespace kodi::addon;
1892 char* str = CPrivateBase::m_interface->toKodi->kodi_addon->get_type_version(
1893 CPrivateBase::m_interface->toKodi->kodiBase, type);
1894 std::string ret = str;
1895 CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, str);
1914 return "Lost Connection";
1916 return "Need Restart";
1918 return "Need Settings";
1920 return "Unknown error";
1922 return "Permanent failure";
1923 case ADDON_STATUS_NOT_IMPLEMENTED:
1924 return "Not implemented";
1957inline void ATTR_DLL_LOCAL
Log(
const ADDON_LOG loglevel,
const char* format, ...)
1959 using namespace kodi::addon;
1962 va_start(args, format);
1965 CPrivateBase::m_interface->toKodi->addon_log_msg(CPrivateBase::m_interface->toKodi->kodiBase,
1966 loglevel, str.c_str());
2066#define ADDONCREATOR(AddonClass) \
2067 extern "C" ATTR_DLL_EXPORT ADDON_STATUS ADDON_Create(KODI_HANDLE addonInterface) \
2069 using namespace kodi::addon; \
2070 CPrivateBase::m_interface = static_cast<AddonGlobalInterface*>(addonInterface); \
2071 CPrivateBase::m_interface->addonBase = new AddonClass; \
2072 return static_cast<CAddonBase*>(CPrivateBase::m_interface->addonBase)->Create(); \
2074 extern "C" ATTR_DLL_EXPORT const char* ADDON_GetTypeVersion(int type) \
2076 return kodi::addon::GetTypeVersion(type); \
2078 extern "C" ATTR_DLL_EXPORT const char* ADDON_GetTypeMinVersion(int type) \
2080 return kodi::addon::GetTypeMinVersion(type); \
2082 AddonGlobalInterface* kodi::addon::CPrivateBase::m_interface = nullptr;
Definition AddonBase.h:794
Definition AddonBase.h:442
Definition AddonBase.h:207
Definition AddonBase.h:291
Definition AddonBase.h:567
bool IsInstanceAPIVersionAtLeast(int major, int minor, int patch) const
Whether Kodi's API for this instance is at least the given version.
Definition AddonBase.h:592
Definition AddonBase.h:503
ADDON_LOG
Definition addon_base.h:183
@ ADDON_LOG_FATAL
4 : To notify fatal unrecoverable errors, which can may also indicate upcoming crashes.
Definition addon_base.h:198
ADDON_STATUS
Definition addon_base.h:139
@ ADDON_STATUS_NEED_SETTINGS
Necessary settings are not yet set.
Definition addon_base.h:150
@ ADDON_STATUS_LOST_CONNECTION
A needed connection was lost.
Definition addon_base.h:144
@ ADDON_STATUS_OK
For everything OK and no error.
Definition addon_base.h:141
@ ADDON_STATUS_NEED_RESTART
Addon needs a restart inside Kodi.
Definition addon_base.h:147
@ ADDON_STATUS_UNKNOWN
Unknown and incomprehensible error.
Definition addon_base.h:153
@ ADDON_STATUS_PERMANENT_FAILURE
Permanent failure, like failing to resolve methods.
Definition addon_base.h:156
unsigned int GetUInt() const
To get settings value as unsigned integer.
Definition AddonBase.h:471
int GetInt() const
To get settings value as integer.
Definition AddonBase.h:468
bool GetBoolean() const
To get settings value as boolean.
Definition AddonBase.h:474
const std::string & GetString() const
To get settings value as string.
Definition AddonBase.h:465
float GetFloat() const
To get settings value as floating point.
Definition AddonBase.h:477
enumType GetEnum() const
To get settings value as enum.
Definition AddonBase.h:482
uint32_t GetNumber() const
Get optional identification number (usage relate to addon type).
Definition AddonBase.h:533
std::string GetID() const
Get optional identification string (usage relate to addon type).
Definition AddonBase.h:536
KODI_ADDON_INSTANCE_TYPE GetType() const
To get settings value as string.
Definition AddonBase.h:524
bool FirstInstance() const
Check this is first created instance by Kodi.
Definition AddonBase.h:542
bool IsType(KODI_ADDON_INSTANCE_TYPE type) const
Check asked type used on this class.
Definition AddonBase.h:530
std::string GetAPIVersion() const
Get API version from Kodi about instance.
Definition AddonBase.h:539
virtual ADDON_STATUS SetSetting(const std::string &settingName, const kodi::addon::CSettingValue &settingValue)
To inform addon about changed settings values.
Definition AddonBase.h:889
virtual ADDON_STATUS CreateInstance(const kodi::addon::IInstanceInfo &instance, KODI_ADDON_INSTANCE_HDL &hdl)
Instance created.
Definition AddonBase.h:943
virtual ~CAddonBase()=default
Destructor.
virtual ADDON_STATUS Create()
Main addon creation function.
Definition AddonBase.h:836
CAddonBase()
Addon base class constructor.
Definition AddonBase.h:800
virtual void DestroyInstance(const IInstanceInfo &instance, const KODI_ADDON_INSTANCE_HDL hdl)
Instance destroy.
Definition AddonBase.h:963
std::string ATTR_DLL_LOCAL GetLocalizedString(uint32_t labelId, const std::string &defaultStr="")
Returns an addon's localized 'unicode string'.
Definition AddonBase.h:1247
std::string ATTR_DLL_LOCAL GetTempPath(const std::string &append="")
To get a temporary path for the addon.
Definition AddonBase.h:1198
std::string ATTR_DLL_LOCAL TranslateAddonStatus(ADDON_STATUS status)
Get to related ADDON_STATUS a human readable text.
Definition AddonBase.h:1907
std::string ATTR_DLL_LOCAL GetLibPath(const std::string &append="")
This function gives OS associated executable binary path of the addon.
Definition AddonBase.h:1133
void * GetInterface(const std::string &name, const std::string &version)
Returns a function table to a named interface.
Definition AddonBase.h:1868
std::string ATTR_DLL_LOCAL GetUserPath(const std::string &append="")
To get the user-related folder of the addon.
Definition AddonBase.h:1165
std::string ATTR_DLL_LOCAL GetKodiTypeVersion(int type)
To get used version inside Kodi itself about asked type.
Definition AddonBase.h:1888
std::string ATTR_DLL_LOCAL GetAddonInfo(const std::string &id)
Returns the value of an addon property as a string.
Definition AddonBase.h:1832
std::string ATTR_DLL_LOCAL GetAddonPath(const std::string &append="")
To get the addon system installation folder.
Definition AddonBase.h:1096
void ATTR_DLL_LOCAL SetSettingInt(const std::string &settingName, int settingValue)
Set integer setting of addon.
Definition AddonBase.h:1497
bool ATTR_DLL_LOCAL CheckSettingFloat(const std::string &settingName, float &settingValue)
Check and get a floating point setting value.
Definition AddonBase.h:1617
bool ATTR_DLL_LOCAL CheckSettingInt(const std::string &settingName, int &settingValue)
Check and get a integer setting value.
Definition AddonBase.h:1442
void ATTR_DLL_LOCAL SetSettingString(const std::string &settingName, const std::string &settingValue)
Set string setting of addon.
Definition AddonBase.h:1409
bool ATTR_DLL_LOCAL OpenSettings()
Opens this Add-Ons settings dialog.
Definition AddonBase.h:1296
void ATTR_DLL_LOCAL SetSettingFloat(const std::string &settingName, float settingValue)
Set floating point setting of addon.
Definition AddonBase.h:1673
bool ATTR_DLL_LOCAL IsSettingUsingDefault(const std::string &settingName)
Check the given setting name is set to default value.
Definition AddonBase.h:1312
std::string ATTR_DLL_LOCAL GetSettingString(const std::string &settingName, const std::string &defaultValue="")
Get string setting value.
Definition AddonBase.h:1381
bool ATTR_DLL_LOCAL CheckSettingEnum(const std::string &settingName, enumType &settingValue)
Check and get a enum setting value.
Definition AddonBase.h:1714
bool ATTR_DLL_LOCAL CheckSettingBoolean(const std::string &settingName, bool &settingValue)
Check and get a boolean setting value.
Definition AddonBase.h:1529
void ATTR_DLL_LOCAL SetSettingEnum(const std::string &settingName, enumType settingValue)
Set enum setting of addon.
Definition AddonBase.h:1794
enumType ATTR_DLL_LOCAL GetSettingEnum(const std::string &settingName, enumType defaultValue=static_cast< enumType >(0))
Get enum setting value.
Definition AddonBase.h:1756
float ATTR_DLL_LOCAL GetSettingFloat(const std::string &settingName, float defaultValue=0.0f)
Get floating point setting value.
Definition AddonBase.h:1645
void ATTR_DLL_LOCAL SetSettingBoolean(const std::string &settingName, bool settingValue)
Set boolean setting of addon.
Definition AddonBase.h:1585
bool ATTR_DLL_LOCAL GetSettingBoolean(const std::string &settingName, bool defaultValue=false)
Get boolean setting value.
Definition AddonBase.h:1557
bool ATTR_DLL_LOCAL CheckSettingString(const std::string &settingName, std::string &settingValue)
Check and get a string setting value.
Definition AddonBase.h:1343
int ATTR_DLL_LOCAL GetSettingInt(const std::string &settingName, int defaultValue=0)
Get integer setting value.
Definition AddonBase.h:1470
void ATTR_DLL_LOCAL Log(const ADDON_LOG loglevel, const char *format,...)
Add a message to Kodi's log.
Definition AddonBase.h:1957
Main structure passed from kodi to addon with basic information needed to create add-on.
Definition addon_base.h:381
Callback function tables from addon to Kodi Set complete from Kodi!
Definition addon_base.h:328
Definition addon_base.h:221
Definition addon_base.h:269
Internal used structure to have stored C API data above and available for everything below.
Definition AddonBase.h:74