Index: kdepim/runtime/resources/contacts/contactsresource.cpp =================================================================== --- kdepim/runtime/resources/contacts/contactsresource.cpp (révision 1127305) +++ kdepim/runtime/resources/contacts/contactsresource.cpp (révision 1127306) @@ -414,13 +414,37 @@ } if ( !removeDirectory( directoryForCollection( collection ) ) ) { - cancelTask( i18n("Unable to delete folder '%1'.", collection.name() ) ); + cancelTask( i18n( "Unable to delete folder '%1'.", collection.name() ) ); return; } changeProcessed(); } +void ContactsResource::itemMoved( const Akonadi::Item &item, const Akonadi::Collection &collectionSource, + const Akonadi::Collection &collectionDestination ) +{ + const QString sourceFileName = directoryForCollection( collectionSource ) + QDir::separator() + item.remoteId(); + const QString targetFileName = directoryForCollection( collectionDestination ) + QDir::separator() + item.remoteId(); + + if ( QFile::rename( sourceFileName, targetFileName ) ) + changeProcessed(); + else + cancelTask( i18n( "Unable to move file '%1' to '%2', '%2' already exists.", sourceFileName, targetFileName ) ); +} + +void ContactsResource::collectionMoved( const Akonadi::Collection &collection, const Akonadi::Collection &collectionSource, + const Akonadi::Collection &collectionDestination ) +{ + const QString sourceDirectoryName = directoryForCollection( collectionSource ) + QDir::separator() + collection.remoteId(); + const QString targetDirectoryName = directoryForCollection( collectionDestination ) + QDir::separator() + collection.remoteId(); + + if ( QFile::rename( sourceDirectoryName, targetDirectoryName ) ) + changeProcessed(); + else + cancelTask( i18n( "Unable to move directory '%1' to '%2', '%2' already exists.", sourceDirectoryName, targetDirectoryName ) ); +} + QString ContactsResource::baseDirectoryPath() const { return Settings::self()->path(); Index: kdepim/runtime/resources/contacts/contactsresource.h =================================================================== --- kdepim/runtime/resources/contacts/contactsresource.h (révision 1127305) +++ kdepim/runtime/resources/contacts/contactsresource.h (révision 1127306) @@ -29,7 +29,7 @@ class QDir; -class ContactsResource : public Akonadi::ResourceBase, public Akonadi::AgentBase::Observer +class ContactsResource : public Akonadi::ResourceBase, public Akonadi::AgentBase::ObserverV2 { Q_OBJECT @@ -55,6 +55,11 @@ virtual void collectionChanged( const Akonadi::Collection &collection ); virtual void collectionRemoved( const Akonadi::Collection &collection ); + virtual void itemMoved( const Akonadi::Item &item, const Akonadi::Collection &collectionSource, + const Akonadi::Collection &collectionDestination ); + virtual void collectionMoved( const Akonadi::Collection &collection, const Akonadi::Collection &collectionSource, + const Akonadi::Collection &collectionDestination ); + private: Akonadi::Collection::List createCollectionsForDirectory( const QDir &parentDirectory, const Akonadi::Collection &parentCollection ) const;