diff options
author | Rainer Hochecker <fernetmenta@online.de> | 2016-04-02 18:58:02 +0200 |
---|---|---|
committer | Rainer Hochecker <fernetmenta@online.de> | 2016-04-02 18:58:02 +0200 |
commit | def109d4f20315ed812efc3d006325ddb9fd720d (patch) | |
tree | 5e8ce9d21e4053e59608606c0cd15e0e2a06dc1d | |
parent | 0f1fa05a539bc5c55d09ed2f7262db091ede31bf (diff) | |
parent | c3112f0b7083f5fbedfc18a8812770102df4a150 (diff) |
Merge pull request #9499 from mapfau/translatepath
Add TranslateSpecialPath to libAddon_helper interface
4 files changed, 44 insertions, 0 deletions
diff --git a/lib/addons/library.xbmc.addon/libXBMC_addon.cpp b/lib/addons/library.xbmc.addon/libXBMC_addon.cpp index 50738d9e09..e3768854cb 100644 --- a/lib/addons/library.xbmc.addon/libXBMC_addon.cpp +++ b/lib/addons/library.xbmc.addon/libXBMC_addon.cpp @@ -78,6 +78,14 @@ DLLEXPORT bool XBMC_get_setting(void *hdl, void* cb, const char* settingName, vo return ((CB_AddOnLib*)cb)->GetSetting(((AddonCB*)hdl)->addonData, settingName, settingValue); } +DLLEXPORT char* XBMC_translate_special(void *hdl, void* cb, const char* source) +{ + if (cb == NULL) + return NULL; + + return ((CB_AddOnLib*)cb)->TranslateSpecialProtocol(source); +} + DLLEXPORT void XBMC_queue_notification(void *hdl, void* cb, const queue_msg_t type, const char *msg) { if (cb == NULL) diff --git a/xbmc/addons/binary/interfaces/api1/Addon/AddonCallbacksAddon.cpp b/xbmc/addons/binary/interfaces/api1/Addon/AddonCallbacksAddon.cpp index 4034d894c0..ea974a0f0c 100644 --- a/xbmc/addons/binary/interfaces/api1/Addon/AddonCallbacksAddon.cpp +++ b/xbmc/addons/binary/interfaces/api1/Addon/AddonCallbacksAddon.cpp @@ -34,6 +34,7 @@ #include "utils/XMLUtils.h" #include "URL.h" #include "addons/kodi-addon-dev-kit/include/kodi/kodi_vfs_types.h" +#include "filesystem/SpecialProtocol.h" using namespace ADDON; using namespace XFILE; @@ -55,6 +56,7 @@ CAddonCallbacksAddon::CAddonCallbacksAddon(CAddon* addon) m_callbacks->QueueNotification = QueueNotification; m_callbacks->WakeOnLan = WakeOnLan; m_callbacks->GetSetting = GetAddonSetting; + m_callbacks->TranslateSpecialProtocol = TranslateSpecialProtocol; m_callbacks->UnknownToUTF8 = UnknownToUTF8; m_callbacks->GetLocalizedString = GetLocalizedString; m_callbacks->GetDVDMenuLanguage = GetDVDMenuLanguage; @@ -275,6 +277,22 @@ bool CAddonCallbacksAddon::GetAddonSetting(void *addonData, const char *strSetti return false; } +char* CAddonCallbacksAddon::TranslateSpecialProtocol(const char *strSource) +{ + try + { + if (strSource) + return strdup(CSpecialProtocol::TranslatePath(strSource).c_str()); + else + return NULL; + } + catch (std::exception &e) + { + CLog::Log(LOGERROR, "CAddonCallbacksAddon - %s - exception '%s' caught", __FUNCTION__, e.what()); + return NULL; + } +} + char* CAddonCallbacksAddon::UnknownToUTF8(const char *strSource) { std::string string; diff --git a/xbmc/addons/binary/interfaces/api1/Addon/AddonCallbacksAddon.h b/xbmc/addons/binary/interfaces/api1/Addon/AddonCallbacksAddon.h index 58d59e8e7a..c9d3bfea53 100644 --- a/xbmc/addons/binary/interfaces/api1/Addon/AddonCallbacksAddon.h +++ b/xbmc/addons/binary/interfaces/api1/Addon/AddonCallbacksAddon.h @@ -49,6 +49,7 @@ typedef void (*AddOnLogCallback)(void *addonData, const ADDON::addon_log_t logle typedef void (*AddOnQueueNotification)(void *addonData, const ADDON::queue_msg_t type, const char *msg); typedef bool (*AddOnWakeOnLan)(const char* mac); typedef bool (*AddOnGetSetting)(void *addonData, const char *settingName, void *settingValue); +typedef char* (*AddonTranslateSpecialProtocol)(const char *strSource); typedef char* (*AddOnUnknownToUTF8)(const char *sourceDest); typedef char* (*AddOnGetLocalizedString)(const void* addonData, long dwCode); typedef char* (*AddOnGetDVDMenuLanguage)(const void* addonData); @@ -86,6 +87,7 @@ typedef struct CB_AddOn AddOnQueueNotification QueueNotification; AddOnWakeOnLan WakeOnLan; AddOnGetSetting GetSetting; + AddonTranslateSpecialProtocol TranslateSpecialProtocol; AddOnUnknownToUTF8 UnknownToUTF8; AddOnGetLocalizedString GetLocalizedString; AddOnGetDVDMenuLanguage GetDVDMenuLanguage; @@ -131,6 +133,7 @@ public: static void AddOnLog(void *addonData, const ADDON::addon_log_t addonLogLevel, const char *strMessage); static bool GetAddonSetting(void *addonData, const char *strSettingName, void *settingValue); + static char *TranslateSpecialProtocol(const char *strSource); static void QueueNotification(void *addonData, const ADDON::queue_msg_t type, const char *strMessage); static bool WakeOnLan(const char *mac); static char* UnknownToUTF8(const char *strSource); 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 b32ad86b33..ddeb1db87c 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 @@ -179,6 +179,10 @@ namespace ADDON dlsym(m_libXBMC_addon, "XBMC_get_setting"); if (XBMC_get_setting == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + XBMC_translate_special = (char* (*)(void* HANDLE, void* CB, const char* source)) + dlsym(m_libXBMC_addon, "XBMC_translate_special"); + if (XBMC_translate_special == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + XBMC_queue_notification = (void (*)(void* HANDLE, void* CB, const queue_msg_t loglevel, const char *msg)) dlsym(m_libXBMC_addon, "XBMC_queue_notification"); if (XBMC_queue_notification == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } @@ -334,6 +338,16 @@ namespace ADDON } /*! + * @brief Translates a special protocol folder. + * @param source The file / folder to translate. + * @return The string translated to resolved path. Must be freed by calling FreeString() when done. + */ + char *TranslateSpecialProtocol(const char *source) + { + return XBMC_translate_special(m_Handle, m_Callbacks, source); + } + + /*! * @brief Queue a notification in the GUI. * @param type The message type. * @param format The format of the message to pass to display in XBMC. @@ -671,6 +685,7 @@ namespace ADDON void (*XBMC_unregister_me)(void *HANDLE, void* CB); void (*XBMC_log)(void *HANDLE, void* CB, const addon_log_t loglevel, const char *msg); bool (*XBMC_get_setting)(void *HANDLE, void* CB, const char* settingName, void *settingValue); + char*(*XBMC_translate_special)(void *HANDLE, void* CB, const char* source); void (*XBMC_queue_notification)(void *HANDLE, void* CB, const queue_msg_t type, const char *msg); bool (*XBMC_wake_on_lan)(void *HANDLE, void* CB, const char* mac); char* (*XBMC_unknown_to_utf8)(void *HANDLE, void* CB, const char* str); |