22 #include "qskypedialer.h" 24 #include "../dbusconnectionpool.h" 26 #include <QtCore/QProcess> 27 #include <QtDBus/QDBusConnection> 28 #include <QtDBus/QDBusConnectionInterface> 29 #include <QtDBus/QDBusInterface> 30 #include <QtDBus/QDBusReply> 31 #include <klocalizedstring.h> 35 static bool isSkypeServiceRegistered()
37 const QLatin1String service(
"com.Skype.API");
39 QDBusConnectionInterface *
interface = QDBusConnection::sessionBus().interface();
40 if (interface->isServiceRegistered(service)) {
44 interface = Akonadi::DBusConnectionPool::threadConnection().interface();
45 if (interface->isServiceRegistered(service)) {
52 static QDBusInterface *searchSkypeDBusInterface()
54 const QLatin1String service(
"com.Skype.API");
55 const QLatin1String path(
"/com/Skype");
57 QDBusInterface *
interface = new QDBusInterface(service, path, QString(), QDBusConnection::sessionBus());
58 if (!interface->isValid()) {
60 interface = new QDBusInterface(service, path, QString(),
Akonadi::DBusConnectionPool::threadConnection());
66 QSkypeDialer::QSkypeDialer(const QString &applicationName)
67 : QDialer(applicationName), mInterface(0)
71 QSkypeDialer::~QSkypeDialer()
76 bool QSkypeDialer::initializeSkype()
78 if (mInterface && mInterface->isValid()) {
83 if (!isSkypeServiceRegistered()) {
86 if (!QProcess::startDetached(QLatin1String(
"skype"), QStringList())) {
87 mErrorMessage = i18n(
"Unable to start skype process, check that skype executable is in your PATH variable.");
92 for (
int i = 0; i < runs; ++i) {
93 if (!isSkypeServiceRegistered()) {
102 mInterface = searchSkypeDBusInterface();
104 if (!mInterface->isValid()) {
108 mErrorMessage = i18n(
"Skype Public API (D-Bus) seems to be disabled.");
112 QDBusReply<QString> reply = mInterface->call(QLatin1String(
"Invoke"), QString::fromLatin1(
"NAME %1").arg(mApplicationName));
113 if (reply.value() != QLatin1String(
"OK")) {
117 mErrorMessage = i18n(
"Skype registration failed.");
121 reply = mInterface->call(QLatin1String(
"Invoke"), QLatin1String(
"PROTOCOL 1"));
122 if (reply.value() != QLatin1String(
"PROTOCOL 1")) {
126 mErrorMessage = i18n(
"Protocol mismatch.");
133 bool QSkypeDialer::dialNumber(
const QString &number)
135 if (!initializeSkype()) {
139 QDBusReply<QString> reply = mInterface->call(QLatin1String(
"Invoke"), QString::fromLatin1(
"CALL %1").arg(number));
144 bool QSkypeDialer::sendSms(
const QString &number,
const QString &text)
146 if (!initializeSkype()) {
151 QDBusReply<QString> reply = mInterface->call(QLatin1String(
"Invoke"), QString::fromLatin1(
"CREATE SMS OUTGOING %1").arg(number));
152 const QString messageId = reply.value().section(QLatin1String(
" "), 1, 1);
155 reply = mInterface->call(QLatin1String(
"Invoke"), QString::fromLatin1(
"SET SMS %1 BODY %2").arg(messageId, text));
158 reply = mInterface->call(QLatin1String(
"Invoke"), QString::fromLatin1(
"ALTER SMS %1 SEND").arg(messageId));
159 if (reply.value().contains(QLatin1String(
"ERROR"))) {
160 mErrorMessage = reply.value();
162 reply = mInterface->call(QLatin1String(
"Invoke"), QString::fromLatin1(
"DELETE SMS %1").arg(messageId));
FreeBusyManager::Singleton.