[bluray] Fix stream info/language retrieval for blurays in non-nav mode.
[vuplus_xbmc] / lib / addons / library.xbmc.addon / libXBMC_addon.cpp
1 /*
2  *      Copyright (C) 2012-2013 Team XBMC
3  *      http://www.xbmc.org
4  *
5  *  This Program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2, or (at your option)
8  *  any later version.
9  *
10  *  This Program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with XBMC; see the file COPYING.  If not, write to
17  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
18  *  http://www.gnu.org/copyleft/gpl.html
19  *
20  */
21
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <stdarg.h>
25 #include <string>
26 #include "../../../addons/library.xbmc.addon/libXBMC_addon.h"
27 #include "../../../xbmc/addons/AddonCallbacks.h"
28
29 #ifdef _WIN32
30 #include <windows.h>
31 #define DLLEXPORT __declspec(dllexport)
32 #else
33 #define DLLEXPORT
34 #endif
35
36
37 using namespace std;
38 using namespace ADDON;
39
40 extern "C"
41 {
42
43 DLLEXPORT void* XBMC_register_me(void *hdl)
44 {
45   CB_AddOnLib *cb = NULL;
46   if (!hdl)
47     fprintf(stderr, "libXBMC_addon-ERROR: XBMC_register_me is called with NULL handle !!!\n");
48   else
49   {
50     cb = ((AddonCB*)hdl)->AddOnLib_RegisterMe(((AddonCB*)hdl)->addonData);
51     if (!cb)
52       fprintf(stderr, "libXBMC_addon-ERROR: XBMC_register_me can't get callback table from XBMC !!!\n");
53   }
54   return cb;
55 }
56
57 DLLEXPORT void XBMC_unregister_me(void *hdl, void* cb)
58 {
59   if (hdl && cb)
60     ((AddonCB*)hdl)->AddOnLib_UnRegisterMe(((AddonCB*)hdl)->addonData, ((CB_AddOnLib*)cb));
61 }
62
63 DLLEXPORT void XBMC_log(void *hdl, void* cb, const addon_log_t loglevel, const char *msg)
64 {
65   if (cb == NULL)
66     return;
67
68   ((CB_AddOnLib*)cb)->Log(((AddonCB*)hdl)->addonData, loglevel, msg);
69 }
70
71 DLLEXPORT bool XBMC_get_setting(void *hdl, void* cb, const char* settingName, void *settingValue)
72 {
73   if (cb == NULL)
74     return false;
75
76   return ((CB_AddOnLib*)cb)->GetSetting(((AddonCB*)hdl)->addonData, settingName, settingValue);
77 }
78
79 DLLEXPORT void XBMC_queue_notification(void *hdl, void* cb, const queue_msg_t type, const char *msg)
80 {
81   if (cb == NULL)
82     return;
83
84   ((CB_AddOnLib*)cb)->QueueNotification(((AddonCB*)hdl)->addonData, type, msg);
85 }
86
87 DLLEXPORT bool XBMC_wake_on_lan(void* hdl, void* cb, char* mac)
88 {
89   if (cb == NULL)
90     return false;
91
92   return ((CB_AddOnLib*)cb)->WakeOnLan(mac);
93 }
94
95 DLLEXPORT char* XBMC_unknown_to_utf8(void *hdl, void* cb, const char* str)
96 {
97   if (cb == NULL)
98     return NULL;
99
100   return ((CB_AddOnLib*)cb)->UnknownToUTF8(str);
101 }
102
103 DLLEXPORT char* XBMC_get_localized_string(void *hdl, void* cb, int dwCode)
104 {
105   if (cb == NULL)
106     return "";
107
108   return ((CB_AddOnLib*)cb)->GetLocalizedString(((AddonCB*)hdl)->addonData, dwCode);
109 }
110
111 DLLEXPORT char* XBMC_get_dvd_menu_language(void *hdl, void* cb)
112 {
113   if (cb == NULL)
114     return "";
115
116   return ((CB_AddOnLib*)cb)->GetDVDMenuLanguage(((AddonCB*)hdl)->addonData);
117 }
118
119 DLLEXPORT void XBMC_free_string(void* hdl, void* cb, char* str)
120 {
121   if (cb == NULL)
122     return;
123
124   ((CB_AddOnLib*)cb)->FreeString(((AddonCB*)hdl)->addonData, str);
125 }
126
127 DLLEXPORT void* XBMC_open_file(void *hdl, void* cb, const char* strFileName, unsigned int flags)
128 {
129   if (cb == NULL)
130     return NULL;
131
132   return ((CB_AddOnLib*)cb)->OpenFile(((AddonCB*)hdl)->addonData, strFileName, flags);
133 }
134
135 DLLEXPORT void* XBMC_open_file_for_write(void *hdl, void* cb, const char* strFileName, bool bOverWrite)
136 {
137   if (cb == NULL)
138     return NULL;
139
140   return ((CB_AddOnLib*)cb)->OpenFileForWrite(((AddonCB*)hdl)->addonData, strFileName, bOverWrite);
141 }
142
143 DLLEXPORT unsigned int XBMC_read_file(void *hdl, void* cb, void* file, void* lpBuf, int64_t uiBufSize)
144 {
145   if (cb == NULL)
146     return 0;
147
148   return ((CB_AddOnLib*)cb)->ReadFile(((AddonCB*)hdl)->addonData, file, lpBuf, uiBufSize);
149 }
150
151 DLLEXPORT bool XBMC_read_file_string(void *hdl, void* cb, void* file, char *szLine, int iLineLength)
152 {
153   if (cb == NULL)
154     return false;
155
156   return ((CB_AddOnLib*)cb)->ReadFileString(((AddonCB*)hdl)->addonData, file, szLine, iLineLength);
157 }
158
159 DLLEXPORT int XBMC_write_file(void *hdl, void* cb, void* file, const void* lpBuf, int64_t uiBufSize)
160 {
161   if (cb == NULL)
162     return false;
163
164   return ((CB_AddOnLib*)cb)->WriteFile(((AddonCB*)hdl)->addonData, file, lpBuf, uiBufSize);
165 }
166
167 DLLEXPORT void XBMC_flush_file(void *hdl, void* cb, void* file)
168 {
169   if (cb == NULL)
170     return;
171
172   ((CB_AddOnLib*)cb)->FlushFile(((AddonCB*)hdl)->addonData, file);
173 }
174
175 DLLEXPORT int64_t XBMC_seek_file(void *hdl, void* cb, void* file, int64_t iFilePosition, int iWhence)
176 {
177   if (cb == NULL)
178     return 0;
179
180   return ((CB_AddOnLib*)cb)->SeekFile(((AddonCB*)hdl)->addonData, file, iFilePosition, iWhence);
181 }
182
183 DLLEXPORT int XBMC_truncate_file(void *hdl, void* cb, void* file, int64_t iSize)
184 {
185   if (cb == NULL)
186     return 0;
187
188   return ((CB_AddOnLib*)cb)->TruncateFile(((AddonCB*)hdl)->addonData, file, iSize);
189 }
190
191 DLLEXPORT int64_t XBMC_get_file_position(void *hdl, void* cb, void* file)
192 {
193   if (cb == NULL)
194     return 0;
195
196   return ((CB_AddOnLib*)cb)->GetFilePosition(((AddonCB*)hdl)->addonData, file);
197 }
198
199 DLLEXPORT int64_t XBMC_get_file_length(void *hdl, void* cb, void* file)
200 {
201   if (cb == NULL)
202     return 0;
203
204   return ((CB_AddOnLib*)cb)->GetFileLength(((AddonCB*)hdl)->addonData, file);
205 }
206
207 DLLEXPORT void XBMC_close_file(void *hdl, void* cb, void* file)
208 {
209   if (cb == NULL)
210     return;
211
212   ((CB_AddOnLib*)cb)->CloseFile(((AddonCB*)hdl)->addonData, file);
213 }
214
215 DLLEXPORT int XBMC_get_file_chunk_size(void *hdl, void* cb, void* file)
216 {
217   if (cb == NULL)
218     return 0;
219
220   return ((CB_AddOnLib*)cb)->GetFileChunkSize(((AddonCB*)hdl)->addonData, file);
221 }
222
223 DLLEXPORT bool XBMC_file_exists(void *hdl, void* cb, const char *strFileName, bool bUseCache)
224 {
225   if (cb == NULL)
226     return false;
227
228   return ((CB_AddOnLib*)cb)->FileExists(((AddonCB*)hdl)->addonData, strFileName, bUseCache);
229 }
230
231 DLLEXPORT int XBMC_stat_file(void *hdl, void* cb, const char *strFileName, struct ::__stat64* buffer)
232 {
233   if (cb == NULL)
234     return -1;
235
236   return ((CB_AddOnLib*)cb)->StatFile(((AddonCB*)hdl)->addonData, strFileName, buffer);
237 }
238
239 DLLEXPORT bool XBMC_delete_file(void *hdl, void* cb, const char *strFileName)
240 {
241   if (cb == NULL)
242     return false;
243
244   return ((CB_AddOnLib*)cb)->DeleteFile(((AddonCB*)hdl)->addonData, strFileName);
245 }
246
247 DLLEXPORT bool XBMC_can_open_directory(void *hdl, void* cb, const char* strURL)
248 {
249   if (cb == NULL)
250     return 0;
251
252   return ((CB_AddOnLib*)cb)->CanOpenDirectory(((AddonCB*)hdl)->addonData, strURL);
253 }
254
255 DLLEXPORT bool XBMC_create_directory(void *hdl, void* cb, const char *strPath)
256 {
257   if (cb == NULL)
258     return false;
259
260   return ((CB_AddOnLib*)cb)->CreateDirectory(((AddonCB*)hdl)->addonData, strPath);
261 }
262
263 DLLEXPORT bool XBMC_directory_exists(void *hdl, void* cb, const char *strPath)
264 {
265   if (cb == NULL)
266     return false;
267
268   return ((CB_AddOnLib*)cb)->DirectoryExists(((AddonCB*)hdl)->addonData, strPath);
269 }
270
271 DLLEXPORT bool XBMC_remove_directory(void *hdl, void* cb, const char *strPath)
272 {
273   if (cb == NULL)
274     return false;
275
276   return ((CB_AddOnLib*)cb)->RemoveDirectory(((AddonCB*)hdl)->addonData, strPath);
277 }
278
279 };