MT Showcase SDK
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
PersonalFolderCache.hpp
1 #ifndef PERSONALFOLDERCACHE_HPP
2 #define PERSONALFOLDERCACHE_HPP
3 
4 #include "UIComponent.hpp"
5 
6 #include <boost/expected/expected.hpp>
7 
8 namespace Showcase
9 {
10  class PersonalFolderCacheLoader;
14  class PersonalFolderCache : public std::enable_shared_from_this<PersonalFolderCache>
15  {
16  DECLARE_SINGLETON(PersonalFolderCache);
17  public:
18  virtual ~PersonalFolderCache();
19 
20  static std::weak_ptr<PersonalFolderCache> weakInstance();
21 
22  void init();
23  void cacheFolder(uint64_t code);
24  void cacheFolder(uint64_t code, const QByteArray & folder);
25  void removeCachedFolder(uint64_t code);
26 
27  boost::expected<MultiWidgets::WidgetPtr, QString> personalFolderWidget(uint64_t code);
28 
29  private:
31  void createPlaceHolder(uint64_t code, const QByteArray & folder);
32  void createComponent(uint64_t code);
33 
34  struct FolderData
35  {
36  UIComponentPtr uiComponent;
37  ComponentPlaceholderPtr placeholder;
38  MultiWidgets::WidgetPtr widget;
39  QString folder;
40  };
41 
42  std::map<uint64_t, FolderData> m_personalFolders;
43 
44  std::mutex m_folderMutex; // protects m_personalFolders
45 
46  std::unique_ptr<PersonalFolderCacheLoader> m_loader;
47  };
48 
49  typedef std::shared_ptr<PersonalFolderCache> PersonalFolderCachePtr;
50  typedef std::weak_ptr<PersonalFolderCache> PersonalFolderCacheWeakPtr;
51 }
52 
53 #endif // PERSONALFOLDERCACHE_HPP