aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Op den Kamp <lars@opdenkamp.eu>2012-09-18 12:00:18 +0200
committerLars Op den Kamp <lars@opdenkamp.eu>2012-09-18 12:07:56 +0200
commit9a91adf4777ad13f721becf7d1bd732060ce6032 (patch)
tree2decbaa17b9ad2236fca2e606374d2bbeb5b8ac7
parente77b53c68b3beb9380c1d2a5151d2d5111bb93fd (diff)
added CanOpenDirectory() to AddonCallbacksAddon
-rw-r--r--addons/library.xbmc.addon/libXBMC_addon.h11
-rw-r--r--lib/addons/library.xbmc.addon/libXBMC_addon.cpp8
-rw-r--r--xbmc/addons/AddonCallbacks.h2
-rw-r--r--xbmc/addons/AddonCallbacksAddon.cpp25
-rw-r--r--xbmc/addons/AddonCallbacksAddon.h1
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 */