kodi
AnnouncementManager.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 "IAnnouncer.h"
12 #include "threads/CriticalSection.h"
13 #include "threads/Event.h"
14 #include "threads/Thread.h"
15 #include "utils/Variant.h"
16 
17 #include <list>
18 #include <memory>
19 #include <vector>
20 
21 class CFileItem;
22 class CVariant;
23 
24 namespace ANNOUNCEMENT
25 {
27  {
28  public:
30  ~CAnnouncementManager() override;
31 
32  void Start();
33  void Deinitialize();
34 
35  void AddAnnouncer(IAnnouncer *listener);
36  void RemoveAnnouncer(IAnnouncer *listener);
37 
38  void Announce(AnnouncementFlag flag, const std::string& message);
39  void Announce(AnnouncementFlag flag, const std::string& message, const CVariant& data);
40  void Announce(AnnouncementFlag flag,
41  const std::string& message,
42  const std::shared_ptr<const CFileItem>& item);
43  void Announce(AnnouncementFlag flag,
44  const std::string& message,
45  const std::shared_ptr<const CFileItem>& item,
46  const CVariant& data);
47 
48  void Announce(AnnouncementFlag flag, const std::string& sender, const std::string& message);
49  void Announce(AnnouncementFlag flag,
50  const std::string& sender,
51  const std::string& message,
52  const CVariant& data);
53  void Announce(AnnouncementFlag flag,
54  const std::string& sender,
55  const std::string& message,
56  const std::shared_ptr<const CFileItem>& item,
57  const CVariant& data);
58 
59  // The sender is not related to the application name.
60  // Also it's part of Kodi's API - changing it will break
61  // a big number of python addons and third party json consumers.
62  static const std::string ANNOUNCEMENT_SENDER;
63 
64  protected:
65  void Process() override;
66  void DoAnnounce(AnnouncementFlag flag,
67  const std::string& sender,
68  const std::string& message,
69  const std::shared_ptr<CFileItem>& item,
70  const CVariant& data);
71  void DoAnnounce(AnnouncementFlag flag,
72  const std::string& sender,
73  const std::string& message,
74  const CVariant& data);
75 
77  {
78  AnnouncementFlag flag;
79  std::string sender;
80  std::string message;
81  std::shared_ptr<CFileItem> item;
82  CVariant data;
83  };
84  std::list<CAnnounceData> m_announcementQueue;
85  CEvent m_queueEvent;
86 
87  private:
89  CAnnouncementManager const& operator=(CAnnouncementManager const&) = delete;
90 
91  CCriticalSection m_announcersCritSection;
92  CCriticalSection m_queueCritSection;
93  std::vector<IAnnouncer *> m_announcers;
94  };
95 }
This is an Event class built from a ConditionVariable.
Definition: Event.h:35
Definition: Thread.h:44
Definition: IAnnouncer.h:70
Definition: AnnouncementManager.h:26
Definition: Variant.h:31
void DoAnnounce(AnnouncementFlag flag, const std::string &sender, const std::string &message, const std::shared_ptr< CFileItem > &item, const CVariant &data)
Definition: AnnouncementManager.cpp:166
Definition: AnnouncementManager.h:76
Definition: Application.h:52
Represents a file on a share.
Definition: FileItem.h:102