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 AllowAll() const override { return true; }
34  bool Exists(const CURL& url) override { return true; }
35  float GetProgress() const override;
36  void CancelDirectory() override;
37  static bool RunScriptWithParams(const std::string& strPath, bool resume);
38 
44  static bool GetResolvedPluginResult(CFileItem& resultItem);
45  static bool GetPluginResult(const std::string& strPath, CFileItem &resultItem, bool resume);
46 
52  static bool IsMediaLibraryScanningAllowed(const std::string& content, const std::string& strPath);
53 
60  static bool CheckExists(const std::string& content, const std::string& strPath);
61 
62  // callbacks from python
63  static bool AddItem(int handle, const CFileItem *item, int totalItems);
64  static bool AddItems(int handle, const CFileItemList *items, int totalItems);
65  static void EndOfDirectory(int handle, bool success, bool replaceListing, bool cacheToDisc);
66  static void AddSortMethod(int handle, SORT_METHOD sortMethod, const std::string &labelMask, const std::string &label2Mask);
67  static std::string GetSetting(int handle, const std::string &key);
68  static void SetSetting(int handle, const std::string &key, const std::string &value);
69  static void SetContent(int handle, const std::string &strContent);
70  static void SetProperty(int handle, const std::string &strProperty, const std::string &strValue);
71  static void SetResolvedUrl(int handle, bool success, const CFileItem* resultItem);
72  static void SetLabel2(int handle, const std::string& ident);
73 
74 protected:
75  // implementations of CRunningScriptsHandler / CScriptRunner
76  bool IsSuccessful() const override { return m_success; }
77  bool IsCancelled() const override { return m_cancelled; }
78 
79 private:
80  bool StartScript(const std::string& strPath, bool resume);
81 
82  std::unique_ptr<CFileItemList> m_listItems;
83  std::unique_ptr<CFileItem> m_fileResult;
84 
85  std::atomic<bool> m_cancelled;
86  bool m_success = false; // set by script in EndOfDirectory
87  int m_totalItems = 0; // set by script in AddDirectoryItem
88 };
89 }
Interface to the directory on a file system.
Definition: IDirectory.h:50
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:713
Definition: URL.h:20
bool Exists(const CURL &url) override
Check for directory existence.
Definition: PluginDirectory.h:34
Definition: RunningScriptsHandler.h:21
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:33
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