aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRainer Hochecker <fernetmenta@online.de>2016-04-02 18:58:02 +0200
committerRainer Hochecker <fernetmenta@online.de>2016-04-02 18:58:02 +0200
commitdef109d4f20315ed812efc3d006325ddb9fd720d (patch)
tree5e8ce9d21e4053e59608606c0cd15e0e2a06dc1d
parent0f1fa05a539bc5c55d09ed2f7262db091ede31bf (diff)
parentc3112f0b7083f5fbedfc18a8812770102df4a150 (diff)
Merge pull request #9499 from mapfau/translatepath
Add TranslateSpecialPath to libAddon_helper interface
-rw-r--r--lib/addons/library.xbmc.addon/libXBMC_addon.cpp8
-rw-r--r--xbmc/addons/binary/interfaces/api1/Addon/AddonCallbacksAddon.cpp18
-rw-r--r--xbmc/addons/binary/interfaces/api1/Addon/AddonCallbacksAddon.h3
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h15
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);