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.
11 #include "IAnnouncer.h"
12 #include "threads/CriticalSection.h"
13 #include "threads/Event.h"
14 #include "threads/Thread.h"
15 #include "utils/Variant.h"
19 #include <unordered_map>
24 namespace ANNOUNCEMENT
26 class CAnnouncementManager
: public CThread
29 CAnnouncementManager();
30 ~CAnnouncementManager() override
;
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
;
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
);
79 AnnouncementFlag flag
;
82 std::shared_ptr
<CFileItem
> item
;
85 std::list
<CAnnounceData
> m_announcementQueue
;
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
;