MythTV Caller ID coming from Maemo
This will listen on D-Bus for an incoming call on my N900, and transmit a message over UDP broadcast for MythTV to display onscreen. :)
Code:
#include <QCoreApplication>
#include <QDBusConnection>
#include <QDBusMessage>
#include <QHostAddress>
#include <QUdpSocket>
#include <QDateTime>
class Handler : public QObject
{
Q_OBJECT
private:
static const QHostAddress address;
static const int port;
public:
Handler() : QObject() {}
public slots:
void handleCall(const QDBusMessage& msg)
{
const QString message = QString(
"<mythnotify version=\"1\">\n"
" <container name=\"notify_cid_info\">\n"
" <textarea name=\"notify_cid_line\">\n"
" <value>Line Number: %1</value>\n"
" </textarea>\n"
" <textarea name=\"notify_cid_name\">\n"
" <value>Call From: %2</value>\n"
" </textarea>\n"
" <textarea name=\"notify_cid_num\">\n"
" <value>Phone Number: %3</value>\n"
" </textarea>\n"
" <textarea name=\"notify_cid_dt\">\n"
" <value>Date: %4</value>\n"
" </textarea>\n"
" </container>\n"
"</mythnotify>")
.arg("1")
.arg(msg.arguments().at(0).toString())
.arg(msg.arguments().at(1).toString())
.arg(QDateTime::currentDateTime().toString(Qt::DefaultLocaleLongDate));
QByteArray datagram = message.toUtf8();
QUdpSocket *sock = new QUdpSocket();
sock->writeDatagram(datagram.constData(), datagram.length(), address, port);
sock->deleteLater();
}
};
const QHostAddress Handler::address = QHostAddress::Broadcast;
const int Handler::port = 6948;
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
static const QString service = "com.nokia.csd.Call";
static const QString path = "/com/nokia/csd/call";
static const QString interface = "com.nokia.csd.Call";
static const QString name = "Coming";
Handler callHandler;
static QDBusConnection conn = QDBusConnection::systemBus();
conn.connect(service, path, interface, name, &callHandler, SLOT(handleCall(const QDBusMessage&)));
return app.exec();
}
#include "main.moc"
|