kodi
GUIMediaWindow.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 "dialogs/GUIDialogContextMenu.h"
12 #include "filesystem/DirectoryHistory.h"
13 #include "filesystem/VirtualDirectory.h"
14 #include "guilib/GUIWindow.h"
15 #include "playlists/SmartPlayList.h"
16 #include "view/GUIViewControl.h"
17 
18 #include <atomic>
19 
20 class CFileItemList;
21 class CGUIViewState;
22 namespace
23 {
24 class CGetDirectoryItems;
25 }
26 
27 // base class for all media windows
29 {
30 public:
31  CGUIMediaWindow(int id, const char *xmlFile);
32  ~CGUIMediaWindow(void) override;
33 
34  // specializations of CGUIControl
35  bool OnAction(const CAction &action) override;
36  bool OnBack(int actionID) override;
37  bool OnMessage(CGUIMessage& message) override;
38 
39  // specializations of CGUIWindow
40  void OnWindowLoaded() override;
41  void OnWindowUnload() override;
42  void OnInitWindow() override;
43  bool IsMediaWindow() const override { return true; }
44  int GetViewContainerID() const override { return m_viewControl.GetCurrentControl(); }
45  int GetViewCount() const override { return m_viewControl.GetViewModeCount(); }
46  bool HasListItems() const override { return true; }
47  CFileItemPtr GetCurrentListItem(int offset = 0) override;
48 
49  // custom methods
50  virtual bool CanFilterAdvanced() { return m_canFilterAdvanced; }
51  virtual bool IsFiltered();
52  virtual bool IsSameStartFolder(const std::string &dir);
53 
54  virtual std::string GetRootPath() const { return ""; }
55 
56  const CFileItemList &CurrentDirectory() const;
57  const CGUIViewState *GetViewState() const;
58  virtual bool UseFileDirectories() { return true; }
59 
60 protected:
61  // specializations of CGUIControlGroup
62  CGUIControl *GetFirstFocusableControl(int id) override;
63 
64  bool Load(TiXmlElement *pRootElement) override;
65 
66  // custom methods
67  virtual void SetupShares();
68  virtual bool GoParentFolder();
69  virtual bool OnClick(int iItem, const std::string &player = "");
70 
71  /* \brief React to a "Select" action on an item in a view.
72  \param item selected item.
73  \return true if the action is handled, false otherwise.
74  */
75  virtual bool OnSelect(int item);
76  virtual bool OnPopupMenu(int iItem);
77 
78  virtual void GetContextButtons(int itemNumber, CContextButtons& buttons) {}
79  virtual bool OnContextButton(int itemNumber, CONTEXT_BUTTON button) { return false; }
80  virtual bool OnAddMediaSource() { return false; }
81 
82  virtual void FormatItemLabels(CFileItemList &items, const LABEL_MASKS &labelMasks);
83  virtual void UpdateButtons();
84  void SaveControlStates() override;
85  void RestoreControlStates() override;
86 
87  virtual bool GetDirectory(const std::string &strDirectory, CFileItemList &items);
96  virtual bool Update(const std::string &strDirectory, bool updateFilterPath = true);
102  virtual bool Refresh(bool clearCache = false);
103 
104  virtual void FormatAndSort(CFileItemList &items);
105  virtual void OnPrepareFileItems(CFileItemList &items);
106  virtual void OnCacheFileItems(CFileItemList &items);
107  virtual void GetGroupedItems(CFileItemList &items) { }
108 
109  void ClearFileItems();
110  virtual void SortItems(CFileItemList &items);
111 
116  virtual bool CheckFilterAdvanced(CFileItemList &items) const { return false; }
121  virtual bool CanContainFilter(const std::string &strDirectory) const { return false; }
122  virtual void UpdateFilterPath(const std::string &strDirector, const CFileItemList &items, bool updateFilterPath);
123  virtual bool Filter(bool advanced = true);
124 
125  /* \brief Called on response to a GUI_MSG_FILTER_ITEMS message
126  Filters the current list with the given filter using FilterItems()
127  \param filter the filter to use.
128  \sa FilterItems
129  */
130  void OnFilterItems(const std::string &filter);
131 
132  /* \brief Retrieve the filtered item list
133  \param filter filter to apply
134  \param items CFileItemList to filter
135  \sa OnFilterItems
136  */
137  virtual bool GetFilteredItems(const std::string &filter, CFileItemList &items);
138 
139  /* \brief Retrieve the advance filtered item list
140  \param items CFileItemList to filter
141  \param hasNewItems Whether the filtered item list contains new items
142  which were not present in the original list
143  \sa GetFilteredItems
144  */
145  virtual bool GetAdvanceFilteredItems(CFileItemList &items);
146 
147  // check for a disc or connection
148  virtual bool HaveDiscOrConnection(const std::string& strPath, int iDriveType);
149  void ShowShareErrorMessage(CFileItem* pItem) const;
150 
151  void SaveSelectedItemInHistory();
152  void RestoreSelectedItemFromHistory();
153  void GetDirectoryHistoryString(const CFileItem* pItem, std::string& strHistoryString) const;
154  void SetHistoryForPath(const std::string& strDirectory);
155  virtual void LoadPlayList(const std::string& strFileName) {}
156  virtual bool OnPlayMedia(int iItem, const std::string &player = "");
157  virtual bool OnPlayAndQueueMedia(const CFileItemPtr& item, const std::string& player = "");
158  void UpdateFileList();
159  virtual void OnDeleteItem(int iItem);
160  void OnRenameItem(int iItem);
161  bool WaitForNetwork() const;
162  bool GetDirectoryItems(CURL &url, CFileItemList &items, bool useDir);
163  bool WaitGetDirectoryItems(CGetDirectoryItems &items);
164  void CancelUpdateItems();
165 
169  virtual std::string GetStartFolder(const std::string &url);
170 
176  static std::string RemoveParameterFromPath(const std::string &strDirectory, const std::string &strParameter);
177 
178  bool ProcessRenderLoop(bool renderOnly);
179 
180  XFILE::CVirtualDirectory m_rootDir;
181  CGUIViewControl m_viewControl;
182 
183  // current path and history
184  CFileItemList* m_vecItems;
186  CDirectoryHistory m_history;
187  std::unique_ptr<CGUIViewState> m_guiState;
188  std::atomic_bool m_vecItemsUpdating = {false};
190  {
191  public:
192  CUpdateGuard(std::atomic_bool &update) : m_update(update)
193  {
194  m_update = true;
195  }
196  ~CUpdateGuard()
197  {
198  m_update = false;
199  }
200  protected:
201  std::atomic_bool &m_update;
202  };
203  CEvent m_updateEvent;
204  std::atomic_bool m_updateAborted = {false};
205  std::atomic_bool m_updateJobActive = {false};
206 
207  // save control state on window exit
208  int m_iLastControl;
209  std::string m_startDirectory;
210 
211  CSmartPlaylist m_filter;
212  bool m_canFilterAdvanced;
225  std::string m_strFilterPath;
226  bool m_backgroundLoad = false;
227 };
virtual void FormatAndSort(CFileItemList &items)
Format and sort file items.
Definition: GUIMediaWindow.cpp:707
This is an Event class built from a ConditionVariable.
Definition: Event.h:35
Definition: GUIViewControl.h:19
virtual void UpdateButtons()
Updates the states.
Definition: GUIMediaWindow.cpp:594
virtual bool GoParentFolder()
Go one directory up on list items.
Definition: GUIMediaWindow.cpp:1248
virtual bool HaveDiscOrConnection(const std::string &strPath, int iDriveType)
Check disc or connection present.
Definition: GUIMediaWindow.cpp:1199
std::string m_strFilterPath
Contains the path used for filtering (including any active filter)
Definition: GUIMediaWindow.h:225
Represents a list of files.
Definition: FileItem.h:702
Definition: URL.h:21
Base class for controls.
Definition: GUIControl.h:83
virtual bool OnClick(int iItem, const std::string &player="")
On click.
Definition: GUIMediaWindow.cpp:1012
virtual void FormatItemLabels(CFileItemList &items, const LABEL_MASKS &labelMasks)
Formats item labels.
Definition: GUIMediaWindow.cpp:681
CFileItemList * m_unfilteredItems
items prior to filtering using FilterItems()
Definition: GUIMediaWindow.h:185
Definition: LabelFormatter.h:21
virtual bool Update(const std::string &strDirectory, bool updateFilterPath=true)
Retrieves the items from the given path and updates the list.
Definition: GUIMediaWindow.cpp:820
virtual void SortItems(CFileItemList &items)
Sort file items.
Definition: GUIMediaWindow.cpp:643
virtual bool OnPlayAndQueueMedia(const CFileItemPtr &item, const std::string &player="")
On play and media queue.
Definition: GUIMediaWindow.cpp:1524
Class encapsulating information regarding a particular user action to be sent to windows and controls...
Definition: Action.h:21
void UpdateFileList()
Update file list.
Definition: GUIMediaWindow.cpp:1592
Definition: GUIViewState.h:25
void OnInitWindow() override
Called on window open.
Definition: GUIMediaWindow.cpp:1683
void GetDirectoryHistoryString(const CFileItem *pItem, std::string &strHistoryString) const
Get history string for given file item.
Definition: GUIMediaWindow.cpp:1358
virtual bool OnPlayMedia(int iItem, const std::string &player="")
On media play.
Definition: GUIMediaWindow.cpp:1494
virtual bool Refresh(bool clearCache=false)
Refreshes the current list by retrieving the lists&#39;s path.
Definition: GUIMediaWindow.cpp:954
Get access to shares and it&#39;s directories.
Definition: VirtualDirectory.h:24
static std::string RemoveParameterFromPath(const std::string &strDirectory, const std::string &strParameter)
Utility method to remove the given parameter from a path/URL.
Definition: GUIMediaWindow.cpp:2192
Definition: GUIMessage.h:365
virtual std::string GetStartFolder(const std::string &url)
Translate the folder to start in from the given quick path.
Definition: GUIMediaWindow.cpp:2168
virtual void OnPrepareFileItems(CFileItemList &items)
On prepare file items.
Definition: GUIMediaWindow.cpp:985
Definition: GUIWindow.h:58
void SetHistoryForPath(const std::string &strDirectory)
Set history for path.
Definition: GUIMediaWindow.cpp:1421
virtual bool CanContainFilter(const std::string &strDirectory) const
Check if the given path can contain a "filter" parameter.
Definition: GUIMediaWindow.h:121
virtual void OnCacheFileItems(CFileItemList &items)
On cache file items.
Definition: GUIMediaWindow.cpp:998
void ShowShareErrorMessage(CFileItem *pItem) const
Shows a standard error message for a given pItem.
Definition: GUIMediaWindow.cpp:1225
virtual bool GetFilteredItems(const std::string &filter, CFileItemList &items)
Definition: GUIMediaWindow.cpp:2009
Definition: SmartPlayList.h:90
Definition: DirectoryHistory.h:15
Definition: GUIMediaWindow.h:28
virtual bool CheckFilterAdvanced(CFileItemList &items) const
Check if the given list can be advance filtered or not.
Definition: GUIMediaWindow.h:116
Definition: GUIDialogContextMenu.h:93
bool Load(TiXmlElement *pRootElement) override
Loads the window from the given XML element.
Definition: GUIMediaWindow.cpp:134
virtual bool GetDirectory(const std::string &strDirectory, CFileItemList &items)
Overwrite to fill fileitems from a source.
Definition: GUIMediaWindow.cpp:728
Definition: GUIMediaWindow.h:189
Represents a file on a share.
Definition: FileItem.h:102