Kodi Development 19.0
for Binary and Script based Add-Ons
AddonBase.h
1/*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
8
9#pragma once
10
11#include "c-api/addon_base.h"
12#include "versions.h"
13
14#include <assert.h> /* assert */
15#include <stdarg.h> /* va_list, va_start, va_arg, va_end */
16
17#ifdef __cplusplus
18
19#include <cstdlib>
20#include <cstring>
21#include <ctime>
22#include <memory>
23#include <stdexcept>
24#include <string>
25#include <vector>
26
27#include "tools/StringUtils.h"
28
29namespace kodi
30{
31
32namespace gui
33{
34struct IRenderHelper;
35} /* namespace gui */
36
37//==============================================================================
61using HardwareContext = ADDON_HARDWARE_CONTEXT;
63//------------------------------------------------------------------------------
64
65//==============================================================================
118class ATTRIBUTE_HIDDEN CSettingValue
119{
120public:
121 explicit CSettingValue(const void* settingValue) : m_settingValue(settingValue) {}
122
123 bool empty() const { return (m_settingValue == nullptr) ? true : false; }
124
137
140
142 std::string GetString() const { return (const char*)m_settingValue; }
143
145 int GetInt() const { return *(const int*)m_settingValue; }
146
148 unsigned int GetUInt() const { return *(const unsigned int*)m_settingValue; }
149
151 bool GetBoolean() const { return *(const bool*)m_settingValue; }
152
154 float GetFloat() const { return *(const float*)m_settingValue; }
155
158 template<typename enumType>
159 enumType GetEnum() const
160 {
161 return static_cast<enumType>(*(const int*)m_settingValue);
162 }
163
165
166private:
167 const void* m_settingValue;
168};
170//------------------------------------------------------------------------------
171
172namespace addon
173{
174
175//==============================================================================
176/*
177 * Internal class to control various instance types with general parts defined
178 * here.
179 *
180 * Mainly is this currently used to identify requested instance types.
181 *
182 * @note This class is not need to know during add-on development thats why
183 * commented with "*".
184 */
185class ATTRIBUTE_HIDDEN IAddonInstance
186{
187public:
188 explicit IAddonInstance(ADDON_TYPE type, const std::string& version)
189 : m_type(type), m_kodiVersion(version)
190 {
191 }
192 virtual ~IAddonInstance() = default;
193
194 virtual ADDON_STATUS CreateInstance(int instanceType,
195 const std::string& instanceID,
196 KODI_HANDLE instance,
197 const std::string& version,
198 KODI_HANDLE& addonInstance)
199 {
200 return ADDON_STATUS_NOT_IMPLEMENTED;
201 }
202
203 const ADDON_TYPE m_type;
204 const std::string m_kodiVersion;
205 std::string m_id;
206};
207
208/*
209 * Internally used helper class to manage processing of a "C" structure in "CPP"
210 * class.
211 *
212 * At constant, the "C" structure is copied, otherwise the given pointer is
213 * superseded and is changeable.
214 *
215 * -----------------------------------------------------------------------------
216 *
217 * Example:
218 *
219 * ~~~~~~~~~~~~~{.cpp}
220 * extern "C" typedef struct C_SAMPLE_DATA
221 * {
222 * unsigned int iUniqueId;
223 * } C_SAMPLE_DATA;
224 *
225 * class CPPSampleData : public CStructHdl<CPPSampleData, C_SAMPLE_DATA>
226 * {
227 * public:
228 * CPPSampleData() = default;
229 * CPPSampleData(const CPPSampleData& sample) : CStructHdl(sample) { }
230 * CPPSampleData(const C_SAMPLE_DATA* sample) : CStructHdl(sample) { }
231 * CPPSampleData(C_SAMPLE_DATA* sample) : CStructHdl(sample) { }
232 *
233 * void SetUniqueId(unsigned int uniqueId) { m_cStructure->iUniqueId = uniqueId; }
234 * unsigned int GetUniqueId() const { return m_cStructure->iUniqueId; }
235 * };
236 *
237 * ~~~~~~~~~~~~~
238 *
239 * It also works with the following example:
240 *
241 * ~~~~~~~~~~~~~{.cpp}
242 * CPPSampleData test;
243 * // Some work
244 * C_SAMPLE_DATA* data = test;
245 * // Give "data" to Kodi
246 * ~~~~~~~~~~~~~
247 */
248template<class CPP_CLASS, typename C_STRUCT>
250{
251public:
252 CStructHdl() : m_cStructure(new C_STRUCT()), m_owner(true) {}
253
254 CStructHdl(const CPP_CLASS& cppClass)
255 : m_cStructure(new C_STRUCT(*cppClass.m_cStructure)), m_owner(true)
256 {
257 }
258
259 CStructHdl(const C_STRUCT* cStructure) : m_cStructure(new C_STRUCT(*cStructure)), m_owner(true) {}
260
261 CStructHdl(C_STRUCT* cStructure) : m_cStructure(cStructure) { assert(cStructure); }
262
263 const CStructHdl& operator=(const CStructHdl& right)
264 {
265 assert(&right.m_cStructure);
266 if (m_cStructure && !m_owner)
267 {
268 memcpy(m_cStructure, right.m_cStructure, sizeof(C_STRUCT));
269 }
270 else
271 {
272 if (m_owner)
273 delete m_cStructure;
274 m_owner = true;
275 m_cStructure = new C_STRUCT(*right.m_cStructure);
276 }
277 return *this;
278 }
279
280 const CStructHdl& operator=(const C_STRUCT& right)
281 {
282 assert(&right);
283 if (m_cStructure && !m_owner)
284 {
285 memcpy(m_cStructure, &right, sizeof(C_STRUCT));
286 }
287 else
288 {
289 if (m_owner)
290 delete m_cStructure;
291 m_owner = true;
292 m_cStructure = new C_STRUCT(*right);
293 }
294 return *this;
295 }
296
297 virtual ~CStructHdl()
298 {
299 if (m_owner)
300 delete m_cStructure;
301 }
302
303 operator C_STRUCT*() { return m_cStructure; }
304 operator const C_STRUCT*() const { return m_cStructure; }
305
306 const C_STRUCT* GetCStructure() const { return m_cStructure; }
307
308protected:
309 C_STRUCT* m_cStructure = nullptr;
310
311private:
312 bool m_owner = false;
313};
314
315//============================================================================
321class ATTRIBUTE_HIDDEN CAddonBase
322{
323public:
324 //============================================================================
329 {
330 m_interface->toAddon->destroy = ADDONBASE_Destroy;
331 m_interface->toAddon->create_instance = ADDONBASE_CreateInstance;
332 m_interface->toAddon->destroy_instance = ADDONBASE_DestroyInstance;
333 m_interface->toAddon->set_setting = ADDONBASE_SetSetting;
334 }
335 //----------------------------------------------------------------------------
336
337 //============================================================================
341 virtual ~CAddonBase() = default;
342 //----------------------------------------------------------------------------
343
344 //============================================================================
360 virtual ADDON_STATUS Create() { return ADDON_STATUS_OK; }
361 //----------------------------------------------------------------------------
362
363 // obsolete
364 virtual ADDON_STATUS GetStatus() { return ADDON_STATUS_OK; }
365
366 //============================================================================
416 virtual ADDON_STATUS SetSetting(const std::string& settingName,
417 const kodi::CSettingValue& settingValue)
418 {
420 }
421 //----------------------------------------------------------------------------
422
423 //==========================================================================
481 virtual ADDON_STATUS CreateInstance(int instanceType,
482 const std::string& instanceID,
483 KODI_HANDLE instance,
484 const std::string& version,
485 KODI_HANDLE& addonInstance)
486 {
487 return ADDON_STATUS_NOT_IMPLEMENTED;
488 }
489 //--------------------------------------------------------------------------
490
491 //==========================================================================
505 virtual void DestroyInstance(int instanceType,
506 const std::string& instanceID,
507 KODI_HANDLE addonInstance)
508 {
509 }
510 //--------------------------------------------------------------------------
511
512 /* Background helper for GUI render systems, e.g. Screensaver or Visualization */
513 std::shared_ptr<kodi::gui::IRenderHelper> m_renderHelper;
514
515 /* Global variables of class */
517 m_interface; // Interface function table to hold addresses on add-on and from kodi
518
519private:
520 static inline void ADDONBASE_Destroy()
521 {
522 delete static_cast<CAddonBase*>(m_interface->addonBase);
523 m_interface->addonBase = nullptr;
524 }
525
526 static inline ADDON_STATUS ADDONBASE_SetSetting(const char* settingName, const void* settingValue)
527 {
528 return static_cast<CAddonBase*>(m_interface->addonBase)
529 ->SetSetting(settingName, CSettingValue(settingValue));
530 }
531
532 static inline ADDON_STATUS ADDONBASE_CreateInstance(int instanceType,
533 const char* instanceID,
534 KODI_HANDLE instance,
535 const char* version,
536 KODI_HANDLE* addonInstance,
537 KODI_HANDLE parent)
538 {
539 CAddonBase* base = static_cast<CAddonBase*>(m_interface->addonBase);
540
541 ADDON_STATUS status = ADDON_STATUS_NOT_IMPLEMENTED;
542
543 /* Check about single instance usage:
544 * 1. The kodi side instance pointer must be equal to first one
545 * 2. The addon side instance pointer must be set
546 * 3. And the requested type must be equal with used add-on class
547 */
548 if (m_interface->firstKodiInstance == instance && m_interface->globalSingleInstance &&
549 static_cast<IAddonInstance*>(m_interface->globalSingleInstance)->m_type == instanceType)
550 {
551 /* The handling here is intended for the case of the add-on only one
552 * instance and this is integrated in the add-on base class.
553 */
554 *addonInstance = m_interface->globalSingleInstance;
555 status = ADDON_STATUS_OK;
556 }
557 else
558 {
559 /* Here it should use the CreateInstance instance function to allow
560 * creation of several on one addon.
561 */
562
563 /* Check first a parent is defined about (e.g. Codec within inputstream) */
564 if (parent != nullptr)
565 status = static_cast<IAddonInstance*>(parent)->CreateInstance(
566 instanceType, instanceID, instance, version, *addonInstance);
567
568 /* if no parent call the main instance creation function to get it */
569 if (status == ADDON_STATUS_NOT_IMPLEMENTED)
570 {
571 status = base->CreateInstance(instanceType, instanceID, instance, version, *addonInstance);
572 }
573 }
574
575 if (*addonInstance == nullptr)
576 {
577 if (status == ADDON_STATUS_OK)
578 {
579 m_interface->toKodi->addon_log_msg(m_interface->toKodi->kodiBase, ADDON_LOG_FATAL,
580 "kodi::addon::CAddonBase CreateInstance returned an "
581 "empty instance pointer, but reported OK!");
583 }
584 else
585 {
586 return status;
587 }
588 }
589
590 if (static_cast<IAddonInstance*>(*addonInstance)->m_type != instanceType)
591 {
592 m_interface->toKodi->addon_log_msg(
593 m_interface->toKodi->kodiBase, ADDON_LOG_FATAL,
594 "kodi::addon::CAddonBase CreateInstance difference between given and returned");
595 delete static_cast<IAddonInstance*>(*addonInstance);
596 *addonInstance = nullptr;
598 }
599
600 // Store the used ID inside instance, to have on destroy calls by addon to identify
601 static_cast<IAddonInstance*>(*addonInstance)->m_id = instanceID;
602
603 return status;
604 }
605
606 static inline void ADDONBASE_DestroyInstance(int instanceType, KODI_HANDLE instance)
607 {
608 CAddonBase* base = static_cast<CAddonBase*>(m_interface->addonBase);
609
610 if (m_interface->globalSingleInstance == nullptr && instance != base)
611 {
612 base->DestroyInstance(instanceType, static_cast<IAddonInstance*>(instance)->m_id, instance);
613 delete static_cast<IAddonInstance*>(instance);
614 }
615 }
616};
617
618} /* namespace addon */
619
620//==============================================================================
630inline std::string ATTRIBUTE_HIDDEN GetKodiTypeVersion(int type)
631{
632 using namespace kodi::addon;
633
634 char* str = CAddonBase::m_interface->toKodi->get_type_version(
635 CAddonBase::m_interface->toKodi->kodiBase, type);
636 std::string ret = str;
637 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, str);
638 return ret;
639}
640//------------------------------------------------------------------------------
641
642//==============================================================================
649inline std::string ATTRIBUTE_HIDDEN GetAddonPath(const std::string& append = "")
650{
651 using namespace kodi::addon;
652
653 char* str =
654 CAddonBase::m_interface->toKodi->get_addon_path(CAddonBase::m_interface->toKodi->kodiBase);
655 std::string ret = str;
656 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, str);
657 if (!append.empty())
658 {
659 if (append.at(0) != '\\' && append.at(0) != '/')
660#ifdef TARGET_WINDOWS
661 ret.append("\\");
662#else
663 ret.append("/");
664#endif
665 ret.append(append);
666 }
667 return ret;
668}
669//------------------------------------------------------------------------------
670
671//==============================================================================
681inline std::string ATTRIBUTE_HIDDEN GetBaseUserPath(const std::string& append = "")
682{
683 using namespace kodi::addon;
684
685 char* str = CAddonBase::m_interface->toKodi->get_base_user_path(
686 CAddonBase::m_interface->toKodi->kodiBase);
687 std::string ret = str;
688 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, str);
689 if (!append.empty())
690 {
691 if (append.at(0) != '\\' && append.at(0) != '/')
692#ifdef TARGET_WINDOWS
693 ret.append("\\");
694#else
695 ret.append("/");
696#endif
697 ret.append(append);
698 }
699 return ret;
700}
701//------------------------------------------------------------------------------
702
703//==============================================================================
718inline std::string ATTRIBUTE_HIDDEN GetLibPath()
719{
720 using namespace kodi::addon;
721
722 return CAddonBase::m_interface->libBasePath;
723}
724//------------------------------------------------------------------------------
725
726//==============================================================================
749inline void ATTRIBUTE_HIDDEN Log(const AddonLog loglevel, const char* format, ...)
750{
751 using namespace kodi::addon;
752
753 va_list args;
754 va_start(args, format);
755 const std::string str = kodi::tools::StringUtils::FormatV(format, args);
756 va_end(args);
757 CAddonBase::m_interface->toKodi->addon_log_msg(CAddonBase::m_interface->toKodi->kodiBase,
758 loglevel, str.c_str());
759}
760//------------------------------------------------------------------------------
761
762//##############################################################################
774
776//==============================================================================
784inline bool ATTRIBUTE_HIDDEN IsSettingUsingDefault(const std::string& settingName)
785{
786 using namespace kodi::addon;
787 return CAddonBase::m_interface->toKodi->is_setting_using_default(
788 CAddonBase::m_interface->toKodi->kodiBase, settingName.c_str());
789}
790//------------------------------------------------------------------------------
791
792//==============================================================================
815inline bool ATTRIBUTE_HIDDEN CheckSettingString(const std::string& settingName,
816 std::string& settingValue)
817{
818 using namespace kodi::addon;
819
820 char* buffer = nullptr;
821 bool ret = CAddonBase::m_interface->toKodi->get_setting_string(
822 CAddonBase::m_interface->toKodi->kodiBase, settingName.c_str(), &buffer);
823 if (buffer)
824 {
825 if (ret)
826 settingValue = buffer;
827 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, buffer);
828 }
829 return ret;
830}
831//------------------------------------------------------------------------------
832
833//==============================================================================
852inline std::string ATTRIBUTE_HIDDEN GetSettingString(const std::string& settingName,
853 const std::string& defaultValue = "")
854{
855 std::string settingValue = defaultValue;
856 CheckSettingString(settingName, settingValue);
857 return settingValue;
858}
859//------------------------------------------------------------------------------
860
861//==============================================================================
880inline void ATTRIBUTE_HIDDEN SetSettingString(const std::string& settingName,
881 const std::string& settingValue)
882{
883 using namespace kodi::addon;
884
885 CAddonBase::m_interface->toKodi->set_setting_string(CAddonBase::m_interface->toKodi->kodiBase,
886 settingName.c_str(), settingValue.c_str());
887}
888//------------------------------------------------------------------------------
889
890//==============================================================================
913inline bool ATTRIBUTE_HIDDEN CheckSettingInt(const std::string& settingName, int& settingValue)
914{
915 using namespace kodi::addon;
916
917 return CAddonBase::m_interface->toKodi->get_setting_int(CAddonBase::m_interface->toKodi->kodiBase,
918 settingName.c_str(), &settingValue);
919}
920//------------------------------------------------------------------------------
921
922//==============================================================================
941inline int ATTRIBUTE_HIDDEN GetSettingInt(const std::string& settingName, int defaultValue = 0)
942{
943 int settingValue = defaultValue;
944 CheckSettingInt(settingName, settingValue);
945 return settingValue;
946}
947//------------------------------------------------------------------------------
948
949//==============================================================================
968inline void ATTRIBUTE_HIDDEN SetSettingInt(const std::string& settingName, int settingValue)
969{
970 using namespace kodi::addon;
971
972 CAddonBase::m_interface->toKodi->set_setting_int(CAddonBase::m_interface->toKodi->kodiBase,
973 settingName.c_str(), settingValue);
974}
975//------------------------------------------------------------------------------
976
977//==============================================================================
1000inline bool ATTRIBUTE_HIDDEN CheckSettingBoolean(const std::string& settingName, bool& settingValue)
1001{
1002 using namespace kodi::addon;
1003
1004 return CAddonBase::m_interface->toKodi->get_setting_bool(
1005 CAddonBase::m_interface->toKodi->kodiBase, settingName.c_str(), &settingValue);
1006}
1007//------------------------------------------------------------------------------
1008
1009//==============================================================================
1028inline bool ATTRIBUTE_HIDDEN GetSettingBoolean(const std::string& settingName,
1029 bool defaultValue = false)
1030{
1031 bool settingValue = defaultValue;
1032 CheckSettingBoolean(settingName, settingValue);
1033 return settingValue;
1034}
1035//------------------------------------------------------------------------------
1036
1037//==============================================================================
1056inline void ATTRIBUTE_HIDDEN SetSettingBoolean(const std::string& settingName, bool settingValue)
1057{
1058 using namespace kodi::addon;
1059
1060 CAddonBase::m_interface->toKodi->set_setting_bool(CAddonBase::m_interface->toKodi->kodiBase,
1061 settingName.c_str(), settingValue);
1062}
1063//------------------------------------------------------------------------------
1064
1065//==============================================================================
1088inline bool ATTRIBUTE_HIDDEN CheckSettingFloat(const std::string& settingName, float& settingValue)
1089{
1090 using namespace kodi::addon;
1091
1092 return CAddonBase::m_interface->toKodi->get_setting_float(
1093 CAddonBase::m_interface->toKodi->kodiBase, settingName.c_str(), &settingValue);
1094}
1095//------------------------------------------------------------------------------
1096
1097//==============================================================================
1116inline float ATTRIBUTE_HIDDEN GetSettingFloat(const std::string& settingName,
1117 float defaultValue = 0.0f)
1118{
1119 float settingValue = defaultValue;
1120 CheckSettingFloat(settingName, settingValue);
1121 return settingValue;
1122}
1123//------------------------------------------------------------------------------
1124
1125//==============================================================================
1144inline void ATTRIBUTE_HIDDEN SetSettingFloat(const std::string& settingName, float settingValue)
1145{
1146 using namespace kodi::addon;
1147
1148 CAddonBase::m_interface->toKodi->set_setting_float(CAddonBase::m_interface->toKodi->kodiBase,
1149 settingName.c_str(), settingValue);
1150}
1151//------------------------------------------------------------------------------
1152
1153//==============================================================================
1184template<typename enumType>
1185inline bool ATTRIBUTE_HIDDEN CheckSettingEnum(const std::string& settingName,
1186 enumType& settingValue)
1187{
1188 using namespace kodi::addon;
1189
1190 int settingValueInt = static_cast<int>(settingValue);
1191 bool ret = CAddonBase::m_interface->toKodi->get_setting_int(
1192 CAddonBase::m_interface->toKodi->kodiBase, settingName.c_str(), &settingValueInt);
1193 if (ret)
1194 settingValue = static_cast<enumType>(settingValueInt);
1195 return ret;
1196}
1197//------------------------------------------------------------------------------
1198
1199//==============================================================================
1227template<typename enumType>
1228inline enumType ATTRIBUTE_HIDDEN GetSettingEnum(const std::string& settingName,
1229 enumType defaultValue = static_cast<enumType>(0))
1230{
1231 enumType settingValue = defaultValue;
1232 CheckSettingEnum(settingName, settingValue);
1233 return settingValue;
1234}
1235//------------------------------------------------------------------------------
1236
1237//==============================================================================
1265template<typename enumType>
1266inline void ATTRIBUTE_HIDDEN SetSettingEnum(const std::string& settingName, enumType settingValue)
1267{
1268 using namespace kodi::addon;
1269
1270 CAddonBase::m_interface->toKodi->set_setting_int(CAddonBase::m_interface->toKodi->kodiBase,
1271 settingName.c_str(),
1272 static_cast<int>(settingValue));
1273}
1274//------------------------------------------------------------------------------
1275
1278//============================================================================
1285inline std::string ATTRIBUTE_HIDDEN TranslateAddonStatus(ADDON_STATUS status)
1286{
1287 switch (status)
1288 {
1289 case ADDON_STATUS_OK:
1290 return "OK";
1292 return "Lost Connection";
1294 return "Need Restart";
1296 return "Need Settings";
1298 return "Unknown error";
1300 return "Permanent failure";
1301 case ADDON_STATUS_NOT_IMPLEMENTED:
1302 return "Not implemented";
1303 default:
1304 break;
1305 }
1306 return "Unknown";
1307}
1308//----------------------------------------------------------------------------
1309
1310//==============================================================================
1328inline void* GetInterface(const std::string& name, const std::string& version)
1329{
1330 using namespace kodi::addon;
1331
1332 AddonToKodiFuncTable_Addon* toKodi = CAddonBase::m_interface->toKodi;
1333
1334 return toKodi->get_interface(toKodi->kodiBase, name.c_str(), version.c_str());
1335}
1336//----------------------------------------------------------------------------
1337
1338} /* namespace kodi */
1339
1340//==============================================================================
1434#define ADDONCREATOR(AddonClass) \
1435 extern "C" ATTRIBUTE_DLL_EXPORT ADDON_STATUS ADDON_Create( \
1436 KODI_HANDLE addonInterface, const char* /*globalApiVersion*/, void* /*unused*/) \
1437 { \
1438 kodi::addon::CAddonBase::m_interface = static_cast<AddonGlobalInterface*>(addonInterface); \
1439 kodi::addon::CAddonBase::m_interface->addonBase = new AddonClass; \
1440 return static_cast<kodi::addon::CAddonBase*>(kodi::addon::CAddonBase::m_interface->addonBase) \
1441 ->Create(); \
1442 } \
1443 extern "C" ATTRIBUTE_DLL_EXPORT const char* ADDON_GetTypeVersion(int type) \
1444 { \
1445 return kodi::addon::GetTypeVersion(type); \
1446 } \
1447 extern "C" ATTRIBUTE_DLL_EXPORT const char* ADDON_GetTypeMinVersion(int type) \
1448 { \
1449 return kodi::addon::GetTypeMinVersion(type); \
1450 } \
1451 AddonGlobalInterface* kodi::addon::CAddonBase::m_interface = nullptr;
1452//------------------------------------------------------------------------------
1453
1454#endif /* __cplusplus */
Definition: AddonBase.h:119
Definition: AddonBase.h:322
Definition: AddonBase.h:250
Definition: AddonBase.h:186
AddonLog
Definition: addon_base.h:149
@ ADDON_LOG_FATAL
4 : To notify fatal unrecoverable errors, which can may also indicate upcoming crashes.
Definition: addon_base.h:164
ADDON_STATUS
Definition: addon_base.h:105
@ ADDON_STATUS_NEED_SETTINGS
Necessary settings are not yet set.
Definition: addon_base.h:116
@ ADDON_STATUS_LOST_CONNECTION
A needed connection was lost.
Definition: addon_base.h:110
@ ADDON_STATUS_OK
For everything OK and no error.
Definition: addon_base.h:107
@ ADDON_STATUS_NEED_RESTART
Addon needs a restart inside Kodi.
Definition: addon_base.h:113
@ ADDON_STATUS_UNKNOWN
Unknown and incomprehensible error.
Definition: addon_base.h:119
@ ADDON_STATUS_PERMANENT_FAILURE
Permanent failure, like failing to resolve methods.
Definition: addon_base.h:122
ADDON_TYPE
Definition: versions.h:200
unsigned int GetUInt() const
To get settings value as unsigned integer.
Definition: AddonBase.h:148
int GetInt() const
To get settings value as integer.
Definition: AddonBase.h:145
bool GetBoolean() const
To get settings value as boolean.
Definition: AddonBase.h:151
std::string GetString() const
To get settings value as string.
Definition: AddonBase.h:142
float GetFloat() const
To get settings value as floating point.
Definition: AddonBase.h:154
enumType GetEnum() const
To get settings value as enum.
Definition: AddonBase.h:159
virtual ADDON_STATUS SetSetting(const std::string &settingName, const kodi::CSettingValue &settingValue)
To inform addon about changed settings values.
Definition: AddonBase.h:416
virtual ADDON_STATUS CreateInstance(int instanceType, const std::string &instanceID, KODI_HANDLE instance, const std::string &version, KODI_HANDLE &addonInstance)
Instance created.
Definition: AddonBase.h:481
virtual ~CAddonBase()=default
Destructor.
virtual ADDON_STATUS Create()
Main addon creation function.
Definition: AddonBase.h:360
CAddonBase()
Addon base class constructor.
Definition: AddonBase.h:328
virtual void DestroyInstance(int instanceType, const std::string &instanceID, KODI_HANDLE addonInstance)
Instance destroy.
Definition: AddonBase.h:505
bool ATTRIBUTE_HIDDEN CheckSettingString(const std::string &settingName, std::string &settingValue)
Check and get a string setting value.
Definition: AddonBase.h:815
void ATTRIBUTE_HIDDEN SetSettingFloat(const std::string &settingName, float settingValue)
Set floating point setting of addon.
Definition: AddonBase.h:1144
std::string ATTRIBUTE_HIDDEN GetSettingString(const std::string &settingName, const std::string &defaultValue="")
Get string setting value.
Definition: AddonBase.h:852
bool ATTRIBUTE_HIDDEN CheckSettingFloat(const std::string &settingName, float &settingValue)
Check and get a floating point setting value.
Definition: AddonBase.h:1088
void ATTRIBUTE_HIDDEN SetSettingEnum(const std::string &settingName, enumType settingValue)
Set enum setting of addon.
Definition: AddonBase.h:1266
enumType ATTRIBUTE_HIDDEN GetSettingEnum(const std::string &settingName, enumType defaultValue=static_cast< enumType >(0))
Get enum setting value.
Definition: AddonBase.h:1228
bool ATTRIBUTE_HIDDEN CheckSettingInt(const std::string &settingName, int &settingValue)
Check and get a integer setting value.
Definition: AddonBase.h:913
void ATTRIBUTE_HIDDEN SetSettingString(const std::string &settingName, const std::string &settingValue)
Set string setting of addon.
Definition: AddonBase.h:880
float ATTRIBUTE_HIDDEN GetSettingFloat(const std::string &settingName, float defaultValue=0.0f)
Get floating point setting value.
Definition: AddonBase.h:1116
bool ATTRIBUTE_HIDDEN CheckSettingBoolean(const std::string &settingName, bool &settingValue)
Check and get a boolean setting value.
Definition: AddonBase.h:1000
void ATTRIBUTE_HIDDEN SetSettingBoolean(const std::string &settingName, bool settingValue)
Set boolean setting of addon.
Definition: AddonBase.h:1056
int ATTRIBUTE_HIDDEN GetSettingInt(const std::string &settingName, int defaultValue=0)
Get integer setting value.
Definition: AddonBase.h:941
void ATTRIBUTE_HIDDEN SetSettingInt(const std::string &settingName, int settingValue)
Set integer setting of addon.
Definition: AddonBase.h:968
bool ATTRIBUTE_HIDDEN GetSettingBoolean(const std::string &settingName, bool defaultValue=false)
Get boolean setting value.
Definition: AddonBase.h:1028
bool ATTRIBUTE_HIDDEN CheckSettingEnum(const std::string &settingName, enumType &settingValue)
Check and get a enum setting value.
Definition: AddonBase.h:1185
bool ATTRIBUTE_HIDDEN IsSettingUsingDefault(const std::string &settingName)
Check the given setting name is set to default value.
Definition: AddonBase.h:784
static std::string FormatV(PRINTF_FORMAT_STRING const char *fmt, va_list args)
Returns the C++ string pointed by given format list.
Definition: StringUtils.h:604
std::string ATTRIBUTE_HIDDEN GetAddonPath(const std::string &append="")
To get the addon system installation folder.
Definition: AddonBase.h:649
std::string ATTRIBUTE_HIDDEN GetKodiTypeVersion(int type)
To get used version inside Kodi itself about asked type.
Definition: AddonBase.h:630
std::string ATTRIBUTE_HIDDEN GetBaseUserPath(const std::string &append="")
To get the user-related folder of the addon.
Definition: AddonBase.h:681
void * GetInterface(const std::string &name, const std::string &version)
Returns a function table to a named interface.
Definition: AddonBase.h:1328
std::string ATTRIBUTE_HIDDEN TranslateAddonStatus(ADDON_STATUS status)
Get to related ADDON_STATUS a human readable text.
Definition: AddonBase.h:1285
void ATTRIBUTE_HIDDEN Log(const AddonLog loglevel, const char *format,...)
Add a message to Kodi's log.
Definition: AddonBase.h:749
std::string ATTRIBUTE_HIDDEN GetLibPath()
This function gives OS associated executable binary path of the addon.
Definition: AddonBase.h:718
Main structure passed from kodi to addon with basic information needed to create add-on.
Definition: addon_base.h:252
Definition: addon_base.h:193