summaryrefslogtreecommitdiffstats
path: root/xbmc/interfaces/AnnouncementManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/interfaces/AnnouncementManager.h')
-rw-r--r--xbmc/interfaces/AnnouncementManager.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/xbmc/interfaces/AnnouncementManager.h b/xbmc/interfaces/AnnouncementManager.h
new file mode 100644
index 0000000..44b6d97
--- /dev/null
+++ b/xbmc/interfaces/AnnouncementManager.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+#include "IAnnouncer.h"
+#include "threads/CriticalSection.h"
+#include "threads/Event.h"
+#include "threads/Thread.h"
+#include "utils/Variant.h"
+
+#include <list>
+#include <memory>
+#include <vector>
+
+class CFileItem;
+class CVariant;
+
+namespace ANNOUNCEMENT
+{
+ class CAnnouncementManager : public CThread
+ {
+ public:
+ CAnnouncementManager();
+ ~CAnnouncementManager() override;
+
+ void Start();
+ void Deinitialize();
+
+ void AddAnnouncer(IAnnouncer *listener);
+ void RemoveAnnouncer(IAnnouncer *listener);
+
+ void Announce(AnnouncementFlag flag, const std::string& message);
+ void Announce(AnnouncementFlag flag, const std::string& message, const CVariant& data);
+ void Announce(AnnouncementFlag flag,
+ const std::string& message,
+ const std::shared_ptr<const CFileItem>& item);
+ void Announce(AnnouncementFlag flag,
+ const std::string& message,
+ const std::shared_ptr<const CFileItem>& item,
+ const CVariant& data);
+
+ void Announce(AnnouncementFlag flag, const std::string& sender, const std::string& message);
+ void Announce(AnnouncementFlag flag,
+ const std::string& sender,
+ const std::string& message,
+ const CVariant& data);
+ void Announce(AnnouncementFlag flag,
+ const std::string& sender,
+ const std::string& message,
+ const std::shared_ptr<const CFileItem>& item,
+ const CVariant& data);
+
+ // The sender is not related to the application name.
+ // Also it's part of Kodi's API - changing it will break
+ // a big number of python addons and third party json consumers.
+ static const std::string ANNOUNCEMENT_SENDER;
+
+ protected:
+ void Process() override;
+ void DoAnnounce(AnnouncementFlag flag,
+ const std::string& sender,
+ const std::string& message,
+ const std::shared_ptr<CFileItem>& item,
+ const CVariant& data);
+ void DoAnnounce(AnnouncementFlag flag,
+ const std::string& sender,
+ const std::string& message,
+ const CVariant& data);
+
+ struct CAnnounceData
+ {
+ AnnouncementFlag flag;
+ std::string sender;
+ std::string message;
+ std::shared_ptr<CFileItem> item;
+ CVariant data;
+ };
+ std::list<CAnnounceData> m_announcementQueue;
+ CEvent m_queueEvent;
+
+ private:
+ CAnnouncementManager(const CAnnouncementManager&) = delete;
+ CAnnouncementManager const& operator=(CAnnouncementManager const&) = delete;
+
+ CCriticalSection m_announcersCritSection;
+ CCriticalSection m_queueCritSection;
+ std::vector<IAnnouncer *> m_announcers;
+ };
+}