xbmc
GUIInfoManager.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 "guilib/guiinfo/GUIInfoProviders.h"
12 #include "interfaces/info/InfoBool.h"
13 #include "interfaces/info/SkinVariable.h"
14 #include "messaging/IMessageTarget.h"
15 #include "threads/CriticalSection.h"
16 
17 #include <map>
18 #include <memory>
19 #include <set>
20 #include <string>
21 #include <vector>
22 
23 class CFileItem;
24 class CVideoInfoTag;
25 
26 class CGUIListItem;
27 typedef std::shared_ptr<CGUIListItem> CGUIListItemPtr;
28 
29 namespace KODI
30 {
31 namespace GAME
32 {
33 class CGameInfoTag;
34 }
35 namespace GUILIB
36 {
37 namespace GUIINFO
38 {
39  class CGUIInfo;
40  class IGUIInfoProvider;
41 }
42 }
43 }
44 namespace INFO
45 {
46  class InfoSingle;
47 }
48 namespace MUSIC_INFO
49 {
50  class CMusicInfoTag;
51 }
52 
58 {
59 public:
60  CGUIInfoManager(void);
61  ~CGUIInfoManager(void) override;
62 
63  void Initialize();
64 
65  void Clear();
66  void ResetCache();
67 
68  // KODI::MESSAGING::IMessageTarget implementation
69  int GetMessageMask() override;
70  void OnApplicationMessage(KODI::MESSAGING::ThreadMessage* pMsg) override;
71 
82  INFO::InfoPtr Register(const std::string &expression, int context = 0);
83 
89  void UnRegister(const INFO::InfoPtr& expression);
90 
92  bool ConditionsChangedValues(const std::map<INFO::InfoPtr, bool>& map);
93 
100  bool EvaluateBool(const std::string& expression,
101  int context,
102  const CGUIListItemPtr& item = nullptr);
103 
104  int TranslateString(const std::string &strCondition);
105  int TranslateSingleString(const std::string &strCondition, bool &listItemDependent);
106 
107  std::string GetLabel(int info, int contextWindow, std::string* fallback = nullptr) const;
108  std::string GetImage(int info, int contextWindow, std::string *fallback = nullptr);
109  bool GetInt(int& value, int info, int contextWindow, const CGUIListItem* item = nullptr) const;
110  bool GetBool(int condition, int contextWindow, const CGUIListItem* item = nullptr);
111 
112  std::string GetItemLabel(const CFileItem *item, int contextWindow, int info, std::string *fallback = nullptr) const;
113  std::string GetItemImage(const CGUIListItem *item, int contextWindow, int info, std::string *fallback = nullptr) const;
122  bool GetItemInt(int &value, const CGUIListItem *item, int contextWindow, int info) const;
123  bool GetItemBool(const CGUIListItem *item, int contextWindow, int condition) const;
124 
127  void SetCurrentItem(const CFileItem &item);
128  void ResetCurrentItem();
129  void UpdateCurrentItem(const CFileItem &item);
130 
131  // Current song stuff
132  void SetCurrentAlbumThumb(const std::string &thumbFileName);
133  const MUSIC_INFO::CMusicInfoTag *GetCurrentSongTag() const;
134 
135  // Current video stuff
136  const CVideoInfoTag* GetCurrentMovieTag() const;
137 
138  // Current game stuff
139  const KODI::GAME::CGameInfoTag* GetCurrentGameTag() const;
140 
141  void UpdateAVInfo();
142 
143  int RegisterSkinVariableString(const INFO::CSkinVariableString* info);
144  int TranslateSkinVariableString(const std::string& name, int context);
145 
149  void RegisterInfoProvider(KODI::GUILIB::GUIINFO::IGUIInfoProvider *provider);
150 
154  void UnregisterInfoProvider(KODI::GUILIB::GUIINFO::IGUIInfoProvider *provider);
155 
160 
161 private:
164  class Property
165  {
166  public:
167  Property(const std::string &property, const std::string &parameters);
168 
169  const std::string &param(unsigned int n = 0) const;
170  unsigned int num_params() const;
171 
172  std::string name;
173  private:
174  std::vector<std::string> params;
175  };
176 
187  void SplitInfoString(const std::string &infoString, std::vector<Property> &info);
188 
189  int TranslateSingleString(const std::string &strCondition);
190  int TranslateListItem(const Property& cat, const Property& prop, int id, bool container);
191  int TranslateMusicPlayerString(const std::string &info) const;
192  int TranslateVideoPlayerString(const std::string& info) const;
193  int TranslatePlayerString(const std::string& info) const;
194  static TIME_FORMAT TranslateTimeFormat(const std::string &format);
195 
196  std::string GetMultiInfoLabel(const KODI::GUILIB::GUIINFO::CGUIInfo &info, int contextWindow, std::string *fallback = nullptr) const;
197  bool GetMultiInfoInt(int &value, const KODI::GUILIB::GUIINFO::CGUIInfo &info, int contextWindow, const CGUIListItem *item) const;
198  bool GetMultiInfoBool(const KODI::GUILIB::GUIINFO::CGUIInfo &info, int contextWindow, const CGUIListItem *item);
199 
200  std::string GetMultiInfoItemLabel(const CFileItem *item, int contextWindow, const KODI::GUILIB::GUIINFO::CGUIInfo &info, std::string *fallback = nullptr) const;
201  std::string GetMultiInfoItemImage(const CFileItem *item, int contextWindow, const KODI::GUILIB::GUIINFO::CGUIInfo &info, std::string *fallback = nullptr) const;
202 
203  std::string GetSkinVariableString(int info,
204  int contextWindow,
205  bool preferImage = false,
206  const CGUIListItem* item = nullptr) const;
207 
208  int AddMultiInfo(const KODI::GUILIB::GUIINFO::CGUIInfo &info);
209 
210  int ResolveMultiInfo(int info) const;
211  bool IsListItemInfo(int info) const;
212 
213  void SetCurrentSongTag(const MUSIC_INFO::CMusicInfoTag &tag);
214  void SetCurrentVideoTag(const CVideoInfoTag &tag);
215 
216  // Vector of multiple information mapped to a single integer lookup
217  std::vector<KODI::GUILIB::GUIINFO::CGUIInfo> m_multiInfo;
218 
219  // Current playing stuff
220  CFileItem* m_currentFile;
221 
222  typedef std::set<INFO::InfoPtr, bool(*)(const INFO::InfoPtr&, const INFO::InfoPtr&)> INFOBOOLTYPE;
223  INFOBOOLTYPE m_bools;
224  unsigned int m_refreshCounter = 0;
225  std::vector<INFO::CSkinVariableString> m_skinVariableStrings;
226 
227  CCriticalSection m_critInfo;
228 
230 };
Definition: GUIInfoManager.h:57
A class wishing to receive messages should implement this and call.
Definition: IMessageTarget.h:23
Definition: GUIListItem.h:30
Definition: IGUIInfoProvider.h:28
Definition: ThreadMessage.h:25
Definition: GameInfoTag.h:24
Definition: ContextMenuItem.h:23
Definition: AudioDecoder.h:18
Definition: SkinVariable.h:29
KODI::GUILIB::GUIINFO::CGUIInfoProviders & GetInfoProviders()
get access to the registered guiinfo providers
Definition: GUIInfoManager.h:159
Definition: GUIInfoProviders.h:43
Definition: GUIInfo.h:23
Definition: VideoInfoTag.h:51
Definition: MusicInfoTag.h:27
Represents a file on a share.
Definition: FileItem.h:102
Definition: Application.h:79