MythTV  master
messageutils.cpp
Go to the documentation of this file.
1 // C++ includes
2 #include <iostream> // for cerr, cout
3 using std::cerr;
4 using std::cout;
5 using std::endl;
6 
7 // Qt headers
8 #include <QFile>
9 #include <QHostAddress>
10 #include <QString>
11 #include <QUdpSocket>
12 
13 // libmyth* includes
14 #include "libmythbase/compat.h"
15 #include "libmythbase/exitcodes.h"
16 
17 // Local includes
18 #include "messageutils.h"
19 
20 const QString kMessage =
21 "<mythmessage version=\"1\">\n"
22 " <text>%message_text%</text>\n"
23 " <timeout>%timeout%</timeout>\n"
24 "</mythmessage>";
25 
26 const QString kNotification =
27 "<mythnotification version=\"1\">\n"
28 " <text>%message_text%</text>\n"
29 " <origin>%origin%</origin>\n"
30 " <description>%description%</description>\n"
31 " <error>%error%</error>\n"
32 " <timeout>%timeout%</timeout>\n"
33 " <image>%image%</image>\n"
34 " <extra>%extra%</extra>\n"
35 " <progress_text>%progress_text%</progress_text>\n"
36 " <progress>%progress%</progress>\n"
37 " <fullscreen>%fullscreen%</fullscreen>\n"
38 " <visibility>%visibility%</visibility>\n"
39 " <type>%type%</type>\n"
40 "</mythnotification>";
41 
42 static int PrintMTemplate(const MythUtilCommandLineParser &/*cmdline*/)
43 {
44  cerr << kMessage.toLocal8Bit().constData() << endl;
45  return GENERIC_EXIT_OK;
46 }
47 
48 static int PrintNTemplate(const MythUtilCommandLineParser &/*cmdline*/)
49 {
50  cerr << kNotification.toLocal8Bit().constData() << endl;
51  return GENERIC_EXIT_OK;
52 }
53 
55 {
56  QHostAddress address = QHostAddress::Broadcast;
57  unsigned short port = 6948;
58  bool notification = cmdline.toBool("notification");
59  QString text /* = "message" */ ;
60  QString timeout = "0";
61  QString image = "";
62  QString origin = "MythUtils";
63  QString description = "";
64  QString extra = "";
65  QString progress_text = "";
66  QString progress = "-1";
67  QString fullscreen = "false";
68  QString error = "false";
69  QString visibility = "0";
70  QString type = "normal";
71 
72  QString message = notification ? kNotification : kMessage;
73 
74  if (cmdline.toBool("udpport"))
75  port = (unsigned short)cmdline.toUInt("udpport");
76  if (cmdline.toBool("bcastaddr"))
77  address.setAddress(cmdline.toString("bcastaddr"));
78  if (cmdline.toBool("message_text"))
79  text = cmdline.toString("message_text");
80  message.replace("%message_text%", text);
81  if (cmdline.toBool("timeout"))
82  timeout = cmdline.toString("timeout");
83  message.replace("%timeout%", timeout);
84  if (notification)
85  {
86  if (cmdline.toBool("image"))
87  image = cmdline.toString("image");
88  message.replace("%image%", image);
89  if (cmdline.toBool("origin"))
90  origin = cmdline.toString("origin");
91  message.replace("%origin%", origin);
92  if (cmdline.toBool("description"))
93  description = cmdline.toString("description");
94  message.replace("%description%", description);
95  if (cmdline.toBool("extra"))
96  extra = cmdline.toString("extra");
97  message.replace("%extra%", extra);
98  if (cmdline.toBool("progress_text"))
99  progress_text = cmdline.toString("progress_text");
100  message.replace("%progress_text%", progress_text);
101  if (cmdline.toBool("progress"))
102  progress = cmdline.toString("progress");
103  message.replace("%progress%", progress);
104  if (cmdline.toBool("fullscreen"))
105  fullscreen = cmdline.toString("fullscreen");
106  message.replace("%fullscreen%", fullscreen);
107  if (cmdline.toBool("error"))
108  error = cmdline.toString("error");
109  message.replace("%error%", error);
110  if (cmdline.toBool("visibility"))
111  visibility = cmdline.toString("visibility");
112  message.replace("%visibility%", visibility);
113  if (cmdline.toBool("type"))
114  type = cmdline.toString("type");
115  message.replace("%type%", type);
116  }
117 
118  // extra optional argument
119  // in effeect not use as the above code provides default for all possible
120  // cases
121  QMap<QString,QString>::const_iterator i;
122  QMap<QString,QString> extras = cmdline.GetExtra();
123  for (i = extras.cbegin(); i != extras.cend(); ++i)
124  {
125  QString kv_name = i.key();
126  const QString& kv_value = i.value();
127 
128  kv_name.replace("--", "");
129  cerr << "name: " << kv_name.toLocal8Bit().constData()
130  << " -- value: " << kv_value.toLocal8Bit().constData() << endl;
131 
132  kv_name.append("%");
133  kv_name.prepend("%");
134  message.replace(kv_name, kv_value);
135  }
136 
137  cout << "output:\n" << message.toLocal8Bit().constData() << endl;
138 
139  auto *sock = new QUdpSocket();
140  QByteArray utf8 = message.toUtf8();
141 
142  int result = GENERIC_EXIT_OK;
143  if (sock->writeDatagram(utf8, address, port) < 0)
144  {
145  cout << "Failed to send UDP/XML packet" << endl;
146  result = GENERIC_EXIT_NOT_OK;
147  }
148  else
149  {
150  cout << "Sent UDP/XML packet to IP "
151  << address.toString().toLocal8Bit().constData()
152  << " and port: " << port << endl;
153  }
154 
155  sock->deleteLater();
156 
157  return result;
158 }
159 
161 {
162  utilMap["message"] = &SendMessage;
163  utilMap["printmtemplate"] = &PrintMTemplate;
164  utilMap["notification"] = &SendMessage;
165  utilMap["printntemplate"] = &PrintNTemplate;
166 }
167 
168 /* vim: set expandtab tabstop=4 shiftwidth=4: */
hardwareprofile.smolt.timeout
float timeout
Definition: smolt.py:101
cmdline
MythCommFlagCommandLineParser cmdline
Definition: mythcommflag.cpp:63
progress
bool progress
Definition: mythcommflag.cpp:60
registerMessageUtils
void registerMessageUtils(UtilMap &utilMap)
Definition: messageutils.cpp:160
messageutils.h
MythUtilCommandLineParser
Definition: mythutil_commandlineparser.h:8
SendMessage
static int SendMessage(const MythUtilCommandLineParser &cmdline)
Definition: messageutils.cpp:54
GENERIC_EXIT_OK
@ GENERIC_EXIT_OK
Exited with no error.
Definition: exitcodes.h:13
compat.h
MythCommandLineParser::GetExtra
QMap< QString, QString > GetExtra(void) const
Return map of additional key/value pairs provided on the command line independent of any registered a...
Definition: mythcommandlineparser.cpp:2103
PrintNTemplate
static int PrintNTemplate(const MythUtilCommandLineParser &)
Definition: messageutils.cpp:48
MythCommandLineParser::toUInt
uint toUInt(const QString &key) const
Returns stored QVariant as an unsigned integer, falling to default if not provided.
Definition: mythcommandlineparser.cpp:2252
hardwareprofile.smolt.error
def error(message)
Definition: smolt.py:409
kMessage
const QString kMessage
Definition: messageutils.cpp:20
UtilMap
QMap< QString, UtilFunc > UtilMap
Definition: mythutil.h:15
MythCommandLineParser::toString
QString toString(const QString &key) const
Returns stored QVariant as a QString, falling to default if not provided.
Definition: mythcommandlineparser.cpp:2360
MythCommandLineParser::toBool
bool toBool(const QString &key) const
Returns stored QVariant as a boolean.
Definition: mythcommandlineparser.cpp:2203
GENERIC_EXIT_NOT_OK
@ GENERIC_EXIT_NOT_OK
Exited with error.
Definition: exitcodes.h:14
kNotification
const QString kNotification
Definition: messageutils.cpp:26
exitcodes.h
PrintMTemplate
static int PrintMTemplate(const MythUtilCommandLineParser &)
Definition: messageutils.cpp:42