Merge pull request #26362 from ksooo/estuary-rework-pvr-info-dialog
[xbmc.git] / xbmc / interfaces / AnnouncementManager.h
blob162a80d3bc66ecd4b5caca2cbc6e9ec5ec88a4b3
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #pragma once
11 #include "IAnnouncer.h"
12 #include "threads/CriticalSection.h"
13 #include "threads/Event.h"
14 #include "threads/Thread.h"
15 #include "utils/Variant.h"
17 #include <list>
18 #include <memory>
19 #include <unordered_map>
21 class CFileItem;
22 class CVariant;
24 namespace ANNOUNCEMENT
26 class CAnnouncementManager : public CThread
28 public:
29 CAnnouncementManager();
30 ~CAnnouncementManager() override;
32 void Start();
33 void Deinitialize();
35 void AddAnnouncer(IAnnouncer *listener);
36 void AddAnnouncer(IAnnouncer* listener, int flagMask);
37 void RemoveAnnouncer(IAnnouncer *listener);
39 void Announce(AnnouncementFlag flag, const std::string& message);
40 void Announce(AnnouncementFlag flag, const std::string& message, const CVariant& data);
41 void Announce(AnnouncementFlag flag,
42 const std::string& message,
43 const std::shared_ptr<const CFileItem>& item);
44 void Announce(AnnouncementFlag flag,
45 const std::string& message,
46 const std::shared_ptr<const CFileItem>& item,
47 const CVariant& data);
49 void Announce(AnnouncementFlag flag, const std::string& sender, const std::string& message);
50 void Announce(AnnouncementFlag flag,
51 const std::string& sender,
52 const std::string& message,
53 const CVariant& data);
54 void Announce(AnnouncementFlag flag,
55 const std::string& sender,
56 const std::string& message,
57 const std::shared_ptr<const CFileItem>& item,
58 const CVariant& data);
60 // The sender is not related to the application name.
61 // Also it's part of Kodi's API - changing it will break
62 // a big number of python addons and third party json consumers.
63 static const std::string ANNOUNCEMENT_SENDER;
65 protected:
66 void Process() override;
67 void DoAnnounce(AnnouncementFlag flag,
68 const std::string& sender,
69 const std::string& message,
70 const std::shared_ptr<CFileItem>& item,
71 const CVariant& data);
72 void DoAnnounce(AnnouncementFlag flag,
73 const std::string& sender,
74 const std::string& message,
75 const CVariant& data);
77 struct CAnnounceData
79 AnnouncementFlag flag;
80 std::string sender;
81 std::string message;
82 std::shared_ptr<CFileItem> item;
83 CVariant data;
85 std::list<CAnnounceData> m_announcementQueue;
86 CEvent m_queueEvent;
88 private:
89 CAnnouncementManager(const CAnnouncementManager&) = delete;
90 CAnnouncementManager const& operator=(CAnnouncementManager const&) = delete;
92 CCriticalSection m_announcersCritSection;
93 CCriticalSection m_queueCritSection;
94 std::unordered_map<IAnnouncer*, int> m_announcers;