summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h399
1 files changed, 99 insertions, 300 deletions
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h
index d9f72c1..8b02e33 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h
@@ -27,6 +27,7 @@
27#include <stdint.h> 27#include <stdint.h>
28#include <stdarg.h> 28#include <stdarg.h>
29 29
30#include "versions.h"
30#if defined(BUILD_KODI_ADDON) 31#if defined(BUILD_KODI_ADDON)
31#include "IFileTypes.h" 32#include "IFileTypes.h"
32#else 33#else
@@ -44,62 +45,11 @@ typedef intptr_t ssize_t;
44 45
45#if defined(BUILD_KODI_ADDON) 46#if defined(BUILD_KODI_ADDON)
46#include "p8-platform/windows/dlfcn-win32.h" 47#include "p8-platform/windows/dlfcn-win32.h"
47#else
48#include "dlfcn-win32.h"
49#endif 48#endif
50
51#define ADDON_HELPER_EXT ".dll"
52#define ADDON_HELPER_PATHSEP "\\"
53#define ADDON_HELPER_ARCHSEP ""
54#define ADDON_HELPER_ARCH ""
55
56#else // windows 49#else // windows
57#define ADDON_HELPER_PATHSEP "/"
58#define ADDON_HELPER_ARCHSEP "-"
59// the ADDON_HELPER_ARCH is the platform dependend name which is used
60// as part of the name of dynamic addon libraries. It has to match the
61// strings which are set in configure.ac for the "ARCH" variable.
62#if defined(__APPLE__) // osx
63#if defined(__arm__) || defined(__aarch64__)
64#define ADDON_HELPER_ARCH "arm-osx"
65#else
66#define ADDON_HELPER_ARCH "x86-osx"
67#endif
68#define ADDON_HELPER_EXT ".dylib"
69#else // linux
70#if defined(__x86_64__)
71#define ADDON_HELPER_ARCH "x86_64-linux"
72#elif defined(_POWERPC)
73#define ADDON_HELPER_ARCH "powerpc-linux"
74#elif defined(_POWERPC64)
75#define ADDON_HELPER_ARCH "powerpc64-linux"
76#elif defined(__ARMEL__)
77#define ADDON_HELPER_ARCH "arm"
78#elif defined(__aarch64__)
79#define ADDON_HELPER_ARCH "aarch64"
80#elif defined(__mips__)
81#define ADDON_HELPER_ARCH "mips"
82#else
83#define ADDON_HELPER_ARCH "i486-linux"
84#endif
85#define ADDON_HELPER_EXT ".so"
86#endif
87#include <dlfcn.h> // linux+osx 50#include <dlfcn.h> // linux+osx
88#endif 51#endif
89 52
90#define KODI_DLL_NAME(name) "libKODI_" name ADDON_HELPER_ARCHSEP ADDON_HELPER_ARCH ADDON_HELPER_EXT
91#define XBMC_DLL_NAME(name) "libXBMC_" name ADDON_HELPER_ARCHSEP ADDON_HELPER_ARCH ADDON_HELPER_EXT
92#if defined(ANDROID)
93#define KODI_DLL(name) ADDON_HELPER_PATHSEP KODI_DLL_NAME(name)
94#define XBMC_DLL(name) ADDON_HELPER_PATHSEP XBMC_DLL_NAME(name)
95#else
96#define KODI_DLL(name) ADDON_HELPER_PATHSEP "library.kodi." name ADDON_HELPER_PATHSEP KODI_DLL_NAME(name)
97#define XBMC_DLL(name) ADDON_HELPER_PATHSEP "library.xbmc." name ADDON_HELPER_PATHSEP XBMC_DLL_NAME(name)
98#endif
99
100#define ADDON_DLL_NAME XBMC_DLL_NAME("addon")
101#define ADDON_DLL XBMC_DLL("addon")
102
103#ifdef LOG_DEBUG 53#ifdef LOG_DEBUG
104#undef LOG_DEBUG 54#undef LOG_DEBUG
105#endif 55#endif
@@ -113,9 +63,6 @@ typedef intptr_t ssize_t;
113#undef LOG_ERROR 63#undef LOG_ERROR
114#endif 64#endif
115 65
116/* current addon API version */
117#define KODI_ADDON_API_VERSION "1.0.0"
118
119typedef void* (*KODIAddOnLib_RegisterMe)(void *addonData); 66typedef void* (*KODIAddOnLib_RegisterMe)(void *addonData);
120typedef void (*KODIAddOnLib_UnRegisterMe)(void *addonData, void *cbTable); 67typedef void (*KODIAddOnLib_UnRegisterMe)(void *addonData, void *cbTable);
121typedef void* (*KODIAudioEngineLib_RegisterMe)(void *addonData); 68typedef void* (*KODIAudioEngineLib_RegisterMe)(void *addonData);
@@ -175,186 +122,82 @@ namespace ADDON
175 QUEUE_WARNING, 122 QUEUE_WARNING,
176 QUEUE_ERROR 123 QUEUE_ERROR
177 } queue_msg_t; 124 } queue_msg_t;
125}
126
127namespace KodiAPI
128{
129namespace AddOn
130{
131typedef struct CB_AddOn
132{
133 void (*Log)(void *addonData, const ADDON::addon_log_t loglevel, const char *msg);
134 void (*QueueNotification)(void *addonData, const ADDON::queue_msg_t type, const char *msg);
135 bool (*WakeOnLan)(const char* mac);
136 bool (*GetSetting)(void *addonData, const char *settingName, void *settingValue);
137 char* (*TranslateSpecialProtocol)(const char *strSource);
138 char* (*UnknownToUTF8)(const char *sourceDest);
139 char* (*GetLocalizedString)(const void* addonData, long dwCode);
140 char* (*GetDVDMenuLanguage)(const void* addonData);
141 void (*FreeString)(const void* addonData, char* str);
142
143 void* (*OpenFile)(const void* addonData, const char* strFileName, unsigned int flags);
144 void* (*OpenFileForWrite)(const void* addonData, const char* strFileName, bool bOverWrite);
145 ssize_t (*ReadFile)(const void* addonData, void* file, void* lpBuf, size_t uiBufSize);
146 bool (*ReadFileString)(const void* addonData, void* file, char *szLine, int iLineLength);
147 ssize_t (*WriteFile)(const void* addonData, void* file, const void* lpBuf, size_t uiBufSize);
148 void (*FlushFile)(const void* addonData, void* file);
149 int64_t (*SeekFile)(const void* addonData, void* file, int64_t iFilePosition, int iWhence);
150 int (*TruncateFile)(const void* addonData, void* file, int64_t iSize);
151 int64_t (*GetFilePosition)(const void* addonData, void* file);
152 int64_t (*GetFileLength)(const void* addonData, void* file);
153 double (*GetFileDownloadSpeed)(const void* addonData, void* file);
154 void (*CloseFile)(const void* addonData, void* file);
155 int (*GetFileChunkSize)(const void* addonData, void* file);
156 bool (*FileExists)(const void* addonData, const char *strFileName, bool bUseCache);
157 int (*StatFile)(const void* addonData, const char *strFileName, struct __stat64* buffer);
158 bool (*DeleteFile)(const void* addonData, const char *strFileName);
159 bool (*CanOpenDirectory)(const void* addonData, const char* strURL);
160 bool (*CreateDirectory)(const void* addonData, const char *strPath);
161 bool (*DirectoryExists)(const void* addonData, const char *strPath);
162 bool (*RemoveDirectory)(const void* addonData, const char *strPath);
163 bool (*GetDirectory)(const void* addonData, const char *strPath, const char* mask, VFSDirEntry** items, unsigned int* num_items);
164 void (*FreeDirectory)(const void* addonData, VFSDirEntry* items, unsigned int num_items);
165 void* (*CURLCreate)(const void* addonData, const char* strURL);
166 bool (*CURLAddOption)(const void* addonData, void* file, XFILE::CURLOPTIONTYPE type, const char* name, const char * value);
167 bool (*CURLOpen)(const void* addonData, void* file, unsigned int flags);
168} CB_AddOnLib;
169
170} /* namespace AddOn */
171} /* namespace KodiAPI */
178 172
173namespace ADDON
174{
179 class CHelper_libXBMC_addon 175 class CHelper_libXBMC_addon
180 { 176 {
181 public: 177 public:
182 CHelper_libXBMC_addon() 178 CHelper_libXBMC_addon()
183 { 179 {
184 m_libXBMC_addon = NULL; 180 m_Handle = nullptr;
185 m_Handle = NULL; 181 m_Callbacks = nullptr;
186 } 182 }
187 183
188 ~CHelper_libXBMC_addon() 184 ~CHelper_libXBMC_addon()
189 { 185 {
190 if (m_libXBMC_addon) 186 if (m_Handle && m_Callbacks)
191 { 187 {
192 XBMC_unregister_me(m_Handle, m_Callbacks); 188 m_Handle->AddOnLib_UnRegisterMe(m_Handle->addonData, m_Callbacks);
193 dlclose(m_libXBMC_addon);
194 } 189 }
195 } 190 }
196 191
197 bool RegisterMe(void *Handle) 192 bool RegisterMe(void *handle)
198 { 193 {
199 m_Handle = Handle; 194 m_Handle = static_cast<AddonCB*>(handle);
200 195 if (m_Handle)
201 std::string libBasePath; 196 m_Callbacks = (KodiAPI::AddOn::CB_AddOnLib*)m_Handle->AddOnLib_RegisterMe(m_Handle->addonData);
202 libBasePath = ((cb_array*)m_Handle)->libPath; 197 if (!m_Callbacks)
203 libBasePath += ADDON_DLL; 198 fprintf(stderr, "libXBMC_addon-ERROR: AddOnLib_RegisterMe can't get callback table from Kodi !!!\n");
204 199
205 m_libXBMC_addon = dlopen(libBasePath.c_str(), RTLD_LAZY); 200 return m_Callbacks != nullptr;
206 if (m_libXBMC_addon == NULL)
207 {
208 fprintf(stderr, "Unable to load %s\n", dlerror());
209 return false;
210 }
211
212 XBMC_register_me = (void* (*)(void *HANDLE))
213 dlsym(m_libXBMC_addon, "XBMC_register_me");
214 if (XBMC_register_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
215
216 XBMC_unregister_me = (void (*)(void* HANDLE, void* CB))
217 dlsym(m_libXBMC_addon, "XBMC_unregister_me");
218 if (XBMC_unregister_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
219
220 XBMC_log = (void (*)(void* HANDLE, void* CB, const addon_log_t loglevel, const char *msg))
221 dlsym(m_libXBMC_addon, "XBMC_log");
222 if (XBMC_log == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
223
224 XBMC_get_setting = (bool (*)(void* HANDLE, void* CB, const char* settingName, void *settingValue))
225 dlsym(m_libXBMC_addon, "XBMC_get_setting");
226 if (XBMC_get_setting == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
227
228 XBMC_translate_special = (char* (*)(void* HANDLE, void* CB, const char* source))
229 dlsym(m_libXBMC_addon, "XBMC_translate_special");
230 if (XBMC_translate_special == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
231
232 XBMC_queue_notification = (void (*)(void* HANDLE, void* CB, const queue_msg_t loglevel, const char *msg))
233 dlsym(m_libXBMC_addon, "XBMC_queue_notification");
234 if (XBMC_queue_notification == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
235
236 XBMC_wake_on_lan = (bool (*)(void* HANDLE, void *CB, const char *mac))
237 dlsym(m_libXBMC_addon, "XBMC_wake_on_lan");
238 if (XBMC_wake_on_lan == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
239
240 XBMC_unknown_to_utf8 = (char* (*)(void* HANDLE, void* CB, const char* str))
241 dlsym(m_libXBMC_addon, "XBMC_unknown_to_utf8");
242 if (XBMC_unknown_to_utf8 == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
243
244 XBMC_get_localized_string = (char* (*)(void* HANDLE, void* CB, int dwCode))
245 dlsym(m_libXBMC_addon, "XBMC_get_localized_string");
246 if (XBMC_get_localized_string == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
247
248 XBMC_free_string = (void (*)(void* HANDLE, void* CB, char* str))
249 dlsym(m_libXBMC_addon, "XBMC_free_string");
250 if (XBMC_free_string == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
251
252 XBMC_get_dvd_menu_language = (char* (*)(void* HANDLE, void* CB))
253 dlsym(m_libXBMC_addon, "XBMC_get_dvd_menu_language");
254 if (XBMC_get_dvd_menu_language == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
255
256 XBMC_open_file = (void* (*)(void* HANDLE, void* CB, const char* strFileName, unsigned int flags))
257 dlsym(m_libXBMC_addon, "XBMC_open_file");
258 if (XBMC_open_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
259
260 XBMC_open_file_for_write = (void* (*)(void* HANDLE, void* CB, const char* strFileName, bool bOverWrite))
261 dlsym(m_libXBMC_addon, "XBMC_open_file_for_write");
262 if (XBMC_open_file_for_write == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
263
264 XBMC_read_file = (ssize_t (*)(void* HANDLE, void* CB, void* file, void* lpBuf, size_t uiBufSize))
265 dlsym(m_libXBMC_addon, "XBMC_read_file");
266 if (XBMC_read_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
267
268 XBMC_read_file_string = (bool (*)(void* HANDLE, void* CB, void* file, char *szLine, int iLineLength))
269 dlsym(m_libXBMC_addon, "XBMC_read_file_string");
270 if (XBMC_read_file_string == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
271
272 XBMC_write_file = (ssize_t (*)(void* HANDLE, void* CB, void* file, const void* lpBuf, size_t uiBufSize))
273 dlsym(m_libXBMC_addon, "XBMC_write_file");
274 if (XBMC_write_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
275
276 XBMC_flush_file = (void (*)(void* HANDLE, void* CB, void* file))
277 dlsym(m_libXBMC_addon, "XBMC_flush_file");
278 if (XBMC_flush_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
279
280 XBMC_seek_file = (int64_t (*)(void* HANDLE, void* CB, void* file, int64_t iFilePosition, int iWhence))
281 dlsym(m_libXBMC_addon, "XBMC_seek_file");
282 if (XBMC_seek_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
283
284 XBMC_truncate_file = (int (*)(void* HANDLE, void* CB, void* file, int64_t iSize))
285 dlsym(m_libXBMC_addon, "XBMC_truncate_file");
286 if (XBMC_truncate_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
287
288 XBMC_get_file_position = (int64_t (*)(void* HANDLE, void* CB, void* file))
289 dlsym(m_libXBMC_addon, "XBMC_get_file_position");
290 if (XBMC_get_file_position == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
291
292 XBMC_get_file_length = (int64_t (*)(void* HANDLE, void* CB, void* file))
293 dlsym(m_libXBMC_addon, "XBMC_get_file_length");
294 if (XBMC_get_file_length == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
295
296 XBMC_get_file_download_speed = (double(*)(void* HANDLE, void* CB, void* file))
297 dlsym(m_libXBMC_addon, "XBMC_get_file_download_speed");
298 if (XBMC_get_file_download_speed == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
299
300 XBMC_close_file = (void (*)(void* HANDLE, void* CB, void* file))
301 dlsym(m_libXBMC_addon, "XBMC_close_file");
302 if (XBMC_close_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
303
304 XBMC_get_file_chunk_size = (int (*)(void* HANDLE, void* CB, void* file))
305 dlsym(m_libXBMC_addon, "XBMC_get_file_chunk_size");
306 if (XBMC_get_file_chunk_size == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
307
308 XBMC_file_exists = (bool (*)(void* HANDLE, void* CB, const char *strFileName, bool bUseCache))
309 dlsym(m_libXBMC_addon, "XBMC_file_exists");
310 if (XBMC_file_exists == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
311
312 XBMC_stat_file = (int (*)(void* HANDLE, void* CB, const char *strFileName, struct __stat64* buffer))
313 dlsym(m_libXBMC_addon, "XBMC_stat_file");
314 if (XBMC_stat_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
315
316 XBMC_delete_file = (bool (*)(void* HANDLE, void* CB, const char *strFileName))
317 dlsym(m_libXBMC_addon, "XBMC_delete_file");
318 if (XBMC_delete_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
319
320 XBMC_can_open_directory = (bool (*)(void* HANDLE, void* CB, const char* strURL))
321 dlsym(m_libXBMC_addon, "XBMC_can_open_directory");
322 if (XBMC_can_open_directory == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
323
324 XBMC_create_directory = (bool (*)(void* HANDLE, void* CB, const char* strPath))
325 dlsym(m_libXBMC_addon, "XBMC_create_directory");
326 if (XBMC_create_directory == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
327
328 XBMC_directory_exists = (bool (*)(void* HANDLE, void* CB, const char* strPath))
329 dlsym(m_libXBMC_addon, "XBMC_directory_exists");
330 if (XBMC_directory_exists == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
331
332 XBMC_remove_directory = (bool (*)(void* HANDLE, void* CB, const char* strPath))
333 dlsym(m_libXBMC_addon, "XBMC_remove_directory");
334 if (XBMC_remove_directory == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
335
336 XBMC_get_directory = (bool (*)(void* HANDLE, void* CB, const char* strPath, const char* mask, VFSDirEntry** items, unsigned int* num_items))
337 dlsym(m_libXBMC_addon, "XBMC_get_directory");
338 if (XBMC_get_directory == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
339
340 XBMC_free_directory = (void (*)(void* HANDLE, void* CB, VFSDirEntry* items, unsigned int num_items))
341 dlsym(m_libXBMC_addon, "XBMC_free_directory");
342 if (XBMC_free_directory == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
343
344 XBMC_curl_create = (void* (*)(void *HANDLE, void* CB, const char* strURL))
345 dlsym(m_libXBMC_addon, "XBMC_curl_create");
346 if (XBMC_curl_create == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
347
348 XBMC_curl_add_option = (bool (*)(void *HANDLE, void* CB, void *file, XFILE::CURLOPTIONTYPE type, const char* name, const char *value))
349 dlsym(m_libXBMC_addon, "XBMC_curl_add_option");
350 if (XBMC_curl_add_option == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
351
352 XBMC_curl_open = (bool (*)(void *HANDLE, void* CB, void *file, unsigned int flags))
353 dlsym(m_libXBMC_addon, "XBMC_curl_open");
354 if (XBMC_curl_open == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
355
356 m_Callbacks = XBMC_register_me(m_Handle);
357 return m_Callbacks != NULL;
358 } 201 }
359 202
360 /*! 203 /*!
@@ -369,7 +212,7 @@ namespace ADDON
369 va_start (args, format); 212 va_start (args, format);
370 vsprintf (buffer, format, args); 213 vsprintf (buffer, format, args);
371 va_end (args); 214 va_end (args);
372 return XBMC_log(m_Handle, m_Callbacks, loglevel, buffer); 215 m_Callbacks->Log(m_Handle->addonData, loglevel, buffer);
373 } 216 }
374 217
375 /*! 218 /*!
@@ -380,7 +223,7 @@ namespace ADDON
380 */ 223 */
381 bool GetSetting(const char* settingName, void *settingValue) 224 bool GetSetting(const char* settingName, void *settingValue)
382 { 225 {
383 return XBMC_get_setting(m_Handle, m_Callbacks, settingName, settingValue); 226 return m_Callbacks->GetSetting(m_Handle->addonData, settingName, settingValue);
384 } 227 }
385 228
386 /*! 229 /*!
@@ -390,7 +233,7 @@ namespace ADDON
390 */ 233 */
391 char *TranslateSpecialProtocol(const char *source) 234 char *TranslateSpecialProtocol(const char *source)
392 { 235 {
393 return XBMC_translate_special(m_Handle, m_Callbacks, source); 236 return m_Callbacks->TranslateSpecialProtocol(source);
394 } 237 }
395 238
396 /*! 239 /*!
@@ -405,7 +248,7 @@ namespace ADDON
405 va_start (args, format); 248 va_start (args, format);
406 vsprintf (buffer, format, args); 249 vsprintf (buffer, format, args);
407 va_end (args); 250 va_end (args);
408 return XBMC_queue_notification(m_Handle, m_Callbacks, type, buffer); 251 m_Callbacks->QueueNotification(m_Handle->addonData, type, buffer);
409 } 252 }
410 253
411 /*! 254 /*!
@@ -415,7 +258,7 @@ namespace ADDON
415 */ 258 */
416 bool WakeOnLan(const char* mac) 259 bool WakeOnLan(const char* mac)
417 { 260 {
418 return XBMC_wake_on_lan(m_Handle, m_Callbacks, mac); 261 return m_Callbacks->WakeOnLan(mac);
419 } 262 }
420 263
421 /*! 264 /*!
@@ -425,7 +268,7 @@ namespace ADDON
425 */ 268 */
426 char* UnknownToUTF8(const char* str) 269 char* UnknownToUTF8(const char* str)
427 { 270 {
428 return XBMC_unknown_to_utf8(m_Handle, m_Callbacks, str); 271 return m_Callbacks->UnknownToUTF8(str);
429 } 272 }
430 273
431 /*! 274 /*!
@@ -435,17 +278,16 @@ namespace ADDON
435 */ 278 */
436 char* GetLocalizedString(int dwCode) 279 char* GetLocalizedString(int dwCode)
437 { 280 {
438 return XBMC_get_localized_string(m_Handle, m_Callbacks, dwCode); 281 return m_Callbacks->GetLocalizedString(m_Handle->addonData, dwCode);
439 } 282 }
440 283
441
442 /*! 284 /*!
443 * @brief Get the DVD menu language. 285 * @brief Get the DVD menu language.
444 * @return The language. Must be freed by calling FreeString() when done. 286 * @return The language. Must be freed by calling FreeString() when done.
445 */ 287 */
446 char* GetDVDMenuLanguage() 288 char* GetDVDMenuLanguage()
447 { 289 {
448 return XBMC_get_dvd_menu_language(m_Handle, m_Callbacks); 290 return m_Callbacks->GetDVDMenuLanguage(m_Handle->addonData);
449 } 291 }
450 292
451 /*! 293 /*!
@@ -454,7 +296,7 @@ namespace ADDON
454 */ 296 */
455 void FreeString(char* str) 297 void FreeString(char* str)
456 { 298 {
457 return XBMC_free_string(m_Handle, m_Callbacks, str); 299 m_Callbacks->FreeString(m_Handle->addonData, str);
458 } 300 }
459 301
460 /*! 302 /*!
@@ -465,7 +307,7 @@ namespace ADDON
465 */ 307 */
466 void* OpenFile(const char* strFileName, unsigned int flags) 308 void* OpenFile(const char* strFileName, unsigned int flags)
467 { 309 {
468 return XBMC_open_file(m_Handle, m_Callbacks, strFileName, flags); 310 return m_Callbacks->OpenFile(m_Handle->addonData, strFileName, flags);
469 } 311 }
470 312
471 /*! 313 /*!
@@ -476,7 +318,7 @@ namespace ADDON
476 */ 318 */
477 void* OpenFileForWrite(const char* strFileName, bool bOverWrite) 319 void* OpenFileForWrite(const char* strFileName, bool bOverWrite)
478 { 320 {
479 return XBMC_open_file_for_write(m_Handle, m_Callbacks, strFileName, bOverWrite); 321 return m_Callbacks->OpenFileForWrite(m_Handle->addonData, strFileName, bOverWrite);
480 } 322 }
481 323
482 /*! 324 /*!
@@ -490,7 +332,7 @@ namespace ADDON
490 */ 332 */
491 ssize_t ReadFile(void* file, void* lpBuf, size_t uiBufSize) 333 ssize_t ReadFile(void* file, void* lpBuf, size_t uiBufSize)
492 { 334 {
493 return XBMC_read_file(m_Handle, m_Callbacks, file, lpBuf, uiBufSize); 335 return m_Callbacks->ReadFile(m_Handle->addonData, file, lpBuf, uiBufSize);
494 } 336 }
495 337
496 /*! 338 /*!
@@ -502,7 +344,7 @@ namespace ADDON
502 */ 344 */
503 bool ReadFileString(void* file, char *szLine, int iLineLength) 345 bool ReadFileString(void* file, char *szLine, int iLineLength)
504 { 346 {
505 return XBMC_read_file_string(m_Handle, m_Callbacks, file, szLine, iLineLength); 347 return m_Callbacks->ReadFileString(m_Handle->addonData, file, szLine, iLineLength);
506 } 348 }
507 349
508 /*! 350 /*!
@@ -516,7 +358,7 @@ namespace ADDON
516 */ 358 */
517 ssize_t WriteFile(void* file, const void* lpBuf, size_t uiBufSize) 359 ssize_t WriteFile(void* file, const void* lpBuf, size_t uiBufSize)
518 { 360 {
519 return XBMC_write_file(m_Handle, m_Callbacks, file, lpBuf, uiBufSize); 361 return m_Callbacks->WriteFile(m_Handle->addonData, file, lpBuf, uiBufSize);
520 } 362 }
521 363
522 /*! 364 /*!
@@ -525,7 +367,7 @@ namespace ADDON
525 */ 367 */
526 void FlushFile(void* file) 368 void FlushFile(void* file)
527 { 369 {
528 return XBMC_flush_file(m_Handle, m_Callbacks, file); 370 m_Callbacks->FlushFile(m_Handle->addonData, file);
529 } 371 }
530 372
531 /*! 373 /*!
@@ -537,7 +379,7 @@ namespace ADDON
537 */ 379 */
538 int64_t SeekFile(void* file, int64_t iFilePosition, int iWhence) 380 int64_t SeekFile(void* file, int64_t iFilePosition, int iWhence)
539 { 381 {
540 return XBMC_seek_file(m_Handle, m_Callbacks, file, iFilePosition, iWhence); 382 return m_Callbacks->SeekFile(m_Handle->addonData, file, iFilePosition, iWhence);
541 } 383 }
542 384
543 /*! 385 /*!
@@ -548,7 +390,7 @@ namespace ADDON
548 */ 390 */
549 int TruncateFile(void* file, int64_t iSize) 391 int TruncateFile(void* file, int64_t iSize)
550 { 392 {
551 return XBMC_truncate_file(m_Handle, m_Callbacks, file, iSize); 393 return m_Callbacks->TruncateFile(m_Handle->addonData, file, iSize);
552 } 394 }
553 395
554 /*! 396 /*!
@@ -558,7 +400,7 @@ namespace ADDON
558 */ 400 */
559 int64_t GetFilePosition(void* file) 401 int64_t GetFilePosition(void* file)
560 { 402 {
561 return XBMC_get_file_position(m_Handle, m_Callbacks, file); 403 return m_Callbacks->GetFilePosition(m_Handle->addonData, file);
562 } 404 }
563 405
564 /*! 406 /*!
@@ -568,7 +410,7 @@ namespace ADDON
568 */ 410 */
569 int64_t GetFileLength(void* file) 411 int64_t GetFileLength(void* file)
570 { 412 {
571 return XBMC_get_file_length(m_Handle, m_Callbacks, file); 413 return m_Callbacks->GetFileLength(m_Handle->addonData, file);
572 } 414 }
573 415
574 /*! 416 /*!
@@ -578,7 +420,7 @@ namespace ADDON
578 */ 420 */
579 double GetFileDownloadSpeed(void* file) 421 double GetFileDownloadSpeed(void* file)
580 { 422 {
581 return XBMC_get_file_download_speed(m_Handle, m_Callbacks, file); 423 return m_Callbacks->GetFileDownloadSpeed(m_Handle->addonData, file);
582 } 424 }
583 425
584 /*! 426 /*!
@@ -587,7 +429,7 @@ namespace ADDON
587 */ 429 */
588 void CloseFile(void* file) 430 void CloseFile(void* file)
589 { 431 {
590 return XBMC_close_file(m_Handle, m_Callbacks, file); 432 m_Callbacks->CloseFile(m_Handle->addonData, file);
591 } 433 }
592 434
593 /*! 435 /*!
@@ -597,7 +439,7 @@ namespace ADDON
597 */ 439 */
598 int GetFileChunkSize(void* file) 440 int GetFileChunkSize(void* file)
599 { 441 {
600 return XBMC_get_file_chunk_size(m_Handle, m_Callbacks, file); 442 return m_Callbacks->GetFileChunkSize(m_Handle->addonData, file);
601 } 443 }
602 444
603 /*! 445 /*!
@@ -608,7 +450,7 @@ namespace ADDON
608 */ 450 */
609 bool FileExists(const char *strFileName, bool bUseCache) 451 bool FileExists(const char *strFileName, bool bUseCache)
610 { 452 {
611 return XBMC_file_exists(m_Handle, m_Callbacks, strFileName, bUseCache); 453 return m_Callbacks->FileExists(m_Handle->addonData, strFileName, bUseCache);
612 } 454 }
613 455
614 /*! 456 /*!
@@ -619,7 +461,7 @@ namespace ADDON
619 */ 461 */
620 int StatFile(const char *strFileName, struct __stat64* buffer) 462 int StatFile(const char *strFileName, struct __stat64* buffer)
621 { 463 {
622 return XBMC_stat_file(m_Handle, m_Callbacks, strFileName, buffer); 464 return m_Callbacks->StatFile(m_Handle->addonData, strFileName, buffer);
623 } 465 }
624 466
625 /*! 467 /*!
@@ -629,7 +471,7 @@ namespace ADDON
629 */ 471 */
630 bool DeleteFile(const char *strFileName) 472 bool DeleteFile(const char *strFileName)
631 { 473 {
632 return XBMC_delete_file(m_Handle, m_Callbacks, strFileName); 474 return m_Callbacks->DeleteFile(m_Handle->addonData, strFileName);
633 } 475 }
634 476
635 /*! 477 /*!
@@ -639,7 +481,7 @@ namespace ADDON
639 */ 481 */
640 bool CanOpenDirectory(const char* strUrl) 482 bool CanOpenDirectory(const char* strUrl)
641 { 483 {
642 return XBMC_can_open_directory(m_Handle, m_Callbacks, strUrl); 484 return m_Callbacks->CanOpenDirectory(m_Handle->addonData, strUrl);
643 } 485 }
644 486
645 /*! 487 /*!
@@ -649,7 +491,7 @@ namespace ADDON
649 */ 491 */
650 bool CreateDirectory(const char *strPath) 492 bool CreateDirectory(const char *strPath)
651 { 493 {
652 return XBMC_create_directory(m_Handle, m_Callbacks, strPath); 494 return m_Callbacks->CreateDirectory(m_Handle->addonData, strPath);
653 } 495 }
654 496
655 /*! 497 /*!
@@ -659,7 +501,7 @@ namespace ADDON
659 */ 501 */
660 bool DirectoryExists(const char *strPath) 502 bool DirectoryExists(const char *strPath)
661 { 503 {
662 return XBMC_directory_exists(m_Handle, m_Callbacks, strPath); 504 return m_Callbacks->DirectoryExists(m_Handle->addonData, strPath);
663 } 505 }
664 506
665 /*! 507 /*!
@@ -669,7 +511,7 @@ namespace ADDON
669 */ 511 */
670 bool RemoveDirectory(const char *strPath) 512 bool RemoveDirectory(const char *strPath)
671 { 513 {
672 return XBMC_remove_directory(m_Handle, m_Callbacks, strPath); 514 return m_Callbacks->RemoveDirectory(m_Handle->addonData, strPath);
673 } 515 }
674 516
675 /*! 517 /*!
@@ -682,7 +524,7 @@ namespace ADDON
682 */ 524 */
683 bool GetDirectory(const char *strPath, const char* mask, VFSDirEntry** items, unsigned int* num_items) 525 bool GetDirectory(const char *strPath, const char* mask, VFSDirEntry** items, unsigned int* num_items)
684 { 526 {
685 return XBMC_get_directory(m_Handle, m_Callbacks, strPath, mask, items, num_items); 527 return m_Callbacks->GetDirectory(m_Handle->addonData, strPath, mask, items, num_items);
686 } 528 }
687 529
688 /*! 530 /*!
@@ -692,7 +534,7 @@ namespace ADDON
692 */ 534 */
693 void FreeDirectory(VFSDirEntry* items, unsigned int num_items) 535 void FreeDirectory(VFSDirEntry* items, unsigned int num_items)
694 { 536 {
695 return XBMC_free_directory(m_Handle, m_Callbacks, items, num_items); 537 m_Callbacks->FreeDirectory(m_Handle->addonData, items, num_items);
696 } 538 }
697 539
698 /*! 540 /*!
@@ -701,7 +543,7 @@ namespace ADDON
701 */ 543 */
702 void* CURLCreate(const char* strURL) 544 void* CURLCreate(const char* strURL)
703 { 545 {
704 return XBMC_curl_create(m_Handle, m_Callbacks, strURL); 546 return m_Callbacks->CURLCreate(m_Handle->addonData, strURL);
705 } 547 }
706 548
707 /*! 549 /*!
@@ -713,7 +555,7 @@ namespace ADDON
713 */ 555 */
714 bool CURLAddOption(void* file, XFILE::CURLOPTIONTYPE type, const char* name, const char * value) 556 bool CURLAddOption(void* file, XFILE::CURLOPTIONTYPE type, const char* name, const char * value)
715 { 557 {
716 return XBMC_curl_add_option(m_Handle, m_Callbacks, file, type, name, value); 558 return m_Callbacks->CURLAddOption(m_Handle->addonData, file, type, name, value);
717 } 559 }
718 560
719 /*! 561 /*!
@@ -723,54 +565,11 @@ namespace ADDON
723 */ 565 */
724 bool CURLOpen(void* file, unsigned int flags) 566 bool CURLOpen(void* file, unsigned int flags)
725 { 567 {
726 return XBMC_curl_open(m_Handle, m_Callbacks, file, flags); 568 return m_Callbacks->CURLOpen(m_Handle->addonData, file, flags);
727 } 569 }
728
729 protected:
730 void* (*XBMC_register_me)(void *HANDLE);
731 void (*XBMC_unregister_me)(void *HANDLE, void* CB);
732 void (*XBMC_log)(void *HANDLE, void* CB, const addon_log_t loglevel, const char *msg);
733 bool (*XBMC_get_setting)(void *HANDLE, void* CB, const char* settingName, void *settingValue);
734 char*(*XBMC_translate_special)(void *HANDLE, void* CB, const char* source);
735 void (*XBMC_queue_notification)(void *HANDLE, void* CB, const queue_msg_t type, const char *msg);
736 bool (*XBMC_wake_on_lan)(void *HANDLE, void* CB, const char* mac);
737 char* (*XBMC_unknown_to_utf8)(void *HANDLE, void* CB, const char* str);
738 char* (*XBMC_get_localized_string)(void *HANDLE, void* CB, int dwCode);
739 char* (*XBMC_get_dvd_menu_language)(void *HANDLE, void* CB);
740 void (*XBMC_free_string)(void *HANDLE, void* CB, char* str);
741 void* (*XBMC_open_file)(void *HANDLE, void* CB, const char* strFileName, unsigned int flags);
742 void* (*XBMC_open_file_for_write)(void *HANDLE, void* CB, const char* strFileName, bool bOverWrite);
743 ssize_t (*XBMC_read_file)(void *HANDLE, void* CB, void* file, void* lpBuf, size_t uiBufSize);
744 bool (*XBMC_read_file_string)(void *HANDLE, void* CB, void* file, char *szLine, int iLineLength);
745 ssize_t(*XBMC_write_file)(void *HANDLE, void* CB, void* file, const void* lpBuf, size_t uiBufSize);
746 void (*XBMC_flush_file)(void *HANDLE, void* CB, void* file);
747 int64_t (*XBMC_seek_file)(void *HANDLE, void* CB, void* file, int64_t iFilePosition, int iWhence);
748 int (*XBMC_truncate_file)(void *HANDLE, void* CB, void* file, int64_t iSize);
749 int64_t (*XBMC_get_file_position)(void *HANDLE, void* CB, void* file);
750 int64_t (*XBMC_get_file_length)(void *HANDLE, void* CB, void* file);
751 double(*XBMC_get_file_download_speed)(void *HANDLE, void* CB, void* file);
752 void (*XBMC_close_file)(void *HANDLE, void* CB, void* file);
753 int (*XBMC_get_file_chunk_size)(void *HANDLE, void* CB, void* file);
754 bool (*XBMC_file_exists)(void *HANDLE, void* CB, const char *strFileName, bool bUseCache);
755 int (*XBMC_stat_file)(void *HANDLE, void* CB, const char *strFileName, struct __stat64* buffer);
756 bool (*XBMC_delete_file)(void *HANDLE, void* CB, const char *strFileName);
757 bool (*XBMC_can_open_directory)(void *HANDLE, void* CB, const char* strURL);
758 bool (*XBMC_create_directory)(void *HANDLE, void* CB, const char* strPath);
759 bool (*XBMC_directory_exists)(void *HANDLE, void* CB, const char* strPath);
760 bool (*XBMC_remove_directory)(void *HANDLE, void* CB, const char* strPath);
761 bool (*XBMC_get_directory)(void *HANDLE, void* CB, const char* strPath, const char* mask, VFSDirEntry** items, unsigned int* num_items);
762 void (*XBMC_free_directory)(void *HANDLE, void* CB, VFSDirEntry* items, unsigned int num_items);
763 void* (*XBMC_curl_create)(void *HANDLE, void* CB, const char* strURL);
764 bool (*XBMC_curl_add_option)(void *HANDLE, void* CB, void *file, XFILE::CURLOPTIONTYPE type, const char* name, const char *value);
765 bool (*XBMC_curl_open)(void *m_Handle, void *m_Callbacks, void *file, unsigned int flags);
766 570
767 private: 571 private:
768 void *m_libXBMC_addon; 572 AddonCB* m_Handle;
769 void *m_Handle; 573 KodiAPI::AddOn::CB_AddOnLib *m_Callbacks;
770 void *m_Callbacks;
771 struct cb_array
772 {
773 const char* libPath;
774 };
775 }; 574 };
776}; 575};