xbmc
PluginDirectory.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "IDirectory.h"
12 #include "SortFileItem.h"
13 #include "interfaces/generic/RunningScriptsHandler.h"
14 #include "threads/Event.h"
15 
16 #include <atomic>
17 #include <memory>
18 #include <string>
19 
20 class CURL;
21 class CFileItem;
22 class CFileItemList;
23 
24 namespace XFILE
25 {
26 
27 class CPluginDirectory : public IDirectory, public CRunningScriptsHandler<CPluginDirectory>
28 {
29 public:
31  ~CPluginDirectory(void) override;
32  bool GetDirectory(const CURL& url, CFileItemList& items) override;
33  bool Resolve(CFileItem& item) const override;
34  bool AllowAll() const override { return true; }
35  bool Exists(const CURL& url) override { return true; }
36  float GetProgress() const override;
37  void CancelDirectory() override;
38  static bool RunScriptWithParams(const std::string& strPath, bool resume);
39 
45  static bool GetResolvedPluginResult(CFileItem& resultItem);
46  static bool GetPluginResult(const std::string& strPath, CFileItem &resultItem, bool resume);
47 
53  static bool IsMediaLibraryScanningAllowed(const std::string& content, const std::string& strPath);
54 
61  static bool CheckExists(const std::string& content, const std::string& strPath);
62 
63  // callbacks from python
64  static bool AddItem(int handle, const CFileItem *item, int totalItems);
65  static bool AddItems(int handle, const CFileItemList *items, int totalItems);
66  static void EndOfDirectory(int handle, bool success, bool replaceListing, bool cacheToDisc);
67  static void AddSortMethod(int handle, SORT_METHOD sortMethod, const std::string &labelMask, const std::string &label2Mask);
68  static std::string GetSetting(int handle, const std::string &key);
69  static void SetSetting(int handle, const std::string &key, const std::string &value);
70  static void SetContent(int handle, const std::string &strContent);
71  static void SetProperty(int handle, const std::string &strProperty, const std::string &strValue);
72  static void SetResolvedUrl(int handle, bool success, const CFileItem* resultItem);
73  static void SetLabel2(int handle, const std::string& ident);
74 
75 protected:
76  // implementations of CRunningScriptsHandler / CScriptRunner
77  bool IsSuccessful() const override { return m_success; }
78  bool IsCancelled() const override { return m_cancelled; }
79 
80 private:
81  bool StartScript(const std::string& strPath, bool resume);
82 
83  std::unique_ptr<CFileItemList> m_listItems;
84  std::unique_ptr<CFileItem> m_fileResult;
85 
86  std::atomic<bool> m_cancelled;
87  bool m_success = false; // set by script in EndOfDirectory
88  int m_totalItems = 0; // set by script in AddDirectoryItem
89 };
90 }
Interface to the directory on a file system.
Definition: IDirectory.h:51
Definition: Scraper.h:41
static bool CheckExists(const std::string &content, const std::string &strPath)
Check whether a plugin url exists by calling the plugin and checking result. Applies only to plugins ...
Definition: PluginDirectory.cpp:538
float GetProgress() const override
Retrieve the progress of the current directory fetch (if possible).
Definition: PluginDirectory.cpp:499
Represents a list of files.
Definition: FileItem.h:721
Definition: URL.h:21
bool Exists(const CURL &url) override
Check for directory existence.
Definition: PluginDirectory.h:35
Definition: RunningScriptsHandler.h:21
bool Resolve(CFileItem &item) const override
Resolves a given item to a playable item.
Definition: PluginDirectory.cpp:550
Definition: PluginDirectory.h:27
static bool GetResolvedPluginResult(CFileItem &resultItem)
Get a reproducible CFileItem by trying to recursively resolve the plugin paths up to a maximum allowe...
Definition: PluginDirectory.cpp:97
static void AddSortMethod(int handle, SORT_METHOD sortMethod, const std::string &labelMask, const std::string &label2Mask)
Definition: PluginDirectory.cpp:215
bool GetDirectory(const CURL &url, CFileItemList &items) override
Get the items of the directory strPath.
Definition: PluginDirectory.cpp:412
bool AllowAll() const override
Whether to allow all files/folders to be listed.
Definition: PluginDirectory.h:34
static bool IsMediaLibraryScanningAllowed(const std::string &content, const std::string &strPath)
Check whether a plugin supports media library scanning.
Definition: PluginDirectory.cpp:506
void CancelDirectory() override
Cancel the current directory fetch (if possible).
Definition: PluginDirectory.cpp:494
Represents a file on a share.
Definition: FileItem.h:102