Update of /cvsroot/mahogany/M/src/mail
In directory usw-pr-cvs1:/tmp/cvs-serv741/src/mail

Modified Files:
        ASMailFolder.cpp MailFolder.cpp MailFolderCC.cpp 
        MailFolderCmn.cpp 
Added Files:
        VFolder.cpp 
Log Message:
more MailFolder refactoring and added (untested and unused) VirtualFolder class

***** Error reading new file: [Errno 2] No such file or directory: 'VFolder.cpp'
Index: ASMailFolder.cpp
===================================================================
RCS file: /cvsroot/mahogany/M/src/mail/ASMailFolder.cpp,v
retrieving revision 1.63
retrieving revision 1.64
diff -b -u -2 -r1.63 -r1.64
--- ASMailFolder.cpp    14 Jul 2002 23:41:22 -0000      1.63
+++ ASMailFolder.cpp    16 Jul 2002 20:21:43 -0000      1.64
@@ -227,11 +227,35 @@
 {
 public:
-   // passing empty sequence string means that we set flag for all messages
-   MT_SetSequenceFlag(ASMailFolder *mf, UserData ud,
-                      const String &sequence,
+   MT_SetSequenceFlag(ASMailFolder *mf,
+                      UserData ud,
+                      MailFolder::SequenceKind kind,
+                      const Sequence& sequence,
+                      int flag, bool set)
+      : MailThread(mf, ud), m_Sequence(sequence)
+      {
+         m_Kind = kind;
+         m_Flag = flag;
+         m_Set = set;
+      }
+   virtual void WorkFunction(void)
+      {
+         m_MailFolder->SetSequenceFlag(m_Kind, m_Sequence, m_Flag, m_Set);
+      }
+
+protected:
+   const Sequence m_Sequence;
+   MailFolder::SequenceKind m_Kind;
+   int m_Flag;
+   bool m_Set;
+};
+
+class MT_SetFlagForAll : public MailThread
+{
+public:
+   MT_SetFlagForAll(ASMailFolder *mf,
+                    UserData ud,
                       int flag, bool set)
       : MailThread(mf, ud)
       {
-         m_Sequence = sequence;
          m_Flag = flag;
          m_Set = set;
@@ -239,12 +263,8 @@
    virtual void WorkFunction(void)
       {
-         if ( m_Sequence.empty() )
             m_MailFolder->SetFlagForAll(m_Flag, m_Set);
-         else
-            m_MailFolder->SetSequenceFlag(m_Sequence, m_Flag, m_Set);
       }
 
 protected:
-   String m_Sequence;
    int m_Flag;
    bool m_Set;
@@ -721,6 +741,5 @@
    virtual Ticket SetFlagForAll(int flag, bool set = true)
       {
-         // passing empty string means that we set it for all messages
-         return (new MT_SetSequenceFlag(this, NULL, "", flag, set))->Start();
+         return (new MT_SetFlagForAll(this, NULL, flag, set))->Start();
       }
 
@@ -730,10 +749,11 @@
        @param set if true, set the flag, if false, clear it
    */
-   virtual Ticket SetSequenceFlag(const UIdArray *sequence,
+   virtual Ticket SetSequenceFlag(MailFolder::SequenceKind kind,
+                                  const Sequence& sequence,
                                   int flag,
                                   bool set)
       {
          return (new MT_SetSequenceFlag(this, NULL,
-                                        
GetSequenceString(sequence),flag,set))->Start();
+                                        kind,sequence,flag,set))->Start();
       }
 
@@ -782,5 +802,4 @@
                            bool read)
       {
-         //return SetFlag(selections, MailFolder::MSG_STAT_SEEN, read);
          return (new MT_MarkRead(this, ud, selections, read))->Start();
       }
@@ -825,8 +844,8 @@
                                int flag, bool set)
       {
-         UIdArray *ia = new UIdArray;
-         ia->Add(uid);
-         SetSequenceFlag(ia, flag, set);
-         delete ia;
+         UIdArray ua;
+         ua.Add(uid);
+
+         SetFlag(&ua, flag, set);
       }
    //@}

Index: MailFolder.cpp
===================================================================
RCS file: /cvsroot/mahogany/M/src/mail/MailFolder.cpp,v
retrieving revision 1.285
retrieving revision 1.286
diff -b -u -2 -r1.285 -r1.286
--- MailFolder.cpp      15 Jul 2002 16:32:14 -0000      1.285
+++ MailFolder.cpp      16 Jul 2002 20:21:44 -0000      1.286
@@ -1075,4 +1075,35 @@
 
 // ----------------------------------------------------------------------------
+// MailFolder flags
+// ----------------------------------------------------------------------------
+
+bool
+MailFolder::SetFlagForAll(int flag, bool set)
+{
+   unsigned long nMessages = GetMessageCount();
+
+   if ( !nMessages )
+   {
+      // no messages to set the flag for
+      return true;
+   }
+
+   Sequence sequence;
+   sequence.AddRange(1, nMessages);
+
+   return SetSequenceFlag(SEQ_MSGNO, sequence, flag, set);
+}
+
+bool MailFolder::SetFlag(const UIdArray *sequence, int flag, bool set)
+{
+   CHECK( sequence, false, "NULL sequence in MailFolder::SetFlag" );
+
+   Sequence seq;
+   seq.AddArray(*sequence);
+
+   return SetSequenceFlag(SEQ_UID, seq, flag, set);
+}
+
+// ----------------------------------------------------------------------------
 // misc static MailFolder methods
 // ----------------------------------------------------------------------------

Index: MailFolderCC.cpp
===================================================================
RCS file: /cvsroot/mahogany/M/src/mail/MailFolderCC.cpp,v
retrieving revision 1.632
retrieving revision 1.633
diff -b -u -2 -r1.632 -r1.633
--- MailFolderCC.cpp    16 Jul 2002 13:15:48 -0000      1.632
+++ MailFolderCC.cpp    16 Jul 2002 20:21:44 -0000      1.633
@@ -185,7 +185,4 @@
 #define TRACE_MF_CALLS "mfcall"
 
-// turn on logging of events sent by MailFolderCC
-#define TRACE_MF_EVENTS "mfevent"
-
 // ----------------------------------------------------------------------------
 // global functions prototypes
@@ -3532,11 +3529,16 @@
       CHECK( m_MailStream, 0, "SearchByFlag: folder is closed" );
 
-      set->last = mail_uid(m_MailStream, m_nMessages);
 
       if ( flags & SEARCH_UID )
+      {
+         set->last = mail_uid(m_MailStream, m_nMessages);
          pgm->uid = set;
-      else
+      }
+      else // msgno search
+      {
+         set->last = m_nMessages;
          pgm->msgno = set;
    }
+   }
 
    return DoSearch(pgm, flags & (SEARCH_UID | SEARCH_MSGNO));
@@ -3631,14 +3633,17 @@
 
 bool
-MailFolderCC::SetSequenceFlag(const String& sequence,
+MailFolderCC::SetMessageFlag(unsigned long uid,
                               int flag,
                               bool set)
 {
-   return DoSetSequenceFlag(SEQ_UID, sequence, flag, set);
+   Sequence seq;
+   seq.Add(uid);
+
+   return SetSequenceFlag(SEQ_UID, seq, flag, set);
 }
 
 bool
-MailFolderCC::DoSetSequenceFlag(SequenceKind kind,
-                                const String& sequence,
+MailFolderCC::SetSequenceFlag(SequenceKind kind,
+                              const Sequence& seq,
                                 int flag,
                                 bool set)
@@ -3656,4 +3661,6 @@
    String flags = GetImapFlags(flag);
 
+   const String sequence = seq.GetString();
+
    if(PY_CALLBACKVA((set ? MCB_FOLDERSETMSGFLAG : MCB_FOLDERCLEARMSGFLAG,
                      1, this, this->GetClassName(),
@@ -3668,5 +3675,5 @@
          opFlags |= ST_UID;
 
-      CHECK( m_MailStream, 0, "DoSetSequenceFlag: folder is closed" );
+      CHECK( m_MailStream, 0, "SetSequenceFlag: folder is closed" );
 
       wxLogTrace(TRACE_MF_CALLS, "MailFolderCC(%s)::SetFlags(%s) = %s",
@@ -3683,25 +3690,4 @@
 }
 
-bool
-MailFolderCC::SetFlag(const UIdArray *selections, int flag, bool set)
-{
-   return SetSequenceFlag(BuildSequence(*selections), flag, set);
-}
-
-bool
-MailFolderCC::SetFlagForAll(int flag, bool set)
-{
-   if ( !m_nMessages )
-   {
-      // no messages to set the flag for
-      return true;
-   }
-
-   Sequence sequence;
-   sequence.AddRange(1, m_nMessages);
-
-   return DoSetSequenceFlag(SEQ_MSGNO, sequence.GetString(), flag, set);
-}
-
 void
 MailFolderCC::OnMsgStatusChanged()
@@ -4488,17 +4474,4 @@
    m_expungedMsgnos =
    m_expungedPositions = NULL;
-}
-
-void
-MailFolderCC::RequestUpdate()
-{
-   if ( IsUpdateSuspended() )
-      return;
-
-   wxLogTrace(TRACE_MF_EVENTS, "Sending FolderUpdate event for folder '%s'",
-              GetName().c_str());
-
-   // tell all interested that the folder changed
-   MEventManager::Send(new MEventFolderUpdateData(this));
 }
 

Index: MailFolderCmn.cpp
===================================================================
RCS file: /cvsroot/mahogany/M/src/mail/MailFolderCmn.cpp,v
retrieving revision 1.98
retrieving revision 1.99
diff -b -u -2 -r1.98 -r1.99
--- MailFolderCmn.cpp   14 Jul 2002 23:41:23 -0000      1.98
+++ MailFolderCmn.cpp   16 Jul 2002 20:21:44 -0000      1.99
@@ -1323,4 +1323,21 @@
 
 // ----------------------------------------------------------------------------
+// MailFolderCmn misc
+// ----------------------------------------------------------------------------
+
+void
+MailFolderCmn::RequestUpdate()
+{
+   if ( IsUpdateSuspended() )
+      return;
+
+   wxLogTrace(TRACE_MF_EVENTS, "Sending FolderUpdate event for folder '%s'",
+              GetName().c_str());
+
+   // tell all interested that the folder changed
+   MEventManager::Send(new MEventFolderUpdateData(this));
+}
+
+// ----------------------------------------------------------------------------
 // MFCmnOptions
 // ----------------------------------------------------------------------------
@@ -1434,18 +1451,15 @@
 
 
-/** Delete a message.
-    @param uid mesage uid
-    @return true if ok
-    */
 bool
 MailFolderCmn::DeleteMessage(unsigned long uid)
 {
-   UIdArray a;
-   a.Add(uid);
-
-   // delete without expunging
-   return DeleteMessages(&a);
+   return SetMessageFlag(uid, MSG_STAT_DELETED, true);
 }
 
+bool
+MailFolderCmn::UnDeleteMessage(unsigned long uid)
+{
+   return SetMessageFlag(uid, MSG_STAT_DELETED, false);
+}
 
 bool
@@ -1492,12 +1506,11 @@
 MailFolderCmn::DeleteMessages(const UIdArray *selections, bool expunge)
 {
-   String seq = GetSequenceString(selections);
-   if ( seq.empty() )
-   {
-      // nothing to do
-      return true;
-   }
+   CHECK( selections, false,
+          "NULL selections in MailFolderCmn::DeleteMessages" );
+
+   Sequence seq;
+   seq.AddArray(*selections);
 
-   bool rc = SetSequenceFlag(seq, MailFolder::MSG_STAT_DELETED);
+   bool rc = SetSequenceFlag(SEQ_UID, seq, MailFolder::MSG_STAT_DELETED);
    if ( rc && expunge )
       ExpungeMessages();



-------------------------------------------------------
This sf.net email is sponsored by: Jabber - The world's fastest growing 
real-time communications platform! Don't just IM. Build it in! 
http://www.jabber.com/osdn/xim
_______________________________________________
Mahogany-cvsupdates mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/mahogany-cvsupdates

Reply via email to