diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch) | |
tree | 67208f7c145782a7e90b123b982ca78d88cc2c87 /kmobile/kioslave | |
download | tdepim-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/kioslave')
-rw-r--r-- | kmobile/kioslave/Makefile.am | 18 | ||||
-rw-r--r-- | kmobile/kioslave/cellphone.protocol | 18 | ||||
-rw-r--r-- | kmobile/kioslave/kio_mobile.cpp | 636 | ||||
-rw-r--r-- | kmobile/kioslave/kio_mobile.h | 70 | ||||
-rw-r--r-- | kmobile/kioslave/mimetypes/Makefile.am | 4 | ||||
-rw-r--r-- | kmobile/kioslave/mimetypes/mobile_addressbook.desktop | 61 | ||||
-rw-r--r-- | kmobile/kioslave/mimetypes/mobile_calendar.desktop | 61 | ||||
-rw-r--r-- | kmobile/kioslave/mimetypes/mobile_device.desktop | 65 | ||||
-rw-r--r-- | kmobile/kioslave/mimetypes/mobile_notes.desktop | 59 | ||||
-rw-r--r-- | kmobile/kioslave/mobile.protocol | 18 | ||||
-rw-r--r-- | kmobile/kioslave/organizer.protocol | 18 | ||||
-rw-r--r-- | kmobile/kioslave/pda.protocol | 18 | ||||
-rw-r--r-- | kmobile/kioslave/phonecamera.protocol | 18 |
13 files changed, 1064 insertions, 0 deletions
diff --git a/kmobile/kioslave/Makefile.am b/kmobile/kioslave/Makefile.am new file mode 100644 index 000000000..6f9d24201 --- /dev/null +++ b/kmobile/kioslave/Makefile.am @@ -0,0 +1,18 @@ +SUBDIRS = mimetypes + +INCLUDES = -I$(top_srcdir)/kmobile -I$(top_srcdir) $(all_includes) + +kde_module_LTLIBRARIES = kio_mobile.la + +kio_mobile_la_SOURCES = kio_mobile.cpp +kio_mobile_la_LIBADD = $(LIB_KIO) ../libkmobileclient.la +kio_mobile_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -module $(KDE_PLUGIN) + +kde_services_DATA = mobile.protocol cellphone.protocol \ + organizer.protocol pda.protocol +# do not install the camera protocol now - we already have a +# camera kioslave !! +# phonecamera.protocol + +messages: + $(XGETTEXT) *.cpp -o $(podir)/kio_mobile.pot diff --git a/kmobile/kioslave/cellphone.protocol b/kmobile/kioslave/cellphone.protocol new file mode 100644 index 000000000..5f37df784 --- /dev/null +++ b/kmobile/kioslave/cellphone.protocol @@ -0,0 +1,18 @@ +[Protocol] +exec=kio_mobile +protocol=cellphone +input=none +output=filesystem +# listing=Name +listing=Name,Type,URL,MimeType +reading=true +source=true +writing=true +makedir=true +deleting=true +# linking=true +# moving=true +# mimetype=text/plain +# determineMimetypeFromExtension=true +DocPath=kioslave/mobile.html +Icon=mobile_phone diff --git a/kmobile/kioslave/kio_mobile.cpp b/kmobile/kioslave/kio_mobile.cpp new file mode 100644 index 000000000..ec987fb06 --- /dev/null +++ b/kmobile/kioslave/kio_mobile.cpp @@ -0,0 +1,636 @@ +/* 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 <sys/types.h> +#include <sys/stat.h> + +#include <sys/types.h> +#include <unistd.h> +#include <time.h> + +#include <qregexp.h> + +#include <kdebug.h> +#include <klocale.h> +#include <kinstance.h> +#include <kabc/vcardconverter.h> + +#include "kio_mobile.h" + +#include <kdepimmacros.h> + +using namespace KIO; + +#define KIO_MOBILE_DEBUG_AREA 7126 +#define PRINT_DEBUG kdDebug(KIO_MOBILE_DEBUG_AREA) << "kio_mobile: " + +extern "C" { KDE_EXPORT int kdemain(int argc, char **argv); } + +/** + * The main program. + */ +int kdemain(int argc, char **argv) +{ + KInstance instance( "kio_mobile" ); + + PRINT_DEBUG << "Starting " << getpid() << endl; + + if (argc != 4) { + fprintf(stderr, "Usage kio_mobile protocol pool app\n"); + return -1; + } + // let the protocol class do its work + KMobileProtocol slave(argv[2], argv[3]); + + slave.dispatchLoop(); + + PRINT_DEBUG << "Done" << endl; + return 0; +} + + +/** + * Initialize the mobile slave + */ +KMobileProtocol::KMobileProtocol(const QCString &pool, const QCString &app) + : SlaveBase( "mobile", pool, app) +{ +} + +KMobileProtocol::~KMobileProtocol() +{ +} + +/* + * getDeviceAndRessource("mobile:/<devicename>/<resource>/...") - split + */ +int KMobileProtocol::getDeviceAndRessource(const QString &_path, + QString &devName, QString &resource, QString &devPath, + KMobileDevice::Capabilities &devCaps) +{ +// PRINT_DEBUG << QString("###getDeviceAndRessource### %1\n").arg(_path); + QStringList path = QStringList::split('/', _path, false); + + devName = resource = devPath = QString::null; + devCaps = KMobileDevice::hasNothing; + + if (path.count() >= 1) { devName = path[0]; path.pop_front(); }; + if (path.count() >= 1) { resource = path[0]; path.pop_front(); }; + if (path.count() >= 1) devPath = path.join("/"); + + if (devName.isEmpty()) + return 0; + + int _caps = m_dev.capabilities(devName); + + if (resource.isEmpty()) { + devCaps = (KMobileDevice::Capabilities) _caps; + return 0; + } + + for (int i=0; i<31; i++) { + int cap = 1UL << i; + if ((_caps & cap) == 0) + continue; + QString capname = m_dev.nameForCap(devName,cap); + if (capname != resource) + continue; + devCaps = (KMobileDevice::Capabilities) cap; + return 0; + } + + return KIO::ERR_DOES_NOT_EXIST; +} + + +static +void addAtom(KIO::UDSEntry& entry, unsigned int ID, long l, const QString& s = QString::null) +{ + KIO::UDSAtom atom; + atom.m_uds = ID; + atom.m_long = l; + atom.m_str = s; + entry.append(atom); +} + +static +void createDirEntry(KIO::UDSEntry& entry, const QString& name, const QString& url, const QString& mime) +{ + entry.clear(); + addAtom(entry, KIO::UDS_NAME, 0, name); + addAtom(entry, KIO::UDS_FILE_TYPE, S_IFDIR); + addAtom(entry, KIO::UDS_ACCESS, 0500); + addAtom(entry, KIO::UDS_MIME_TYPE, 0, mime); + addAtom(entry, KIO::UDS_URL, 0, url); + addAtom(entry, KIO::UDS_USER, 0, getenv("USER")); + addAtom(entry, KIO::UDS_GROUP, 0, getenv("USER")); + PRINT_DEBUG << QString("createDirEntry: File: %1 MIME: %2 URL: %3\n").arg(name).arg(mime).arg(url); +// addAtom(entry, KIO::UDS_SIZE, 0); + addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, mime); +} + +static +void createFileEntry(KIO::UDSEntry& entry, const QString& name, const QString& url, const QString& mime, + const unsigned long size = 0) +{ + entry.clear(); + addAtom(entry, KIO::UDS_NAME, 0, name); + addAtom(entry, KIO::UDS_FILE_TYPE, S_IFREG); + addAtom(entry, KIO::UDS_URL, 0, url); + addAtom(entry, KIO::UDS_ACCESS, 0400); + addAtom(entry, KIO::UDS_USER, 0, getenv("USER")); + addAtom(entry, KIO::UDS_GROUP, 0, getenv("USER")); + addAtom(entry, KIO::UDS_MIME_TYPE, 0, mime); + if (size) addAtom(entry, KIO::UDS_SIZE, size); + addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, mime); + PRINT_DEBUG << QString("createFileEntry: File: %1, Size: %2, MIME: %3\n").arg(name).arg(size).arg(mime); +} + + +/** + * Get the information contained in the URL. + */ +void KMobileProtocol::get(const KURL &url) +{ + PRINT_DEBUG << "###############################\n"; + PRINT_DEBUG << QString("get(%1)\n").arg(url.path()); + + KMobileDevice::Capabilities devCaps; + QString devName, resource, devPath; + + int err = getDeviceAndRessource(url.path(), devName, resource, devPath, devCaps); + if (err) { + error(err, url.path()); + return; + } + + if (devName.isEmpty() || resource.isEmpty()) { + error(KIO::ERR_DOES_NOT_EXIST, url.path()); + return; + } + + // collect the result + QCString result; + QString mime; + switch (devCaps) { + case KMobileDevice::hasAddressBook: err = getVCard(devName, result, mime, devPath); + break; + case KMobileDevice::hasCalendar: err = getCalendar(devName, result, mime, devPath); + break; + case KMobileDevice::hasNotes: err = getNote(devName, result, mime, devPath); + break; + case KMobileDevice::hasFileStorage: err = getFileStorage(devName, result, mime, devPath); + break; + default: err = KIO::ERR_CANNOT_ENTER_DIRECTORY; /* TODO */ + } + + if (err) { + error(err, url.path()); + return; + } + + // tell the mimetype + mimeType(mime); + + // tell the length + KIO::filesize_t processed_size = result.length(); + totalSize(processed_size); + + // tell the contents of the URL + QByteArray array; + array.setRawData( result.data(), result.length() ); + data(array); + array.resetRawData( result.data(), result.length() ); + processedSize( processed_size ); + // tell we are finished + data(QByteArray()); + + // tell we are finished + finished(); +} + + +/* + * listRoot() - gives listing of all devices + */ +void KMobileProtocol::listRoot(const KURL& url) +{ + PRINT_DEBUG << QString("########## listRoot(%1) for %2:/\n").arg(url.path()).arg(url.protocol()); + + KIO::UDSEntry entry; + + QStringList deviceNames = m_dev.deviceNames(); + unsigned int dirs = deviceNames.count(); + totalSize(dirs); + + int classMask = KMobileDevice::Unclassified; + /* handle all possible protocols here and just add a <protocol>.protocol file */ + if (url.protocol() == "cellphone") // cellphone:/ + classMask = KMobileDevice::Phone; + if (url.protocol() == "organizer" || // organizer:/ + url.protocol() == "pda") // pda:/ + classMask = KMobileDevice::Organizer; + if (url.protocol() == "phonecamera") // camera:/ + classMask = KMobileDevice::Camera; + + for (unsigned int i=0; i<dirs; i++) { + + QString devName = deviceNames[i]; + + if (classMask != KMobileDevice::Unclassified && + m_dev.classType(devName) != classMask) + continue; + + createDirEntry(entry, devName, "mobile:/"+devName, + KMOBILE_MIMETYPE_DEVICE_KONQUEROR(devName)); + listEntry(entry, false); + + processedSize(i+1); + } + listEntry(entry, true); + finished(); +} + + +/* + * folderMimeType() - returns mimetype of the folder itself + */ +QString KMobileProtocol::folderMimeType(int cap) +{ + QString mimetype; + switch (cap) { + case KMobileDevice::hasAddressBook: mimetype = KMOBILE_MIMETYPE_INODE "addressbook"; + break; + case KMobileDevice::hasCalendar: mimetype = KMOBILE_MIMETYPE_INODE "calendar"; + break; + case KMobileDevice::hasNotes: mimetype = KMOBILE_MIMETYPE_INODE "notes"; + break; + case KMobileDevice::hasFileStorage: + default: mimetype = "inode/directory"; + } + return mimetype; +} + +/* + * entryMimeType() - returns mimetype of the entries in the given folder + */ +QString KMobileProtocol::entryMimeType(int cap) +{ + QString mimetype; + switch (cap) { + case KMobileDevice::hasAddressBook: mimetype = "text/x-vcard"; + break; + case KMobileDevice::hasCalendar: mimetype = "text/x-vcalendar"; + break; + case KMobileDevice::hasNotes: mimetype = "text/plain"; + break; + case KMobileDevice::hasFileStorage: + default: mimetype = "text/plain"; + } + return mimetype; +} + +/* + * listTopDeviceDir("mobile:/<devicename>") - sub-directory of a devices + */ + +void KMobileProtocol::listTopDeviceDir(const QString &devName) +{ + PRINT_DEBUG << QString("listTopDeviceDir(%1)\n").arg(devName); + + KIO::UDSEntry entry; + unsigned int caps = m_dev.capabilities(devName); + + for (int i=0; i<31; i++) { + unsigned int cap = 1UL<<i; + if ((caps & cap) == 0) + continue; + + QString filename = m_dev.nameForCap(devName, cap); + QString mimetype = folderMimeType(cap); + + createDirEntry(entry, filename, QString("mobile:/%1/%2/").arg(devName).arg(filename), mimetype); + listEntry(entry, false); + } + listEntry(entry, true); + finished(); +} + + +/* + * listEntries("mobile:/<devicename>/<resource>") - resources of a device + */ +void KMobileProtocol::listEntries(const QString &devName, + const QString &resource, const QString &devPath, + const KMobileDevice::Capabilities devCaps) +{ + PRINT_DEBUG << QString("listEntries(%1,%2,%3)\n").arg(devName).arg(resource).arg(devPath); + switch (devCaps) { + case KMobileDevice::hasAddressBook: listAddressBook(devName, resource); + break; + case KMobileDevice::hasCalendar: listCalendar(devName, resource); + break; + case KMobileDevice::hasNotes: listNotes(devName, resource); + break; + case KMobileDevice::hasFileStorage: listFileStorage(devName, resource, devPath); + break; + default: error( ERR_CANNOT_ENTER_DIRECTORY, + QString("/%1/%2").arg(devName).arg(resource) ); + } +} + +/* + * listAddressBook("mobile:/<devicename>/Addressbook) - list the addressbook + */ +void KMobileProtocol::listAddressBook(const QString &devName, const QString &resource) +{ + PRINT_DEBUG << QString("listAddressBook(%1)\n").arg(devName); + + KIO::UDSEntry entry; + + int fieldwidth; + int entries = m_dev.numAddresses(devName); + if (entries>=1000) fieldwidth=4; else + if (entries>=100) fieldwidth=3; else + if (entries>=10) fieldwidth=2; else fieldwidth=1; + totalSize(entries); +// QRegExp rx; rx.setPattern( ".*FN:([\\w\\s]*)[\\n\\r]{2}.*" ); + QString name; + for (int i=0; i<entries; i++) { + +#if 0 + QString content = m_dev.readAddress(devName, i); + if ( rx.search( content ) < 0 ) + name = QString::null; + else + name = "_" + rx.cap(1); +#endif + + QString filename = QString("%1%2.vcf").arg(i,fieldwidth).arg(name); + for (int p=0; p<fieldwidth; p++) { + if (filename[p]==' ') filename[p]='0'; else break; + } + QString url = QString("mobile:/%1/%2/%3").arg(devName).arg(resource).arg(filename); + + createFileEntry(entry, filename, url, entryMimeType(KMobileDevice::hasAddressBook), + 400 /*content.utf8().length()*/ ); + listEntry(entry, false); + + processedSize(i+1); + } + listEntry(entry, true); + finished(); +} + +/* + * getVCard() - gives the vCard of the given file + */ +int KMobileProtocol::getVCard( const QString &devName, QCString &result, QString &mime, const QString &path ) +{ + PRINT_DEBUG << QString("getVCard(%1)\n").arg(path); + + int index = path.find('.'); + if (index>0) + index = path.left(index).toInt(); + if (index<0 || index>=m_dev.numAddresses(devName)) + return KIO::ERR_DOES_NOT_EXIST; + + QString str = m_dev.readAddress(devName, index); + if (str.isEmpty()) + return KIO::ERR_INTERNAL; + result = str.utf8(); + mime = entryMimeType(KMobileDevice::hasAddressBook); +// setMetaData("plugin", "const QString &key, const QString &value); + return 0; +} + +/* + * listCalendar("mobile:/<devicename>/Calendar) - list the calendar entries + */ +void KMobileProtocol::listCalendar( const QString &devName, const QString &resource) +{ + PRINT_DEBUG << QString("listCalendar(%1)\n").arg(devName); + + KIO::UDSEntry entry; + + int entries = m_dev.numCalendarEntries(devName); + totalSize(entries); + for (int i=0; i<entries; i++) { + + QString filename = QString("%1_%2.vcs").arg(i).arg(i18n("calendar")); + QString url = QString("mobile:/%1/%2/%3").arg(devName).arg(resource).arg(filename); + + createFileEntry(entry, filename, url, entryMimeType(KMobileDevice::hasCalendar)); + listEntry(entry, false); + + processedSize(i+1); + } + listEntry(entry, true); + finished(); +} + +/* + * getCalendar() - reads a calendar entry + */ +int KMobileProtocol::getCalendar( const QString &devName, QCString &result, QString &mime, const QString &path) +{ + PRINT_DEBUG << QString("getCalendar(%1, #%2)\n").arg(devName).arg(path); + + /* TODO */ + Q_UNUSED(result); + Q_UNUSED(mime); + return KIO::ERR_CANNOT_ENTER_DIRECTORY; +} + + +/* + * listNotes("mobile:/<devicename>/Notes) - list the notes + */ +void KMobileProtocol::listNotes( const QString &devName, const QString &resource) +{ + PRINT_DEBUG << QString("listNotes(%1)\n").arg(devName); + + KIO::UDSEntry entry; + + int entries = m_dev.numNotes(devName); + totalSize(entries); + for (int i=0; i<entries; i++) { + + QString note /*= m_dev.readNote(devName, i)*/; + + QString filename = QString("%1_%2.txt").arg(i).arg(i18n("note")); + QString url = QString("mobile:/%1/%2/%3").arg(devName).arg(resource).arg(filename); + + createFileEntry(entry, filename, url, entryMimeType(KMobileDevice::hasNotes), + 0 /*note.utf8().length()*/); + listEntry(entry, false); + + processedSize(i+1); + } + listEntry(entry, true); + finished(); +} + +/* + * getNote() - gives the Note of the given file + */ +int KMobileProtocol::getNote( const QString &devName, QCString &result, QString &mime, const QString &path ) +{ + PRINT_DEBUG << QString("getNote(%1)\n").arg(path); + + int index = path.find('_'); + if (index>0) + index = path.left(index).toInt(); + if (index<0 || index>=m_dev.numNotes(devName)) + return KIO::ERR_DOES_NOT_EXIST; + + QString note = m_dev.readNote(devName, index); + if (note.isEmpty()) + return KIO::ERR_DOES_NOT_EXIST; + + result = note.utf8(); + mime = entryMimeType(KMobileDevice::hasNotes); + return 0; +} + +/* + * listFileStorage("mobile:/<devicename>/Files) - list the files on the device + */ +void KMobileProtocol::listFileStorage(const QString &devName, const QString &resource, const QString &devPath) +{ + PRINT_DEBUG << QString("listFileStorage(%1,%2)\n").arg(devName).arg(devPath); + + /* TODO */ + error( KIO::ERR_DOES_NOT_EXIST, QString("/%1/%2/%3").arg(devName).arg(resource).arg(devPath) ); +} + +/* + * getFileStorage() - gives the file contents of the given file + */ +int KMobileProtocol::getFileStorage(const QString &devName, QCString &result, QString &mime, const QString &path) +{ + PRINT_DEBUG << QString("getFileStorage(%1)\n").arg(path); + + /* TODO */ + Q_UNUSED(devName); + Q_UNUSED(result); + Q_UNUSED(mime); + return KIO::ERR_CANNOT_ENTER_DIRECTORY; +} + + +/** + * Test if the url contains a directory or a file. + */ +void KMobileProtocol::stat( const KURL &url ) +{ + PRINT_DEBUG << "###############################\n"; + PRINT_DEBUG << QString("stat(%1)\n").arg(url.path()); + + KMobileDevice::Capabilities devCaps; + QString devName, resource, devPath; + + int err = getDeviceAndRessource(url.path(), devName, resource, devPath, devCaps); + if (err) { + error(err, url.path()); + return; + } + + QStringList path = QStringList::split('/', url.path(), false); + QString filename = (path.count()>0) ? path[path.count()-1] : "/"; + QString fullPath = path.join("/"); + QString fullUrl = QString("mobile:/%1").arg(fullPath); + + UDSEntry entry; + + bool isDir = devPath.isEmpty(); + + if (isDir) { + createDirEntry(entry, filename, fullUrl, folderMimeType(devCaps)); + } else { + createFileEntry(entry, filename, fullUrl, entryMimeType(devCaps)); + } + + statEntry(entry); + finished(); +} + +/** + * Get the mimetype. + */ +void KMobileProtocol::mimetype(const KURL &url) +{ + PRINT_DEBUG << "###############################\n"; + PRINT_DEBUG << QString("mimetype(%1)\n").arg(url.path()); + + KMobileDevice::Capabilities devCaps; + QString devName, resource, devPath; + + int err = getDeviceAndRessource(url.path(), devName, resource, devPath, devCaps); + if (err) { + error(err, url.path()); + return; + } + + // tell the mimetype + mimeType(entryMimeType(devCaps)); + finished(); +} + +/** + * List the contents of a directory. + */ +void KMobileProtocol::listDir(const KURL &url) +{ + PRINT_DEBUG << "###############################\n"; + PRINT_DEBUG << QString("listDir(%1)\n").arg(url.path()); + + if (!m_dev.isKMobileAvailable()) { + error( KIO::ERR_CONNECTION_BROKEN, i18n("KDE Mobile Device Manager") ); + return; + } + + KMobileDevice::Capabilities devCaps; + QString devName, resource, devPath; + + int err = getDeviceAndRessource(url.path(), devName, resource, devPath, devCaps); + if (err) { + error(err, url.path()); + return; + } + + if (devName.isEmpty()) { + listRoot(url); + return; + } + +#if 0 + if (!dev) { + error( KIO::ERR_DOES_NOT_EXIST, QString("/%1").arg(devName) ); + return; + } +#endif + + if (resource.isEmpty()) { + listTopDeviceDir(devName); + return; + } + + listEntries(devName, resource, devPath, devCaps); +} diff --git a/kmobile/kioslave/kio_mobile.h b/kmobile/kioslave/kio_mobile.h new file mode 100644 index 000000000..8094f514b --- /dev/null +++ b/kmobile/kioslave/kio_mobile.h @@ -0,0 +1,70 @@ +/* This file is part of the KDE mobile library. + Copyright (C) 2004 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. +*/ + +#ifndef __KIO_MOBILE_H__ +#define __KIO_MOBILE_H__ + +#include <qstring.h> +#include <qvaluelist.h> + +#include <kio/slavebase.h> +#include <kmobiledevice.h> +#include <kmobileclient.h> + +class KMobileProtocol : public KIO::SlaveBase +{ +public: + KMobileProtocol( const QCString &pool, const QCString &app ); + ~KMobileProtocol(); + + void get( const KURL& url ); + void stat( const KURL& url ); + void mimetype( const KURL& url ); + void listDir( const KURL& url ); + +protected: + int getDeviceAndRessource(const QString &_path, + QString &devName, QString &resource, QString &devPath, + KMobileDevice::Capabilities &devCaps); + + QString folderMimeType(int cap); + QString entryMimeType(int cap); + + void listRoot(const KURL& url); + void listTopDeviceDir(const QString &devName); + void listEntries(const QString &devName, + const QString &resource, const QString &devPath, + const KMobileDevice::Capabilities devCaps); + + void listAddressBook(const QString &devName, const QString &resource); + int getVCard( const QString &devName, QCString &result, QString &mime, const QString &path ); + + void listCalendar(const QString &devName, const QString &resource); + int getCalendar( const QString &devName, QCString &result, QString &mime, const QString &path ); + + void listNotes(const QString &devName, const QString &resource); + int getNote( const QString &devName, QCString &result, QString &mime, const QString &path ); + + void listFileStorage(const QString &devName, const QString &resource, const QString &devPath); + int getFileStorage( const QString &devName, QCString &result, QString &mime, const QString &path ); + +private: + KMobileClient m_dev; +}; + +#endif diff --git a/kmobile/kioslave/mimetypes/Makefile.am b/kmobile/kioslave/mimetypes/Makefile.am new file mode 100644 index 000000000..5105c51bf --- /dev/null +++ b/kmobile/kioslave/mimetypes/Makefile.am @@ -0,0 +1,4 @@ +mimetype_DATA = \ + mobile_addressbook.desktop mobile_calendar.desktop mobile_notes.desktop \ + mobile_device.desktop +mimetypedir = $(kde_mimedir)/inode diff --git a/kmobile/kioslave/mimetypes/mobile_addressbook.desktop b/kmobile/kioslave/mimetypes/mobile_addressbook.desktop new file mode 100644 index 000000000..53a041c1f --- /dev/null +++ b/kmobile/kioslave/mimetypes/mobile_addressbook.desktop @@ -0,0 +1,61 @@ +[Desktop Entry] +Comment=Contacts in Mobile Device +Comment[af]=Kontakte op die draagbare toestel +Comment[ar]=المراسلون في الجهاز النقّال +Comment[be]=Кантакты ў мабільнай прыладзе +Comment[bg]=Контакти в мобилни устройства +Comment[bs]=Kontakti u mobilnom uređaju +Comment[ca]=Contactes en el dispositiu mòbil +Comment[cs]=Kontakty na mobilním zařízení +Comment[cy]=Cysylltau yn y Dyfais Symudol +Comment[da]=Kontakter i mobil-enhed +Comment[de]=Kontakte im Mobilgerät +Comment[el]=Επαφές στη φορητή συσκευή +Comment[es]=Contactos del dispositivo móvil +Comment[et]=Mobiili kontaktid +Comment[eu]=Kontaktuak dispositibo mugikorrean +Comment[fa]=تماسها در دستگاه تلفن همراه +Comment[fi]=Mobiililaitteen yhteystiedot +Comment[fr]=Contacts dans le périphérique mobile +Comment[fy]=Kontaktpersoanen yn mobyl apparaat +Comment[ga]=Teagmhálacha i nGléas Móibíleach +Comment[gl]=Contactos no dispositivo móbil +Comment[he]=אנשי קשר בהתקן הנייד +Comment[hi]=मोबाइल उपकरण में सम्पर्क +Comment[hu]=Címbejegyzések a mobiltelefonon +Comment[is]=Tengiliðir í farsíma eða lófatölvu +Comment[it]=Contatti nel dispositivo portatile +Comment[ja]=モバイル機器内の連絡先 +Comment[ka]=კონტაქტები მობილურ მოწყობილობაზ +Comment[kk]=Қалта құрылғыдағы контакттар +Comment[km]=ទំនាក់ទំនងក្នុងឧបករណ៍ចល័ត +Comment[lt]=Kontaktai mobiliajame įrenginyje +Comment[mk]=Контакти од мобилен уред +Comment[ms]=Orang hubungan di dalam Peranti Mudah Alih +Comment[nb]=Kontaktliste i mobil enhet +Comment[nds]=Kontakten op de Mobilreedschap +Comment[ne]=मोबाइल यन्त्रमा सम्पर्क गर्छ +Comment[nl]=Contactpersonen in mobiel apparaat +Comment[nn]=Kontaktar i mobileiningar +Comment[pl]=Wizytówki w urządzeniu przenośnym +Comment[pt]=Contactos no Dispositivo Móvel +Comment[pt_BR]=Contatos em Dispositivo Móvel +Comment[ro]=Contacte în dispozitiv mobil +Comment[ru]=Контакты на мобильном устройстве +Comment[sk]=Kontakty v prenosnom zariadení +Comment[sl]=Stiki v prenosni napravi +Comment[sr]=Контакти у мобилном уређају +Comment[sr@Latn]=Kontakti u mobilnom uređaju +Comment[sv]=Kontakter i mobilenhet +Comment[ta]=நடமாடும் சாதனத்தின் தொடர்ப்புகள் +Comment[tg]=Алоқот дар дастгоҳи мобилӣ +Comment[tr]=Taşınabilir Aygıt Bağlantıları +Comment[uk]=Контакти у мобільному пристрої +Comment[zh_CN]=移动设备中的联系人 +Comment[zh_TW]=行動裝置中的聯絡人 +Icon=kaddressbook +Type=MimeType +MimeType=inode/addressbook +Patterns= + +X-KDE-AutoEmbed=true diff --git a/kmobile/kioslave/mimetypes/mobile_calendar.desktop b/kmobile/kioslave/mimetypes/mobile_calendar.desktop new file mode 100644 index 000000000..35fa7b9ba --- /dev/null +++ b/kmobile/kioslave/mimetypes/mobile_calendar.desktop @@ -0,0 +1,61 @@ +[Desktop Entry] +Comment=Calendar in Mobile Device +Comment[af]=Kalender op die draagbare toestel +Comment[be]=Каляндар у мабільнай прыладзе +Comment[bg]=Календар в мобилни устройства +Comment[bs]=Kalendar u mobilnom uređaju +Comment[ca]=Calendari en el dispositiu mòbil +Comment[cs]=Kalendář na mobilním zařízení +Comment[cy]=Calendr yn y Dyfais Symudol +Comment[da]=Kalender i mobil-enhed +Comment[de]=Kalender für Mobiltelefon +Comment[el]=Ημερολόγιο στη φορητή συσκευή +Comment[eo]=Kalendaro en mobila aparato +Comment[es]=Calendario del dispositivo móvil +Comment[et]=Mobiili kalender +Comment[eu]=Egutegia dispositibo mugikorrean +Comment[fa]=تقویم در دستگاه تلفن همراه +Comment[fi]=Mobiililaitteen kalenteri +Comment[fr]=Calendrier dans un périphérique mobile +Comment[fy]=Aginda yn mobyl apparaat +Comment[ga]=Féilire i nGléas Móibíleach +Comment[gl]=Calendario no Dispositivo Móbil +Comment[he]=לוח שנה בהתקן הנייד +Comment[hi]=मोबाइल उपकरण में कैलेन्डर +Comment[hu]=Naptár a mobiltelefonon +Comment[is]=Dagatal í farsíma eða lófatölvu +Comment[it]=Calendari nel dispositivo portatile +Comment[ja]=モバイル機器内のカレンダー +Comment[ka]=კალენდარი მობილურ მოწყობილობაზე +Comment[kk]=Қалта құрылғыдағы күнтізбе +Comment[km]=ប្រតិទិនក្នុងឧបករណ៍ចល័ត +Comment[lt]=Kalendorius mobiliajame įrenginyje +Comment[mk]=Календар од мобилен уред +Comment[ms]=Kalendar dalam Peranti Mudah Alih +Comment[nb]=Kalender i mobil enhet +Comment[nds]=Kalenner op Mobilreedschap +Comment[ne]=मोबाइल यन्त्रको क्यालेन्डर +Comment[nl]=Agenda in mobiel apparaat +Comment[nn]=Kalender i mobileiningar +Comment[pl]=Kalendarz w urządzeniu przenośnym +Comment[pt]=Calendário no Dispositivo Móvel +Comment[pt_BR]=Calendário em Dispositivo Móvel +Comment[ro]=Calendar în dispozitiv mobil +Comment[ru]=Календарь на мобильном устройстве +Comment[sk]=Kalendár v prenosnom zariadení +Comment[sl]=Koledar v prenosni napravi +Comment[sr]=Календар у мобилном уређају +Comment[sr@Latn]=Kalendar u mobilnom uređaju +Comment[sv]=Kalender i mobilenhet +Comment[ta]=நடமாடும் சாதனத்தில் உள்ள நாள்காட்டி +Comment[tg]=Тақвим дар дастгоҳи мобилӣ +Comment[tr]=Cep Telefonu Takvimi +Comment[uk]=Календар у мобільному пристрої +Comment[zh_CN]=移动设备中的日历 +Comment[zh_TW]=行動裝置中的行事曆 +Icon=korganizer +Type=MimeType +MimeType=inode/calendar +Patterns= + +X-KDE-AutoEmbed=true diff --git a/kmobile/kioslave/mimetypes/mobile_device.desktop b/kmobile/kioslave/mimetypes/mobile_device.desktop new file mode 100644 index 000000000..025d5d5d8 --- /dev/null +++ b/kmobile/kioslave/mimetypes/mobile_device.desktop @@ -0,0 +1,65 @@ +[Desktop Entry] +Comment=Mobile Device +Comment[af]=Draagbare Toestel +Comment[ar]=الجهاز النقّال +Comment[be]=Мабільная прылада +Comment[bg]=Мобилни устройства +Comment[br]=Trobarzhell lem-laka +Comment[bs]=Mobilni uređaj +Comment[ca]=Dispositiu mòbil +Comment[cs]=Mobilní zařízení +Comment[cy]=Dyfais Symudol +Comment[da]=Mobil-enhed +Comment[de]=Mobilgerät +Comment[el]=Φορητή συσκευή +Comment[eo]=Mobila aparato +Comment[es]=Dispositivo móvil +Comment[et]=Mobiil +Comment[eu]=Dispositibo mugikorra +Comment[fa]=دستگاه تلفن همراه +Comment[fi]=Mobiililaite +Comment[fr]=Périphérique mobile +Comment[fy]=Mobyl apparaat +Comment[ga]=Gléas Móibíleach +Comment[gl]=Dispositivo Móbil +Comment[he]=התקן נייד +Comment[hi]=मोबाइल उपकरण +Comment[hu]=Mobil eszköz +Comment[is]=Farsími eða lófatölva +Comment[it]=Dispositivo portatile +Comment[ja]=モバイル機器 +Comment[ka]=მობილური მოწყობილობა +Comment[kk]=Қалта құрылғысы +Comment[km]=ឧបករណ៍ចល័ត +Comment[lt]=Mobilusis įrenginys +Comment[mk]=Мобилен уред +Comment[ms]=Peranti Mudah Alih +Comment[nb]=Mobil enhet +Comment[nds]=Mobilreedschap +Comment[ne]=मोबाइल यन्त्र +Comment[nl]=Mobiel apparaat +Comment[nn]=Mobileining +Comment[pa]=ਮੋਬਾਇਲ ਜੰਤਰ +Comment[pl]=Urządzenie przenośne +Comment[pt]=Dispositivo Móvel +Comment[pt_BR]=Dispositivo Móvel +Comment[ro]=Dispozitiv mobil +Comment[ru]=Мобильное устройство +Comment[se]=Mobilovttadat +Comment[sk]=Prenosné zariadenie +Comment[sl]=Mobilna naprava +Comment[sr]=Мобилни уређај +Comment[sr@Latn]=Mobilni uređaj +Comment[sv]=Mobilenhet +Comment[ta]= நடமாடும் சாதனம் +Comment[tg]=Дастгоҳи мобилӣ +Comment[tr]=Taşınabilir Aygıt +Comment[uk]=Мобільний пристрій +Comment[zh_CN]=移动设备 +Comment[zh_TW]=行動裝置 +Icon=kmobile +Type=MimeType +MimeType=kdedevice/mobiledevice +Patterns= + +X-KDE-AutoEmbed=true diff --git a/kmobile/kioslave/mimetypes/mobile_notes.desktop b/kmobile/kioslave/mimetypes/mobile_notes.desktop new file mode 100644 index 000000000..12dc25c0c --- /dev/null +++ b/kmobile/kioslave/mimetypes/mobile_notes.desktop @@ -0,0 +1,59 @@ +[Desktop Entry] +Comment=Notes in Mobile Device +Comment[af]=Notas op die draagbare toestel +Comment[be]=Нататкі ў мабільнай прыладзе +Comment[bg]=Бележки в мобилни устройства +Comment[bs]=Bilješke u mobilnom uređaju +Comment[ca]=Notes en el dispositiu mòbil +Comment[cs]=Poznámky na mobilním zařízení +Comment[cy]=Nodiadau yn y Dyfais Symudol +Comment[da]=Noter i mobil-enhed +Comment[de]=Notizen im Mobilgerät +Comment[el]=Σημειώσεις στη φορητή συσκευή +Comment[es]=Notas del dispositivo móvil +Comment[et]=Mobiili märkmed (Notes) +Comment[eu]=Oharrak dispositibo mugikorrean +Comment[fa]=یادداشتها در دستگاه تلفن همراه +Comment[fi]=Mobiililaitteen muistio +Comment[fr]=Notes dans un périphérique mobile +Comment[fy]=Notysjes yn mobyl apparaat +Comment[ga]=Nótaí i nGléas Móibíleach +Comment[gl]=Notas no Dispositivo Móbil +Comment[he]=פתקים בהתקן הנייד +Comment[hi]=मोबाइल उपकरण में टीप +Comment[hu]=Feljegyzések a mobiltelefonon +Comment[is]=Áminningar í farsíma eða lófatölvu +Comment[it]=Note nel dispositivo portatile +Comment[ja]=モバイル機器内のメモ +Comment[ka]=ჩანიშვნები მობილურ ტელეფონზე +Comment[kk]=Қалта құрылғыдағы жазбалар +Comment[km]=ចំណាំក្នុងឧបករណ៍ចល័ត +Comment[lt]=Užrašai mobiliajame įrenginyje +Comment[mk]=Белешки од мобилен уред +Comment[ms]=Nota dalam Peranti Mudah Alih +Comment[nb]=Notater i mobil enhet +Comment[nds]=Notizen op Mobilreedschap +Comment[ne]=मोबाइल यन्त्र भित्रका टिपोट +Comment[nl]=Notities in mobiel apparaat +Comment[nn]=Notat i mobileiningar +Comment[pl]=Notatki w urządzeniu przenośnym +Comment[pt]=Notas no Dispositivo Móvel +Comment[pt_BR]=Notas em Dispositivo Móvel +Comment[ru]=Заметки на мобильном устройстве +Comment[sk]=Poznámky v prenosnom zariadení +Comment[sl]=Notice v prenosni napravi +Comment[sr]=Белешке у мобилном уређају +Comment[sr@Latn]=Beleške u mobilnom uređaju +Comment[sv]=Anteckning i mobilenhet +Comment[ta]=நடமாடும் சாதனத்தின் குறிப்புகள் +Comment[tg]=Хабарҳо дар дастгоҳи мобилӣ +Comment[tr]=Cep Telefonu Notları +Comment[uk]=Нотатки у мобільному пристрої +Comment[zh_CN]=移动电话中的便笺 +Comment[zh_TW]=行動裝置中的備忘錄 +Icon=knotes +Type=MimeType +MimeType=inode/notes +Patterns= + +X-KDE-AutoEmbed=true diff --git a/kmobile/kioslave/mobile.protocol b/kmobile/kioslave/mobile.protocol new file mode 100644 index 000000000..7b8385f86 --- /dev/null +++ b/kmobile/kioslave/mobile.protocol @@ -0,0 +1,18 @@ +[Protocol] +exec=kio_mobile +protocol=mobile +input=none +output=filesystem +# listing=Name +listing=Name,Type,Size,Date,AccessDate,Access,URL,MimeType +reading=true +source=true +writing=true +makedir=true +deleting=true +# linking=true +# moving=true +# mimetype=text/plain +# determineMimetypeFromExtension=true +DocPath=kioslave/mobile.html +Icon=kaddressbook diff --git a/kmobile/kioslave/organizer.protocol b/kmobile/kioslave/organizer.protocol new file mode 100644 index 000000000..b211a74f9 --- /dev/null +++ b/kmobile/kioslave/organizer.protocol @@ -0,0 +1,18 @@ +[Protocol] +exec=kio_mobile +protocol=organizer +input=none +output=filesystem +# listing=Name +listing=Name,Type,Size,Date,AccessDate,Access,URL,MimeType +reading=true +source=true +writing=true +makedir=true +deleting=true +# linking=true +# moving=true +# mimetype=text/plain +# determineMimetypeFromExtension=true +DocPath=kioslave/mobile.html +Icon=mobile_organizer diff --git a/kmobile/kioslave/pda.protocol b/kmobile/kioslave/pda.protocol new file mode 100644 index 000000000..cbab2e03a --- /dev/null +++ b/kmobile/kioslave/pda.protocol @@ -0,0 +1,18 @@ +[Protocol] +exec=kio_mobile +protocol=pda +input=none +output=filesystem +# listing=Name +listing=Name,Type,Size,Date,AccessDate,Access,URL,MimeType +reading=true +source=true +writing=true +makedir=true +deleting=true +# linking=true +# moving=true +# mimetype=text/plain +# determineMimetypeFromExtension=true +DocPath=kioslave/mobile.html +Icon=mobile_organizer diff --git a/kmobile/kioslave/phonecamera.protocol b/kmobile/kioslave/phonecamera.protocol new file mode 100644 index 000000000..7a0b341f2 --- /dev/null +++ b/kmobile/kioslave/phonecamera.protocol @@ -0,0 +1,18 @@ +[Protocol] +exec=kio_mobile +protocol=camera +input=none +output=filesystem +# listing=Name +listing=Name,Type,URL,MimeType +reading=true +source=true +writing=true +makedir=true +deleting=true +# linking=true +# moving=true +# mimetype=text/plain +# determineMimetypeFromExtension=true +DocPath=kioslave/mobile.html +Icon=mobile_camera |