summaryrefslogtreecommitdiffstats
path: root/xbmc/filesystem/PluginDirectory.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/filesystem/PluginDirectory.h')
-rw-r--r--xbmc/filesystem/PluginDirectory.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/xbmc/filesystem/PluginDirectory.h b/xbmc/filesystem/PluginDirectory.h
new file mode 100644
index 0000000..ebcfd13
--- /dev/null
+++ b/xbmc/filesystem/PluginDirectory.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+#include "IDirectory.h"
+#include "SortFileItem.h"
+#include "interfaces/generic/RunningScriptsHandler.h"
+#include "threads/Event.h"
+
+#include <atomic>
+#include <memory>
+#include <string>
+
+class CURL;
+class CFileItem;
+class CFileItemList;
+
+namespace XFILE
+{
+
+class CPluginDirectory : public IDirectory, public CRunningScriptsHandler<CPluginDirectory>
+{
+public:
+ CPluginDirectory();
+ ~CPluginDirectory(void) override;
+ bool GetDirectory(const CURL& url, CFileItemList& items) override;
+ bool AllowAll() const override { return true; }
+ bool Exists(const CURL& url) override { return true; }
+ float GetProgress() const override;
+ void CancelDirectory() override;
+ static bool RunScriptWithParams(const std::string& strPath, bool resume);
+
+ /*! \brief Get a reproducible CFileItem by trying to recursively resolve the plugin paths
+ up to a maximum allowed limit. If no plugin paths exist it will be ignored.
+ \param resultItem the CFileItem with plugin paths to be resolved.
+ \return false if the plugin path cannot be resolved, true otherwise.
+ */
+ static bool GetResolvedPluginResult(CFileItem& resultItem);
+ static bool GetPluginResult(const std::string& strPath, CFileItem &resultItem, bool resume);
+
+ /*! \brief Check whether a plugin supports media library scanning.
+ \param content content type - movies, tvshows, musicvideos.
+ \param strPath full plugin url.
+ \return true if scanning at specified url is allowed, false otherwise.
+ */
+ static bool IsMediaLibraryScanningAllowed(const std::string& content, const std::string& strPath);
+
+ /*! \brief Check whether a plugin url exists by calling the plugin and checking result.
+ Applies only to plugins that support media library scanning.
+ \param content content type - movies, tvshows, musicvideos.
+ \param strPath full plugin url.
+ \return true if the plugin supports scanning and specified url exists, false otherwise.
+ */
+ static bool CheckExists(const std::string& content, const std::string& strPath);
+
+ // callbacks from python
+ static bool AddItem(int handle, const CFileItem *item, int totalItems);
+ static bool AddItems(int handle, const CFileItemList *items, int totalItems);
+ static void EndOfDirectory(int handle, bool success, bool replaceListing, bool cacheToDisc);
+ static void AddSortMethod(int handle, SORT_METHOD sortMethod, const std::string &labelMask, const std::string &label2Mask);
+ static std::string GetSetting(int handle, const std::string &key);
+ static void SetSetting(int handle, const std::string &key, const std::string &value);
+ static void SetContent(int handle, const std::string &strContent);
+ static void SetProperty(int handle, const std::string &strProperty, const std::string &strValue);
+ static void SetResolvedUrl(int handle, bool success, const CFileItem* resultItem);
+ static void SetLabel2(int handle, const std::string& ident);
+
+protected:
+ // implementations of CRunningScriptsHandler / CScriptRunner
+ bool IsSuccessful() const override { return m_success; }
+ bool IsCancelled() const override { return m_cancelled; }
+
+private:
+ bool StartScript(const std::string& strPath, bool resume);
+
+ std::unique_ptr<CFileItemList> m_listItems;
+ std::unique_ptr<CFileItem> m_fileResult;
+
+ std::atomic<bool> m_cancelled;
+ bool m_success = false; // set by script in EndOfDirectory
+ int m_totalItems = 0; // set by script in AddDirectoryItem
+};
+}