summaryrefslogtreecommitdiffstats
path: root/kmobile/kmobileclient.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch)
tree67208f7c145782a7e90b123b982ca78d88cc2c87 /kmobile/kmobileclient.cpp
downloadtdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz
tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kmobile/kmobileclient.cpp')
-rw-r--r--kmobile/kmobileclient.cpp235
1 files changed, 235 insertions, 0 deletions
diff --git a/kmobile/kmobileclient.cpp b/kmobile/kmobileclient.cpp
new file mode 100644
index 00000000..6da1b919
--- /dev/null
+++ b/kmobile/kmobileclient.cpp
@@ -0,0 +1,235 @@
+/* This file is part of the KDE KMobile library
+ Copyright (C) 2003-2005 Helge Deller <deller@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+*/
+
+#include <qstringlist.h>
+
+#include <ktrader.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include "kmobileclient.h"
+
+#define KMOBILECLIENT_DEBUG_AREA 0
+#define PRINT_DEBUG kdDebug(KMOBILECLIENT_DEBUG_AREA) << "KMobileClient: "
+
+KMobileClient::KMobileClient()
+ : DCOPClient()
+{
+ // initialize Application and Object of remote DCOP-aware KMobile application
+ m_kmobileApp = "kmobile";
+ m_kmobileObj = "kmobileIface";
+
+ bool ok = attach();
+ PRINT_DEBUG << QString("attached to DCOP server %1\n").arg(ok?"sucessful.":"failed.");
+
+// m_clientAppId = registerAs("kmobileclient");
+// PRINT_DEBUG << QString("registered as DCOP client %1\n").arg(m_clientAppId);
+
+ isKMobileAvailable();
+}
+
+KMobileClient::~KMobileClient()
+{
+ detach();
+ PRINT_DEBUG << QString("detached from server\n");
+}
+
+
+bool KMobileClient::isKMobileAvailable()
+{
+ bool available = isApplicationRegistered(m_kmobileApp);
+ PRINT_DEBUG << QString("KMobile DCOP server: %1\n").arg(available?"available.":"not available");
+ if (!available) {
+ startKMobileApplication();
+ // check again...
+ available = isApplicationRegistered(m_kmobileApp);
+ }
+ return available;
+}
+
+bool KMobileClient::startKMobileApplication()
+{
+ QByteArray data;
+ QDataStream arg(data, IO_WriteOnly);
+ QStringList params;
+ params << "--minimized";
+ arg << QString("kmobile") << params;
+ QCString replyType;
+ QByteArray replyData;
+ bool ok = call("klauncher", "klauncher", "kdeinit_exec_wait(QString,QStringList)", data, replyType, replyData);
+ PRINT_DEBUG << QString("DCOP-CALL to klauncher: %1\n").arg(ok?"ok.":"failed.");
+ return ok;
+}
+
+
+/**
+ * DCOP - IMPLEMENTATION
+ */
+
+#define KMOBILECLIENT_USE_EVENTLOOP true
+#define KMOBILECLIENT_TIMEOUT (4*1000) // 4 seconds
+
+
+#define PREPARE( FUNC, PARAMS ) \
+ QByteArray data; \
+ QDataStream arg(data, IO_WriteOnly); \
+ arg << PARAMS; \
+ QCString replyType; \
+ QByteArray replyData; \
+ bool ok = call(m_kmobileApp, m_kmobileObj, FUNC, data, replyType, replyData, KMOBILECLIENT_USE_EVENTLOOP, KMOBILECLIENT_TIMEOUT); \
+ PRINT_DEBUG << QString("DCOP-CALL to %1: %2\n").arg(FUNC).arg(ok?"ok.":"FAILED.")
+
+#define RETURN_TYPE( FUNC, PARAMS, RETURN_TYPE ) \
+ PREPARE( FUNC, PARAMS ); \
+ QDataStream reply(replyData, IO_ReadOnly); \
+ RETURN_TYPE ret; \
+ if (ok) \
+ reply >> ret; \
+ return ret;
+
+#define RETURN_TYPE_DEFAULT( FUNC, PARAMS, RETURN_TYPE, RETURN_DEFAULT ) \
+ PREPARE( FUNC, PARAMS ); \
+ QDataStream reply(replyData, IO_ReadOnly); \
+ RETURN_TYPE ret = RETURN_DEFAULT; \
+ if (ok) \
+ reply >> ret; \
+ return ret;
+
+#define RETURN_QSTRING( FUNC, PARAMS ) \
+ RETURN_TYPE( FUNC, PARAMS, QString )
+
+#define RETURN_BOOL( FUNC, PARAMS ) \
+ RETURN_TYPE_DEFAULT( FUNC, PARAMS, bool, false )
+
+#define RETURN_INT( FUNC, PARAMS ) \
+ RETURN_TYPE_DEFAULT( FUNC, PARAMS, int , 0 )
+
+
+
+QStringList KMobileClient::deviceNames()
+{
+ if (!isKMobileAvailable())
+ return QStringList();
+ RETURN_TYPE( "deviceNames()", QString::fromLatin1(""), QStringList );
+}
+
+void KMobileClient::removeDevice( QString deviceName )
+{
+ PREPARE( "removeDevice(QString)", deviceName );
+ Q_UNUSED(ok);
+}
+
+void KMobileClient::configDevice( QString deviceName )
+{
+ PREPARE( "configDevice(QString)", deviceName );
+ Q_UNUSED(ok);
+}
+
+
+bool KMobileClient::connectDevice( QString deviceName )
+{
+ RETURN_BOOL( "connectDevice(QString)", deviceName );
+}
+
+bool KMobileClient::disconnectDevice( QString deviceName )
+{
+ RETURN_BOOL( "disconnectDevice(QString)", deviceName );
+}
+
+bool KMobileClient::connected( QString deviceName )
+{
+ RETURN_BOOL( "connected(QString)", deviceName );
+}
+
+
+QString KMobileClient::deviceClassName( QString deviceName )
+{
+ RETURN_QSTRING( "deviceClassName(QString)", deviceName );
+}
+
+QString KMobileClient::deviceName( QString deviceName )
+{
+ RETURN_QSTRING( "deviceName(QString)", deviceName );
+}
+
+QString KMobileClient::revision( QString deviceName )
+{
+ RETURN_QSTRING( "revision(QString)", deviceName );
+}
+
+int KMobileClient::classType( QString deviceName )
+{
+ RETURN_INT( "classType(QString)", deviceName );
+}
+
+int KMobileClient::capabilities( QString deviceName )
+{
+ RETURN_INT( "capabilities(QString)", deviceName );
+}
+
+QString KMobileClient::nameForCap( QString deviceName, int cap )
+{
+ RETURN_QSTRING( "nameForCap(QString,int)", deviceName << cap );
+}
+
+QString KMobileClient::iconFileName( QString deviceName )
+{
+ RETURN_QSTRING( "iconFileName(QString)", deviceName );
+}
+
+int KMobileClient::numAddresses( QString deviceName )
+{
+ RETURN_INT( "numAddresses(QString)", deviceName );
+}
+
+QString KMobileClient::readAddress( QString deviceName, int index )
+{
+ RETURN_QSTRING( "readAddress(QString,int)", deviceName << index );
+}
+
+bool KMobileClient::storeAddress( QString deviceName, int index, QString vcard, bool append )
+{
+ RETURN_BOOL( "storeAddress(QString,int,QString,bool)", deviceName << index << vcard << append );
+}
+
+int KMobileClient::numCalendarEntries( QString deviceName )
+{
+ RETURN_INT( "numCalendarEntries(QString)", deviceName );
+}
+
+int KMobileClient::numNotes( QString deviceName )
+{
+ RETURN_INT( "numNotes(QString)", deviceName );
+}
+
+QString KMobileClient::readNote( QString deviceName, int index )
+{
+ RETURN_QSTRING( "readNote(QString,int)", deviceName << index );
+}
+
+bool KMobileClient::storeNote( QString deviceName, int index, QString note )
+{
+ RETURN_BOOL( "storeNote(QString,int,QString)", deviceName << index << note );
+}
+
+
+
+#undef PRINT_DEBUG
+
+#include "kmobileclient.moc"