diff options
Diffstat (limited to 'tderesources/lib/groupwaredataadaptor.h')
-rw-r--r-- | tderesources/lib/groupwaredataadaptor.h | 364 |
1 files changed, 364 insertions, 0 deletions
diff --git a/tderesources/lib/groupwaredataadaptor.h b/tderesources/lib/groupwaredataadaptor.h new file mode 100644 index 000000000..b7bd6e333 --- /dev/null +++ b/tderesources/lib/groupwaredataadaptor.h @@ -0,0 +1,364 @@ +/* + This file is part of tdepim. + + Copyright (c) 2004 Cornelius Schumacher <schumacher@kde.org> + Copyright (c) 2004 Till Adam <adam@kde.org> + Copyright (c) 2005 Reinhold Kainhofer <reinhold@kainhofer.com> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + 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 KPIM_GROUPWAREDATAADAPTOR_H +#define KPIM_GROUPWAREDATAADAPTOR_H + +#include <groupwareresourcejob.h> +#include <folderlister.h> +#include <kurl.h> +#include <tqstring.h> +#include <libkcal/listbase.h> +#include <tqobject.h> +#include <tdepimmacros.h> + + +namespace TDEIO { +class TransferJob; +class Job; +} + +namespace KPIM { + +class FolderLister; +class IdMapper; +class GroupwareDataAdaptor; +//class GroupwareJob; + +class KDE_EXPORT GroupwareUploadItem +{ + public: + typedef KCal::ListBase<GroupwareUploadItem> List; + enum UploadType { + Added, + Changed, + Deleted + }; + + GroupwareUploadItem( UploadType type ); + virtual ~GroupwareUploadItem() {} + KURL url() const { return mUrl; } + void setUrl( const KURL &url ) { mUrl = url; } + + TQString uid() const { return mUid; } + void setUid( const TQString &uid ) { mUid = uid; } + + TQString fingerprint() const { return mFingerprint; } + void setFingerprint( const TQString &fpr ) { mFingerprint = fpr; } + + virtual TQString data() const { return mData; } + virtual void setData( const TQString &data ) { mData = data; } + virtual KURL adaptNewItemUrl( GroupwareDataAdaptor *adaptor, + const KURL &url ); + + virtual TDEIO::TransferJob *createRawUploadJob( + GroupwareDataAdaptor *adaptor, const KURL &url ); + virtual TDEIO::TransferJob *createUploadNewJob( + GroupwareDataAdaptor *adaptor, const KURL &url ); + virtual TDEIO::TransferJob *createUploadJob( GroupwareDataAdaptor *adaptor, + const KURL &url ); + virtual KPIM::FolderLister::ContentType itemType() { return mItemType; } + protected: + KPIM::FolderLister::ContentType mItemType; + private: + KURL mUrl; + TQString mUid; + TQString mData; + TQString mFingerprint; + UploadType mType; +}; + + +class KDE_EXPORT GroupwareDataAdaptor : public TQObject +{ +Q_OBJECT + + public: + GroupwareDataAdaptor(); + virtual ~GroupwareDataAdaptor(); + + void setFolderLister( FolderLister *folderLister ) + { + mFolderLister = folderLister; + } + FolderLister *folderLister() + { + return mFolderLister; + } + + /** + Set progress message shown by progress manager during download. It will + be interpreted as rich text, so it might have to be escaped. + */ + void setDownloadProgressMessage( const TQString &v ) + { + mDownloadProgressMessage = v; + } + /** + Get download progress message. See setDownloadProgressMessage(). + */ + TQString downloadProgressMessage() const + { + return mDownloadProgressMessage; + } + + /** + Set progress message shown by progress manager during upload. It will + be interpreted as rich text, so it might have to be escaped. + */ + void setUploadProgressMessage( const TQString &v ) + { + mUploadProgressMessage = v; + } + /** + Get upload progress message. See setUploadProgressMessage(). + */ + TQString uploadProgressMessage() const + { + return mUploadProgressMessage; + } + + /** + Set base URL. + */ + void setBaseURL( const KURL &url ) + { + mBaseURL = url; + } + /** + Get base URL. See setBaseURL(). + */ + KURL baseURL() const + { + return mBaseURL; + } + + /** + Set user name. + */ + void setUser( const TQString &v ) + { + mUser = v; + } + /** + Get user. See setUser(). + */ + TQString user() const + { + return mUser; + } + + /** + Set password of user. + */ + void setPassword( const TQString &v ) + { + mPassword = v; + } + /** + Get password. See setPassword(). + */ + TQString password() const + { + return mPassword; + } + + /** + Set id mapper. + */ + void setIdMapper( KPIM::IdMapper *v ) + { + mIdMapper = v; + } + /** + Get idMapper. See setIdMapper(). + */ + KPIM::IdMapper *idMapper() const + { + return mIdMapper; + } + + void setUserPassword( KURL &url ); + + /** Adapt the url for downloading. Sets the username and password and calls + * customAdaptDownloadUrl, which you can reimplement for custom adaptions. + */ + virtual void adaptDownloadUrl( KURL &url ) + { + setUserPassword( url ); + customAdaptDownloadUrl( url ); + } + /** Adapt the url for uploading. Sets the username and password and calls + * customAdaptUploadUrl, which you can reimplement for custom adaptions. */ + virtual void adaptUploadUrl( KURL &url ) + { + setUserPassword( url ); + customAdaptUploadUrl( url ); + } + /** Apply custom adaptions to the url for downloading. Reimplement this + * method if you want to use webdav:// instead of http:// URLs. */ + virtual void customAdaptDownloadUrl( KURL &/*url*/ ) {} + /** Apply custom adaptions to the url for uploading. Reimplement this + * method if you want to use webdav:// instead of http:// URLs. */ + virtual void customAdaptUploadUrl( KURL &/*url*/ ) {} + + /** Return the mime-type expected by the resource. */ + virtual TQString mimeType() const = 0; + /** Identifier of the Resource. Used for the custom fields where + resource-specific information is stored. */ + virtual TQCString identifier() const = 0; + + /** Returns whether the item with the given localId exists locally. */ + virtual bool localItemExists( const TQString &localId ) = 0; + /** Returns whether the item was changed locally since the last download + from the server. */ + virtual bool localItemHasChanged( const TQString &localId ) = 0; + /** Remove the item from the local cache. */ + virtual void deleteItem( const TQString &localId ) = 0; + + /** Removed the changed flag for the item with the given uid. */ + virtual void clearChange( const TQString &uid ) = 0; + + virtual FolderLister::Entry::List defaultFolders(); + virtual TQValueList<FolderLister::ContentType> supportedTypes() = 0; + virtual bool supports( FolderLister::ContentType type ) { + return supportedTypes().contains( type ); + } + + + // Creating jobs + /** Creates the TDEIO::Job for logging in to the server. This is only + * called if the GroupwareDataAdaptor::GWResNeedsLogin flag is set + * for the resource. */ + virtual TDEIO::Job *createLoginJob( const KURL &, const TQString &/*user*/, + const TQString &/*password*/ ) { return 0; } + /** Creates the TDEIO::Job for logging off the server. This is only + * called if the GroupwareDataAdaptor::GWResNeedsLogoff flag is set + * for the resource. */ + virtual TDEIO::Job *createLogoffJob( const KURL &, const TQString &/*user*/, + const TQString &/*password*/ ) { return 0; } + /** Creates the TDEIO::Job for listing all subfolders of the given url. */ + virtual TDEIO::Job *createListFoldersJob ( const KURL & ) = 0; + /** Creates the TDEIO::TransferJob for listing all items in the given url. */ + virtual TDEIO::TransferJob *createListItemsJob( const KURL & ) = 0; + /** Creates the TDEIO::TransferJob for downloading one given item. */ + virtual TDEIO::TransferJob *createDownloadJob( const KURL &, + FolderLister::ContentType ) = 0; + /** Creates the TDEIO::TransferJob for downloading a list of items items. */ + virtual TDEIO::TransferJob *createDownloadJob( const TQMap<KURL,FolderLister::ContentType> & ) { return 0; } + /** Create the job to remove the deletedItems from the server. The base + URL of the server is passed as uploadurl. */ + virtual TDEIO::Job *createRemoveJob( const KURL &, + const KPIM::GroupwareUploadItem::List &/*deletedItems*/ ) { return 0; } + /** Create the job to remove the item from the server. The base + URL of the server is passed as uploadurl. */ + virtual TDEIO::Job *createRemoveJob( const KURL &, + KPIM::GroupwareUploadItem */*deletedItem*/ ) { return 0; } + /** Create the job to change the item on the server (at the given URL) */ + virtual TDEIO::TransferJob *createUploadJob( const KURL &, + GroupwareUploadItem *item ); + /** Create the job to change the items on the server (at the given URL) */ + virtual TDEIO::TransferJob *createUploadJob( const KURL &, const GroupwareUploadItem::List &/*items*/ ) { return 0; } + /** Create the job to add the item to the server (at the given baseURL) */ + virtual TDEIO::TransferJob *createUploadNewJob( const KURL &, + GroupwareUploadItem *item ); + /** Create the job to add the items to the server (at the given baseURL) */ + virtual TDEIO::TransferJob *createUploadNewJob( const KURL &, const GroupwareUploadItem::List &/*items*/ ) { return 0; } + + + // Interpreting the result of the jobs + /** Extract the success information from the login job, created by + * createLoginJob. Return true, if the login was successfull, or false + * if the user could not be authenticated or something else went wrong. + * In that case the resource will not be marked as open. */ + virtual bool interpretLoginJobResult( TDEIO::Job * ) { return true; } + /** Extract the success information from the logoff job, created by + * createLogoffJob. */ + virtual bool interpretLogoffJobResult( TDEIO::Job * ) { return true; } + + virtual void interpretListFoldersJob( TDEIO::Job *, FolderLister *) = 0; + /** Extract the list of items on the server and the list of items to be + downloaded from the results of the job (the job was created by + createListitemsJob). */ + virtual bool interpretListItemsJob( TDEIO::Job *, const TQString &jobData ) = 0; + virtual bool interpretDownloadItemsJob( TDEIO::Job *job, const TQString &jobData ) = 0; + virtual bool interpretRemoveJob( TDEIO::Job *job, const TQString &jobData ); + virtual bool interpretUploadJob( TDEIO::Job *job, const TQString &/*jobData*/ ); + virtual bool interpretUploadNewJob( TDEIO::Job *job, const TQString &/*jobData*/ ); + + virtual void processDownloadListItem( const KURL &entry, + const TQString &newFingerprint, KPIM::FolderLister::ContentType type ); + /** Return the default file name for a new item. */ + virtual TQString defaultNewItemName( GroupwareUploadItem * ) + { + return TQString(); + } + virtual TQString uidFromJob( TDEIO::Job *job ) const; + virtual void setUidForJob( TDEIO::Job *job, const TQString &uid ); + + + enum { + GWResBatchCreate = 0x0001, + GWResBatchModify = 0x0002, + GWResBatchDelete = 0x0004, + GWResBatchRequest = 0x0008, + GWResHandleSingleIncidences = 0x0020, + GWResNeedsLogon = 0x0040, + GWResNeedsLogoff = 0x0080 + }; + virtual long flags() const = 0; + + + signals: + void folderInfoRetrieved( const KURL &href, const TQString &name, + KPIM::FolderLister::ContentType ); + void folderSubitemRetrieved( const KURL &, bool isFolder ); + + void itemToDownload( const KURL &remoteURL, KPIM::FolderLister::ContentType type ); + /** passed the whole remote url (including hostname) to the receiver */ + void itemOnServer( const KURL &remoteURL ); + + void itemDownloaded( const TQString &localID, const KURL &remoteURL, + const TQString &fingerprint ); + void itemDeleted( const TQString &localID, const KURL &remoteURL ); + void itemUploaded( const TQString &localID, const KURL &remoteURL ); + void itemUploadedNew( const TQString &localID, const KURL &remoteURL ); + + void itemDownloadError( const KURL &remoteURL, const TQString &error ); + void itemDeletionError( const KURL &remoteURL, const TQString &error ); + void itemUploadError( const KURL &remoteURL, const TQString &error ); + void itemUploadNewError( const TQString &localID, const TQString &error ); + + private: + FolderLister *mFolderLister; + TQString mDownloadProgressMessage; + TQString mUploadProgressMessage; + KURL mBaseURL; + TQString mUser; + TQString mPassword; + KPIM::IdMapper *mIdMapper; + TQMap<TDEIO::Job*,TQString> mJobUIDMap; +}; + +} + +#endif |