Update of /cvsroot/mahogany/M/src/mail
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2975/src/mail

Modified Files:
        MailFolderCC.cpp 
Log Message:
fixed IMAP folder renaming (was completely broken)

Index: MailFolderCC.cpp
===================================================================
RCS file: /cvsroot/mahogany/M/src/mail/MailFolderCC.cpp,v
retrieving revision 1.702
retrieving revision 1.703
diff -b -u -2 -r1.702 -r1.703
--- MailFolderCC.cpp    22 Sep 2004 22:03:31 -0000      1.702
+++ MailFolderCC.cpp    27 Sep 2004 20:33:31 -0000      1.703
@@ -3923,4 +3923,24 @@
 }
 
+/* static */ bool
+MailFolderCC::SetLoginDataIfNeeded(const MFolder *mfolder, String *loginOut)
+{
+   String login, password;
+   if ( !GetAuthInfoForFolder(mfolder, login, password ) )
+   {
+      return false;
+   }
+
+   if ( !login.empty() )
+   {
+      SetLoginData(login, password);
+      if ( loginOut )
+         *loginOut = login;
+   }
+   //else: we don't need any login credentials at all
+
+   return true;
+}
+
 // ----------------------------------------------------------------------------
 // Debug only helpers
@@ -5482,8 +5502,25 @@
    (void)MailFolderCC::CloseFolder(mfolder);
 
-   String spec = MailFolder::GetImapSpec(mfolder);
+   // prepare login credentials as we're opening a new connection to the server
+   String login;
+   SetLoginDataIfNeeded(mfolder, &login);
+
+   // name is the folder name on server, i.e. without the remote spec part,
+   // while c-client needs it, so prepend it before calling mail_rename()
+   String spec = MailFolder::GetImapSpec(mfolder, login);
+   String specNew;
+   if ( *spec.c_str() == _T('{') ) // works even if it is empty
+   {
+      specNew = spec.BeforeFirst(_T('}')) + _T('}') + name;
+   }
+   else // local file
+   {
+      specNew = name;
+   }
+
+   // do rename
    if ( !mail_rename(NULL,
                      (char *)spec.c_str(),
-                     (char *)name.c_str()) )
+                     (char *)specNew.c_str()) )
    {
       wxLogError(_("Failed to rename the mailbox for folder '%s' "
@@ -5507,7 +5544,5 @@
 MailFolderCC::ClearFolder(const MFolder *mfolder)
 {
-   String login = mfolder->GetLogin(),
-          password = mfolder->GetPassword(),
-          fullname = mfolder->GetFullName();
+   String fullname = mfolder->GetFullName();
    String mboxpath = MailFolder::GetImapSpec(mfolder);
 
@@ -5535,10 +5570,9 @@
    else // this folder is not opened
    {
-      if ( !GetAuthInfoForFolder(mfolder, login, password ) )
+      if ( !SetLoginDataIfNeeded(mfolder) )
       {
          return false;
       }
 
-      SetLoginData(login, password);
 
       // we don't want any notifications
@@ -5625,6 +5659,6 @@
 MailFolderCC::DeleteFolder(const MFolder *mfolder)
 {
-   String login, password;
-   if ( !GetAuthInfoForFolder(mfolder, login, password ) )
+   String login;
+   if ( !SetLoginDataIfNeeded(mfolder, &login) )
    {
       return false;
@@ -5634,5 +5668,4 @@
 
    MCclientLocker lock;
-   SetLoginData(login, password);
 
    wxLogTrace(TRACE_MF_CALLS,



-------------------------------------------------------
This SF.Net email is sponsored by: YOU BE THE JUDGE. Be one of 170
Project Admins to receive an Apple iPod Mini FREE for your judgement on
who ports your project to Linux PPC the best. Sponsored by IBM.
Deadline: Sept. 24. Go here: http://sf.net/ppc_contest.php
_______________________________________________
Mahogany-cvsupdates mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/mahogany-cvsupdates

Reply via email to