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