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 ) );