[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdepim-runtime/KDE/4.12] resources/imap: Close IMAP mailbox before renaming it
From: Dan_Vrátil <dvratil () redhat ! com>
Date: 2014-01-13 10:29:10
Message-ID: E1W2ela-0003FR-2m () scm ! kde ! org
[Download RAW message or body]
Git commit 066efc7923640201bee5d170dfb78d0c7ecaeda4 by Dan Vrátil.
Committed on 13/01/2014 at 10:24.
Pushed by dvratil into branch 'KDE/4.12'.
Close IMAP mailbox before renaming it
Some IMAP servers don't allow renaming a currently SELECTed
mailbox, so we close it before RENAMEing it.
REVIEW: 114996
CCBUG: 324932
FIXED-IN: 4.12.1
M +26 -1 resources/imap/movecollectiontask.cpp
M +3 -0 resources/imap/movecollectiontask.h
http://commits.kde.org/kdepim-runtime/066efc7923640201bee5d170dfb78d0c7ecaeda4
diff --git a/resources/imap/movecollectiontask.cpp b/resources/imap/movecollectiontask.cpp
index 52a5159..8b69cd7 100644
--- a/resources/imap/movecollectiontask.cpp
+++ b/resources/imap/movecollectiontask.cpp
@@ -27,6 +27,7 @@
#include <kimap/renamejob.h>
#include <kimap/session.h>
#include <kimap/subscribejob.h>
+#include <kimap/closejob.h>
MoveCollectionTask::MoveCollectionTask( ResourceStateInterface::Ptr resource, QObject *parent )
: ResourceTask( DeferIfNoSession, resource, parent )
@@ -63,6 +64,31 @@ void MoveCollectionTask::doStart( KIMAP::Session *session )
return;
}
+ // Some IMAP servers don't allow renaming an opened mailbox, so make sure
+ // it's not opened (https://bugs.kde.org/show_bug.cgi?id=324932)
+ if ( session->selectedMailBox() != mailBoxForCollection( collection() ) ) {
+ doRename( session );
+ return;
+ }
+
+ KIMAP::CloseJob *close = new KIMAP::CloseJob( session );
+ connect( close, SIGNAL(result(KJob*)),
+ this, SLOT(onCloseDone(KJob*)) );
+ close->start();
+}
+
+void MoveCollectionTask::onCloseDone(KJob* job)
+{
+ if ( job->error() ) {
+ changeProcessed();
+ } else {
+ KIMAP::CloseJob *close = dynamic_cast<KIMAP::CloseJob*>( job );
+ doRename( close->session() );
+ }
+}
+
+void MoveCollectionTask::doRename( KIMAP::Session *session )
+{
// collection.remoteId() already includes the separator
const QString oldMailBox = mailBoxForCollection( sourceCollection() )+collection().remoteId();
const QString newMailBox = mailBoxForCollection( targetCollection() )+collection().remoteId();
@@ -82,7 +108,6 @@ void MoveCollectionTask::doStart( KIMAP::Session *session )
}
}
-
void MoveCollectionTask::onRenameDone( KJob *job )
{
if ( job->error() ) {
diff --git a/resources/imap/movecollectiontask.h b/resources/imap/movecollectiontask.h
index d762f4a..0237e12 100644
--- a/resources/imap/movecollectiontask.h
+++ b/resources/imap/movecollectiontask.h
@@ -33,6 +33,7 @@ public:
virtual ~MoveCollectionTask();
private slots:
+ void onCloseDone( KJob *job );
void onRenameDone( KJob *job );
void onSubscribeDone( KJob *job );
@@ -40,6 +41,8 @@ protected:
virtual void doStart( KIMAP::Session *session );
private:
+ void doRename( KIMAP::Session *session );
+
Akonadi::Collection m_collection;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic