[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kmail-devel
Subject:    Add a KMFolder::needsAsyncRetrieval() function
From:       Mario Teijeiro Otero <emeteo () escomposlinux ! org>
Date:       2005-04-23 15:44:17
Message-ID: 200504231744.23408.emeteo () escomposlinux ! org
[Download RAW message or body]

[Attachment #2 (multipart/signed)]

[Attachment #4 (multipart/mixed)]


Over all the code there are some checks like:

thisMsg->parent()->folderType() == KMFolderTypeImap 

And really means: thisMsg->parent()->needsAsyncRetrieval().

I added this function to KMFolder that forwards to FolderStorage.This function 
returns false except in  KMFolderImap that returns true.

I replace all folderType()==KMFolderTypeImap that I can find and the meaning 
was needsAsyncRetrieval(). It's possible that I forgot someone or changed 
someone wrong ( I didn't control all kmail kernel stuffs, yet ;-). So, 
please, review it.

Regards



["needsasyncretrieval.patch" (text/x-diff)]

? .kmmainwin.rc.swp
? .kmreadermainwin.rc.swp
? cscope.out
Index: folderstorage.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/folderstorage.cpp,v
retrieving revision 1.50
diff -u -p -r1.50 folderstorage.cpp
--- folderstorage.cpp	16 Apr 2005 09:33:17 -0000	1.50
+++ folderstorage.cpp	23 Apr 2005 15:33:59 -0000
@@ -295,7 +295,7 @@ bool FolderStorage::canAddMsgNow(KMMessa
   // have a parent we want to be able to add it even if it is in transfer.
   if (aMsg->transferInProgress() && msgParent)
       return false;
-  if (!aMsg->isComplete() && msgParent && msgParent->folderType() == KMFolderTypeImap)
+  if (!aMsg->isComplete() && msgParent && msgParent->needsAsyncRetrieval())
   {
     FolderJob *job = msgParent->createJob(aMsg);
     connect(job, SIGNAL(messageRetrieved(KMMessage*)),
Index: folderstorage.h
===================================================================
RCS file: /home/kde/kdepim/kmail/folderstorage.h,v
retrieving revision 1.44
diff -u -p -r1.44 folderstorage.h
--- folderstorage.h	16 Apr 2005 09:33:17 -0000	1.44
+++ folderstorage.h	23 Apr 2005 15:34:00 -0000
@@ -118,6 +118,10 @@ public:
   /** Specify, that the folder can't have children */
   virtual void setNoChildren( bool aNoChildren );
 
+    /** Returns if the folder retrieval messages asyncly */
+  virtual bool needsAsyncRetrieval() const { return false;};
+
+
   enum ChildrenState {
     HasChildren,
     HasNoChildren,
Index: kmcommands.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmcommands.cpp,v
retrieving revision 1.206
diff -u -p -r1.206 kmcommands.cpp
--- kmcommands.cpp	17 Apr 2005 19:36:18 -0000	1.206
+++ kmcommands.cpp	23 Apr 2005 15:34:02 -0000
@@ -276,7 +276,7 @@ void KMCommand::transferSelectedMsgs()
     }
     if (!thisMsg) continue;
     if ( thisMsg->transferInProgress() &&
-         thisMsg->parent()->folderType() == KMFolderTypeImap )
+         thisMsg->parent()->needsAsyncRetrieval() )
     {
       thisMsg->setTransferInProgress( false, true );
       thisMsg->parent()->ignoreJobsForMessage( thisMsg );
@@ -1844,11 +1844,11 @@ KMCommand::Result KMMoveCommand::execute
       msg = srcFolder->getMsg(idx);
 
     if ( msg->transferInProgress() &&
-         srcFolder->folderType() == KMFolderTypeImap )
+         srcFolder->needsAsyncRetrieval() )
     {
       // cancel the download
       msg->setTransferInProgress( false, true );
-      static_cast<KMFolderImap*>(srcFolder->storage())->ignoreJobsForMessage( msg );
+      srcFolder->ignoreJobsForMessage( msg );
     }
 
     if (mDestFolder) {
@@ -1887,7 +1887,7 @@ KMCommand::Result KMMoveCommand::execute
     } else {
       // really delete messages that are already in the trash folder or if
       // we are really, really deleting, not just moving to trash
-      if (srcFolder->folderType() == KMFolderTypeImap) {
+      if (srcFolder->needsAsyncRetrieval()) {
         if (!folderDeleteList[srcFolder])
           folderDeleteList[srcFolder] = new QPtrList<KMMessage>;
         folderDeleteList[srcFolder]->append( msg );
@@ -1954,7 +1954,7 @@ void KMMoveCommand::slotMsgAddedToDestFo
   mLostBoys.remove(serNum);
   if ( mLostBoys.isEmpty() ) {
     // we are done. All messages transferred to the host succesfully
-    if (mDestFolder && mDestFolder->folderType() != KMFolderTypeImap) {
+    if ( mDestFolder && !mDestFolder->needsAsyncRetrieval() ) {
       mDestFolder->sync();
       completeMove( OK ); // imap ones will be completed via folderComplete
     }
Index: kmfolder.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfolder.cpp,v
retrieving revision 1.348
diff -u -p -r1.348 kmfolder.cpp
--- kmfolder.cpp	4 Mar 2005 15:30:40 -0000	1.348
+++ kmfolder.cpp	23 Apr 2005 15:34:02 -0000
@@ -265,6 +265,12 @@ void KMFolder::setNoChildren( bool aNoCh
   mStorage->setNoChildren( aNoChildren );
 }
 
+
+bool KMFolder::needsAsyncRetrieval()
+{
+  mStorage->needsAsyncRetrieval();
+} 
+
 KMMessage* KMFolder::getMsg( int idx )
 {
   return mStorage->getMsg( idx );
Index: kmfolder.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfolder.h,v
retrieving revision 1.171
diff -u -p -r1.171 kmfolder.h
--- kmfolder.h	4 Mar 2005 15:30:40 -0000	1.171
+++ kmfolder.h	23 Apr 2005 15:34:03 -0000
@@ -127,6 +127,9 @@ public:
   /** Specify, that the folder can't have children */
   void setNoChildren(bool aNoChildren);
 
+  /** Returns if the folder retrieval the messages asyncly */
+  bool needsAsyncRetrieval();
+
   /** Read message at given index. Indexing starts at zero */
   KMMessage* getMsg(int idx);
 
Index: kmfolderimap.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfolderimap.h,v
retrieving revision 1.92
diff -u -p -r1.92 kmfolderimap.h
--- kmfolderimap.h	23 Mar 2005 19:02:23 -0000	1.92
+++ kmfolderimap.h	23 Apr 2005 15:34:04 -0000
@@ -132,6 +132,9 @@ public:
   /** Read the config file */
   virtual void readConfig();
 
+  /** Returns if the folder retrieval messages asyncly */
+  virtual bool needsAsyncRetrieval() const { return true;};
+
   /**
    * List a directory and add the contents to kmfoldermgr
    * It uses a ListJob to get the folders
Index: kmfoldermbox.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfoldermbox.cpp,v
retrieving revision 1.114
diff -u -p -r1.114 kmfoldermbox.cpp
--- kmfoldermbox.cpp	31 Mar 2005 20:37:52 -0000	1.114
+++ kmfoldermbox.cpp	23 Apr 2005 15:34:05 -0000
@@ -973,7 +973,7 @@ int KMFolderMbox::addMsg( KMMessage* aMs
     msgParent->getMsg( idx );
   }
 
-  if (folderType() != KMFolderTypeImap)
+  if ( !needsAsyncRetrieval() )
   {
 /*
 QFile fileD0( "testdat_xx-kmfoldermbox-0" );

[Attachment #8 (application/pgp-signature)]

_______________________________________________
KMail developers mailing list
KMail-devel@kde.org
https://mail.kde.org/mailman/listinfo/kmail-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic