MythTV  master
websocket_mythevent.cpp
Go to the documentation of this file.
1 
5 
6 #include "websocket_mythevent.h"
7 
9 {
10  setObjectName("WebSocketMythEvent");
12 }
13 
15 {
17 }
18 
20 {
21  QString message = QString(frame.m_payload);
22 
23  if (message.isEmpty())
24  return false;
25 
26 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
27  QStringList tokens = message.split(" ", QString::SkipEmptyParts);
28 #else
29  QStringList tokens = message.split(" ", Qt::SkipEmptyParts);
30 #endif
31 
32  if (tokens[0] == "WS_EVENT_ENABLE") // Only send events if asked
33  {
34  m_sendEvents = true;
35  LOG(VB_HTTP, LOG_NOTICE, "WebSocketMythEvent: Enabled");
36  }
37  else if (tokens[0] == "WS_EVENT_DISABLE")
38  {
39  m_sendEvents = false;
40  LOG(VB_HTTP, LOG_NOTICE, "WebSocketMythEvent: Disabled");
41  }
42  else if (tokens[0] == "WS_EVENT_SET_FILTER")
43  {
44  m_filters.clear();
45 
46  if (tokens.length() == 1)
47  return true;
48 
49  m_filters = tokens.mid(1);
50 
51  QString filterString = m_filters.join(", ");
52  LOG(VB_HTTP, LOG_NOTICE, QString("WebSocketMythEvent: Updated filters (%1)").arg(filterString));
53  }
54 
55  return false;
56 }
57 
59 {
60  if (event->type() == MythEvent::MythEventMessage)
61  {
62  if (!m_sendEvents)
63  return;
64 
65  auto *me = dynamic_cast<MythEvent *>(event);
66  if (me == nullptr)
67  return;
68  QString message = me->Message();
69 
70  if (message.startsWith("SYSTEM_EVENT"))
71  message.remove(0, 13); // Strip SYSTEM_EVENT from the frontend, it's not useful
72 
73 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
74  QStringList tokens = message.split(" ", QString::SkipEmptyParts);
75 #else
76  QStringList tokens = message.split(" ", Qt::SkipEmptyParts);
77 #endif
78 
79  if (tokens.isEmpty())
80  return;
81 
82  // If no-one is listening for this event, then ignore it
83  if (!m_filters.contains("ALL") && !m_filters.contains(tokens[0]))
84  return;
85 
86  emit SendTextMessage(message);
87  }
88 }
mythevent.h
MythEvent::MythEventMessage
static Type MythEventMessage
Definition: mythevent.h:79
WebSocketFrame
A representation of a single WebSocket frame.
Definition: websocket.h:76
MythEvent
This class is used as a container for messages.
Definition: mythevent.h:16
WebSocketMythEvent::~WebSocketMythEvent
~WebSocketMythEvent() override
Definition: websocket_mythevent.cpp:14
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
MythEvent::Message
const QString & Message() const
Definition: mythevent.h:65
MythObservable::addListener
void addListener(QObject *listener)
Add a listener to the observable.
Definition: mythobservable.cpp:38
mythlogging.h
WebSocketExtension::SendTextMessage
void SendTextMessage(const QString &)
WebSocketFrame::m_payload
QByteArray m_payload
Definition: websocket.h:115
WebSocketMythEvent::m_filters
QStringList m_filters
Definition: websocket_mythevent.h:33
WebSocketMythEvent::customEvent
void customEvent(QEvent *) override
Definition: websocket_mythevent.cpp:58
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:54
WebSocketMythEvent::WebSocketMythEvent
WebSocketMythEvent()
Definition: websocket_mythevent.cpp:8
WebSocketMythEvent::m_sendEvents
bool m_sendEvents
Definition: websocket_mythevent.h:34
mythcorecontext.h
websocket_mythevent.h
MythObservable::removeListener
void removeListener(QObject *listener)
Remove a listener to the observable.
Definition: mythobservable.cpp:55
WebSocketMythEvent::HandleTextFrame
bool HandleTextFrame(const WebSocketFrame &frame) override
Definition: websocket_mythevent.cpp:19