summaryrefslogtreecommitdiffstats
path: root/kmobile/kmobileview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kmobile/kmobileview.cpp')
-rw-r--r--kmobile/kmobileview.cpp439
1 files changed, 439 insertions, 0 deletions
diff --git a/kmobile/kmobileview.cpp b/kmobile/kmobileview.cpp
new file mode 100644
index 000000000..dca825abf
--- /dev/null
+++ b/kmobile/kmobileview.cpp
@@ -0,0 +1,439 @@
+/* This file is part of the KDE KMobile library
+ Copyright (C) 2003 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 <qiconview.h>
+#include <qstringlist.h>
+
+#include <ktrader.h>
+#include <klibloader.h>
+#include <klocale.h>
+#include <kabc/vcardconverter.h>
+#include <kprocess.h>
+#include <kdebug.h>
+#include <kconfig.h>
+
+#include "kmobileview.h"
+#include "kmobileitem.h"
+
+
+KMobileView::KMobileView(QWidget *parent, KConfig *_config)
+ : DCOPObject("kmobileIface"), QIconView(parent)
+{
+ m_config = _config;
+ setSelectionMode(QIconView::Single);
+ setResizeMode(QIconView::Adjust);
+ setAutoArrange(true);
+ connect(this, SIGNAL(doubleClicked(QIconViewItem *)),
+ SLOT(slotDoubleClicked(QIconViewItem *)));
+}
+
+KMobileView::~KMobileView()
+{
+}
+
+bool KMobileView::addNewDevice(KConfig *config, KService::Ptr service)
+{
+ kdDebug() << "New mobile device item:\n";
+ kdDebug() << QString("LIBRARY: '%1', NAME: '%2', ICON: '%3', COMMENT: '%4'\n")
+ .arg(service->library()).arg(service->name()).arg(service->icon())
+ .arg(service->comment());
+
+ KMobileItem *it;
+ it = new KMobileItem(this, config, service);
+ bool available = it->driverAvailable();
+ it->configSave();
+ it->writeKonquMimeFile();
+ return available;
+}
+
+void KMobileView::saveAll()
+{
+ m_config->setGroup( "Main" );
+ m_config->writeEntry( "Entries", count() );
+ for ( QIconViewItem *item = firstItem(); item; item = item->nextItem() ) {
+ KMobileItem *it = static_cast<KMobileItem *>(item);
+ it->driverAvailable();
+ it->configSave();
+ it->writeKonquMimeFile();
+ }
+ m_config->sync();
+ emit signalChangeStatusbar( i18n("Configuration saved") );
+}
+
+void KMobileView::restoreAll()
+{
+ m_config->setGroup( "Main" );
+ int num = m_config->readNumEntry( "Entries" );
+ for (int i=0; i<num; ++i) {
+ KMobileItem *it;
+ it = new KMobileItem(this, m_config, i);
+ it->driverAvailable();
+ it->writeKonquMimeFile();
+ }
+ emit signalChangeStatusbar( i18n("Configuration restored") );
+}
+
+KMobileItem *KMobileView::findDevice( const QString &deviceName ) const
+{
+ for ( QIconViewItem *item = firstItem(); item; item = item->nextItem() ) {
+ if (item->text() == deviceName)
+ return static_cast<KMobileItem *>(item);
+ }
+ return 0L;
+}
+
+bool KMobileView::startKonqueror( const QString &devName )
+{
+ KProcess *proc = new KProcess;
+ *proc << "kfmclient" << "openProfile" << "webbrowsing" << "mobile:/"+devName;
+ return proc->start();
+}
+
+void KMobileView::slotDoubleClicked( QIconViewItem * item )
+{
+ startKonqueror(item->text());
+}
+
+
+/**
+ * DCOP - Implementation
+ */
+
+#define MUTEX_LOCK(dev) { dev->m_mutex.lock()
+#define MUTEX_UNLOCK(dev) dev->m_mutex.unlock(); }
+
+
+QStringList KMobileView::deviceNames()
+{
+ QStringList names;
+ for ( QIconViewItem *item = firstItem(); item; item = item->nextItem() ) {
+ names.append(item->text());
+ }
+ return names;
+}
+
+void KMobileView::removeDevice( QString deviceName )
+{
+ delete findDevice(deviceName);
+ emit signalChangeStatusbar( i18n("%1 removed").arg(deviceName) );
+}
+
+void KMobileView::configDevice( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return;
+ MUTEX_LOCK(dev->m_dev);
+ dev->m_dev->configDialog(this);
+ MUTEX_UNLOCK(dev->m_dev);
+}
+
+
+bool KMobileView::connectDevice( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return false;
+ bool connected;
+ MUTEX_LOCK(dev->m_dev);
+ connected = dev->m_dev->connectDevice();
+ MUTEX_UNLOCK(dev->m_dev);
+ emit signalChangeStatusbar(
+ connected ? i18n("Connection to %1 established").arg(deviceName)
+ : i18n("Connection to %1 failed").arg(deviceName) );
+ return connected;
+}
+
+bool KMobileView::disconnectDevice( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return true;
+ bool disconnected;
+ MUTEX_LOCK(dev->m_dev);
+ disconnected = dev->m_dev->disconnectDevice();
+ MUTEX_UNLOCK(dev->m_dev);
+ emit signalChangeStatusbar(
+ disconnected ? i18n("%1 disconnected").arg(deviceName)
+ : i18n("Disconnection of %1 failed").arg(deviceName) );
+ return disconnected;
+}
+
+bool KMobileView::connected( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return false;
+ bool conn;
+ MUTEX_LOCK(dev->m_dev);
+ conn = dev->m_dev->connected();
+ MUTEX_UNLOCK(dev->m_dev);
+ return conn;
+}
+
+
+QString KMobileView::deviceClassName( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return QString::null;
+ QString cn;
+ MUTEX_LOCK(dev->m_dev);
+ cn = dev->m_dev->deviceClassName();
+ MUTEX_UNLOCK(dev->m_dev);
+ return cn;
+}
+
+QString KMobileView::deviceName( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return QString::null;
+ QString dn;
+ MUTEX_LOCK(dev->m_dev);
+ dn = dev->m_dev->deviceName();
+ MUTEX_UNLOCK(dev->m_dev);
+ return dn;
+}
+
+QString KMobileView::revision( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return QString::null;
+ QString rev;
+ MUTEX_LOCK(dev->m_dev);
+ rev = dev->m_dev->revision();
+ MUTEX_UNLOCK(dev->m_dev);
+ return rev;
+}
+
+int KMobileView::classType( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return KMobileDevice::Unclassified;
+ int ct;
+ MUTEX_LOCK(dev->m_dev);
+ ct = dev->m_dev->classType();
+ MUTEX_UNLOCK(dev->m_dev);
+ return ct;
+}
+
+int KMobileView::capabilities( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return KMobileDevice::hasNothing;
+ int cap;
+ MUTEX_LOCK(dev->m_dev);
+ cap = dev->m_dev->capabilities();
+ MUTEX_UNLOCK(dev->m_dev);
+ return cap;
+}
+
+QString KMobileView::nameForCap( QString deviceName, int cap )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return QString::null;
+ QString nc;
+ MUTEX_LOCK(dev->m_dev);
+ nc = dev->m_dev->nameForCap(cap);
+ MUTEX_UNLOCK(dev->m_dev);
+ return nc;
+}
+
+QString KMobileView::iconFileName( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return QString::null;
+ QString fn;
+ MUTEX_LOCK(dev->m_dev);
+ fn = dev->m_dev->iconFileName();
+ MUTEX_UNLOCK(dev->m_dev);
+ return fn;
+}
+
+int KMobileView::numAddresses( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return 0;
+ int num;
+ MUTEX_LOCK(dev->m_dev);
+ num = dev->m_dev->numAddresses();
+ MUTEX_UNLOCK(dev->m_dev);
+ return num;
+}
+
+QString KMobileView::readAddress( QString deviceName, int index )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return QString::null;
+
+ int err;
+ KABC::Addressee adr;
+ MUTEX_LOCK(dev->m_dev);
+ err = dev->m_dev->readAddress(index, adr);
+ MUTEX_UNLOCK(dev->m_dev);
+ if (err)
+ return QString::null;
+
+ KABC::VCardConverter converter;
+ QString str = converter.createVCard(adr);
+ if (str.isEmpty())
+ return QString::null;
+
+ emit signalChangeStatusbar( i18n("Read addressbook entry %1 from %2")
+ .arg(index).arg(deviceName) );
+
+ return str;
+}
+
+bool KMobileView::storeAddress( QString deviceName, int index, QString vcard, bool append )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return false;
+
+ KABC::VCardConverter converter;
+ KABC::Addressee adr = converter.parseVCard(vcard);
+ if (adr.isEmpty())
+ return false;
+
+ int err;
+ MUTEX_LOCK(dev->m_dev);
+ err = dev->m_dev->storeAddress(index, adr, append);
+ MUTEX_UNLOCK(dev->m_dev);
+ emit signalChangeStatusbar(
+ err ? i18n("Storing contact %1 on %2 failed").arg(index).arg(deviceName)
+ : i18n("Contact %1 stored on %2").arg(index).arg(deviceName) );
+ return (err == 0);
+}
+
+int KMobileView::numCalendarEntries( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return 0;
+ int num;
+ MUTEX_LOCK(dev->m_dev);
+ num = dev->m_dev->numCalendarEntries();
+ MUTEX_UNLOCK(dev->m_dev);
+ return num;
+}
+
+int KMobileView::numNotes( QString deviceName )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return 0;
+ int num;
+ MUTEX_LOCK(dev->m_dev);
+ num = dev->m_dev->numNotes();
+ MUTEX_UNLOCK(dev->m_dev);
+ return num;
+}
+
+QString KMobileView::readNote( QString deviceName, int index )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return QString::null;
+
+ QString note;
+ int err;
+ MUTEX_LOCK(dev->m_dev);
+ err = dev->m_dev->readNote(index, note);
+ MUTEX_UNLOCK(dev->m_dev);
+ if (err)
+ return QString::null;
+ emit signalChangeStatusbar( i18n("Read note %1 from %2")
+ .arg(index).arg(deviceName) );
+ return note;
+}
+
+bool KMobileView::storeNote( QString deviceName, int index, QString note )
+{
+ KMobileItem *dev = findDevice(deviceName);
+ if (!dev || !dev->driverAvailable())
+ return false;
+
+ int err;
+ MUTEX_LOCK(dev->m_dev);
+ err = dev->m_dev->storeNote(index, note);
+ MUTEX_UNLOCK(dev->m_dev);
+ if (err)
+ return false;
+ emit signalChangeStatusbar( i18n("Stored note %1 to %2")
+ .arg(index).arg(deviceName) );
+ return true;
+}
+
+
+
+/*
+ * DCOP Implementation for the devices:/ kioslave
+ */
+
+/*
+ * returns the information for the given deviceName for usage in the
+ * the devices kioslave. The QStringList returned is comparable to the
+ * format of /etc/fstab file. Please refer to the devices kioslave for
+ * further information.
+ * If deviceName is empty, this functions returns information for all
+ * active mobile devices.
+ * (function is only used by the devices kioslave - don't use elsewhere !)
+ */
+QStringList KMobileView::kio_devices_deviceInfo(QString deviceName)
+{
+ QStringList mobiles = deviceNames();
+ if (mobiles.count() == 0)
+ return mobiles;
+
+ QStringList mountList;
+ for ( QStringList::Iterator it = mobiles.begin(); it != mobiles.end(); ++it ) {
+ QString name = *it;
+
+ if (deviceName.isEmpty())
+ mountList << name;
+ else
+ if (deviceName!=name)
+ continue;
+
+ KMobileItem *dev = findDevice(name);
+ QString mime = dev ? dev->getKonquMimeType() : KMOBILE_MIMETYPE_DEVICE;
+
+ mountList << name;
+ mountList << " ";
+ mountList << QString("mobile:/%1").arg(name); // KIO::encodeFileName()
+ mountList << mime;
+ mountList << "true"; // mountState
+ mountList << "---";
+ if (!deviceName.isEmpty())
+ break;
+ }
+ return mountList;
+}
+
+
+#include "kmobileview.moc"