diff options
author | Lars Op den Kamp <lars@opdenkamp.eu> | 2012-09-18 12:00:18 +0200 |
---|---|---|
committer | Lars Op den Kamp <lars@opdenkamp.eu> | 2012-09-18 12:07:56 +0200 |
commit | 9a91adf4777ad13f721becf7d1bd732060ce6032 (patch) | |
tree | 2decbaa17b9ad2236fca2e606374d2bbeb5b8ac7 | |
parent | e77b53c68b3beb9380c1d2a5151d2d5111bb93fd (diff) |
added CanOpenDirectory() to AddonCallbacksAddon
-rw-r--r-- | addons/library.xbmc.addon/libXBMC_addon.h | 11 | ||||
-rw-r--r-- | lib/addons/library.xbmc.addon/libXBMC_addon.cpp | 8 | ||||
-rw-r--r-- | xbmc/addons/AddonCallbacks.h | 2 | ||||
-rw-r--r-- | xbmc/addons/AddonCallbacksAddon.cpp | 25 | ||||
-rw-r--r-- | xbmc/addons/AddonCallbacksAddon.h | 1 |
5 files changed, 47 insertions, 0 deletions
diff --git a/addons/library.xbmc.addon/libXBMC_addon.h b/addons/library.xbmc.addon/libXBMC_addon.h index 8712a5efb2..ecc2fda733 100644 --- a/addons/library.xbmc.addon/libXBMC_addon.h +++ b/addons/library.xbmc.addon/libXBMC_addon.h @@ -203,6 +203,10 @@ namespace ADDON dlsym(m_libXBMC_addon, "XBMC_get_file_chunk_size"); if (GetFileChunkSize == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + CanOpenDirectory = (bool (*)(const char* strURL)) + dlsym(m_libXBMC_addon, "XBMC_can_open_directory"); + if (CanOpenDirectory == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + return XBMC_register_me(m_Handle) > 0; } @@ -341,6 +345,13 @@ namespace ADDON */ int (*GetFileChunkSize)(void* file); + /*! + * @brief Checks whether a directory can be opened. + * @param strUrl The URL of the directory to check. + * @return True when it can be opened, false otherwise. + */ + bool (*CanOpenDirectory)(const char* strUrl); + protected: int (*XBMC_register_me)(void *HANDLE); void (*XBMC_unregister_me)(); diff --git a/lib/addons/library.xbmc.addon/libXBMC_addon.cpp b/lib/addons/library.xbmc.addon/libXBMC_addon.cpp index 766cac07ca..b941be1e4e 100644 --- a/lib/addons/library.xbmc.addon/libXBMC_addon.cpp +++ b/lib/addons/library.xbmc.addon/libXBMC_addon.cpp @@ -221,4 +221,12 @@ DLLEXPORT int64_t XBMC_get_file_chunk_size(void* file) return m_cb->GetFileChunkSize(m_Handle->addonData, file); } +DLLEXPORT bool XBMC_can_open_directory(const char* strURL) +{ + if (m_cb == NULL) + return 0; + + return m_cb->CanOpenDirectory(m_Handle->addonData, strURL); +} + }; diff --git a/xbmc/addons/AddonCallbacks.h b/xbmc/addons/AddonCallbacks.h index f77cf38145..fe375e9f3c 100644 --- a/xbmc/addons/AddonCallbacks.h +++ b/xbmc/addons/AddonCallbacks.h @@ -43,6 +43,7 @@ typedef int64_t (*AddOnGetFilePosition)(const void* addonData, void* file); typedef int64_t (*AddOnGetFileLength)(const void* addonData, void* file); typedef void (*AddOnCloseFile)(const void* addonData, void* file); typedef int (*AddOnGetFileChunkSize)(const void* addonData, void* file); +typedef bool (*AddOnCanOpenDirectory)(const void* addonData, const char* strURL); typedef struct CB_AddOn { @@ -65,6 +66,7 @@ typedef struct CB_AddOn AddOnGetFileLength GetFileLength; AddOnCloseFile CloseFile; AddOnGetFileChunkSize GetFileChunkSize; + AddOnCanOpenDirectory CanOpenDirectory; } CB_AddOnLib; typedef void (*GUILock)(); diff --git a/xbmc/addons/AddonCallbacksAddon.cpp b/xbmc/addons/AddonCallbacksAddon.cpp index 5f3e66bc32..1b85df9b5c 100644 --- a/xbmc/addons/AddonCallbacksAddon.cpp +++ b/xbmc/addons/AddonCallbacksAddon.cpp @@ -25,6 +25,9 @@ #include "LangInfo.h" #include "dialogs/GUIDialogKaiToast.h" #include "filesystem/File.h" +#include "filesystem/Directory.h" +#include "filesystem/SMBDirectory.h" +#include "utils/URIUtils.h" using namespace XFILE; @@ -56,6 +59,8 @@ CAddonCallbacksAddon::CAddonCallbacksAddon(CAddon* addon) m_callbacks->GetFileLength = GetFileLength; m_callbacks->CloseFile = CloseFile; m_callbacks->GetFileChunkSize = GetFileChunkSize; + + m_callbacks->CanOpenDirectory = CanOpenDirectory; } CAddonCallbacksAddon::~CAddonCallbacksAddon() @@ -421,4 +426,24 @@ int CAddonCallbacksAddon::GetFileChunkSize(const void* addonData, void* file) return cfile->GetChunkSize(); } +bool CAddonCallbacksAddon::CanOpenDirectory(const void* addonData, const char* strURL) +{ + CAddonCallbacks* helper = (CAddonCallbacks*) addonData; + if (!helper) + return false; + + if (CDirectory::Exists(strURL)) + { + // check permissions + if (URIUtils::IsSmb(strURL)) + { + CSMBDirectory directory; + return directory.Open(CURL(strURL)); + } + + return true; + } + return false; +} + }; /* namespace ADDON */ diff --git a/xbmc/addons/AddonCallbacksAddon.h b/xbmc/addons/AddonCallbacksAddon.h index 4683653fb2..94b9a3df0b 100644 --- a/xbmc/addons/AddonCallbacksAddon.h +++ b/xbmc/addons/AddonCallbacksAddon.h @@ -55,6 +55,7 @@ public: static int64_t GetFileLength(const void* addonData, void* file); static void CloseFile(const void* addonData, void* file); static int GetFileChunkSize(const void* addonData, void* file); + static bool CanOpenDirectory(const void* addonData, const char* strURL); private: CB_AddOnLib *m_callbacks; /*!< callback addresses */ |