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>
32 #include <klocalizedstring.h>
36 static bool isSkypeServiceRegistered()
38 const QLatin1String service(
"com.Skype.API" );
40 QDBusConnectionInterface *
interface = QDBusConnection::systemBus().interface();
41 if ( interface->isServiceRegistered( service ) ) {
45 interface = Akonadi::DBusConnectionPool::threadConnection().interface();
46 if ( interface->isServiceRegistered( service ) ) {
53 static QDBusInterface* searchSkypeDBusInterface()
55 const QLatin1String service(
"com.Skype.API" );
56 const QLatin1String path(
"/com/Skype" );
58 QDBusInterface *
interface = new QDBusInterface( service, path, QString(), QDBusConnection::systemBus() );
59 if ( !interface->isValid() ) {
61 interface = new QDBusInterface( service, path, QString(), Akonadi::DBusConnectionPool::threadConnection() );
67 QSkypeDialer::QSkypeDialer( const QString &applicationName )
68 : QDialer( applicationName ), mInterface( 0 )
72 QSkypeDialer::~QSkypeDialer()
77 bool QSkypeDialer::initializeSkype()
79 if ( mInterface && mInterface->isValid() ) {
84 if ( !isSkypeServiceRegistered() ) {
87 if ( !QProcess::startDetached( QLatin1String(
"skype" ), QStringList() ) ) {
88 mErrorMessage = i18n(
"Unable to start skype process, check that skype executable is in your PATH variable." );
93 for (
int i = 0; i < runs; ++i ) {
94 if ( !isSkypeServiceRegistered() ) {
103 mInterface = searchSkypeDBusInterface();
105 if ( !mInterface->isValid() ) {
109 mErrorMessage = i18n(
"Skype Public API (D-Bus) seems to be disabled." );
113 QDBusReply<QString> reply = mInterface->call( QLatin1String(
"Invoke" ), QString::fromLatin1(
"NAME %1" ).arg( mApplicationName ) );
114 if ( reply.value() != QLatin1String(
"OK" ) ) {
118 mErrorMessage = i18n(
"Skype registration failed." );
122 reply = mInterface->call( QLatin1String(
"Invoke" ), QLatin1String(
"PROTOCOL 1" ) );
123 if ( reply.value() != QLatin1String(
"PROTOCOL 1" ) ) {
127 mErrorMessage = i18n(
"Protocol mismatch." );
134 bool QSkypeDialer::dialNumber(
const QString &number )
136 if ( !initializeSkype() ) {
140 QDBusReply<QString> reply = mInterface->call( QLatin1String(
"Invoke" ), QString::fromLatin1(
"CALL %1" ).arg( number ) );
145 bool QSkypeDialer::sendSms(
const QString &number,
const QString &text )
147 if ( !initializeSkype() ) {
152 QDBusReply<QString> reply = mInterface->call( QLatin1String(
"Invoke" ), QString::fromLatin1(
"CREATE SMS OUTGOING %1" ).arg( number ) );
153 const QString messageId = reply.value().section( QLatin1String(
" " ), 1, 1 );
156 reply = mInterface->call( QLatin1String(
"Invoke" ), QString::fromLatin1(
"SET SMS %1 BODY %2" ).arg( messageId, text ) );
159 reply = mInterface->call( QLatin1String(
"Invoke" ), QString::fromLatin1(
"ALTER SMS %1 SEND" ).arg( messageId ) );
160 if ( reply.value().contains( QLatin1String(
"ERROR" ) ) ) {
161 mErrorMessage = reply.value();
163 reply = mInterface->call( QLatin1String(
"Invoke" ), QString::fromLatin1(
"DELETE SMS %1" ).arg( messageId ) );