00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "folderutil.h"
00020
00021 #include "kmfolder.h"
00022 #include "kmfolderimap.h"
00023 #include "kmfoldercachedimap.h"
00024 #include "kmfoldermgr.h"
00025
00026 #include <tdemessagebox.h>
00027
00028 using namespace KMail;
00029 using namespace FolderUtil;
00030
00031 KMFolder *KMail::FolderUtil::createSubFolder( KMFolder *parentFolder, KMFolderDir *parentDir,
00032 const TQString &folderName, const TQString &namespaceName,
00033 KMFolderType localFolderType )
00034 {
00035 KMFolder *newFolder = 0;
00036
00037 if ( parentFolder && parentFolder->folderType() == KMFolderTypeImap ) {
00038 KMFolderImap* selectedStorage = static_cast<KMFolderImap*>( parentFolder->storage() );
00039 KMAcctImap *anAccount = selectedStorage->account();
00040
00041 if (anAccount->makeConnection() == ImapAccountBase::Connected) {
00042 newFolder = kmkernel->imapFolderMgr()->createFolder( folderName, false, KMFolderTypeImap, parentDir );
00043 if ( newFolder ) {
00044 TQString imapPath, parent;
00045 if ( !namespaceName.isEmpty() ) {
00046
00047 parent = anAccount->addPathToNamespace( namespaceName );
00048 imapPath = anAccount->createImapPath( parent, folderName );
00049 } else {
00050 imapPath = anAccount->createImapPath( selectedStorage->imapPath(), folderName );
00051 }
00052 KMFolderImap* newStorage = static_cast<KMFolderImap*>( newFolder->storage() );
00053 selectedStorage->createFolder(folderName, parent);
00054 newStorage->initializeFrom( selectedStorage, imapPath, TQString() );
00055 static_cast<KMFolderImap*>(parentFolder->storage())->setAccount( selectedStorage->account() );
00056 return newFolder;
00057 }
00058 }
00059 } else if ( parentFolder && parentFolder->folderType() == KMFolderTypeCachedImap ) {
00060 newFolder = kmkernel->dimapFolderMgr()->createFolder( folderName, false, KMFolderTypeCachedImap,
00061 parentDir );
00062 if ( newFolder ) {
00063 KMFolderCachedImap* selectedStorage = static_cast<KMFolderCachedImap*>( parentFolder->storage() );
00064 KMFolderCachedImap* newStorage = static_cast<KMFolderCachedImap*>( newFolder->storage() );
00065 newStorage->initializeFrom( selectedStorage );
00066 if ( !namespaceName.isEmpty() ) {
00067
00068 TQString path = selectedStorage->account()->createImapPath(
00069 namespaceName, folderName );
00070 newStorage->setImapPathForCreation( path );
00071 }
00072 return newFolder;
00073 }
00074 } else {
00075
00076 Q_ASSERT( localFolderType == KMFolderTypeMaildir || localFolderType == KMFolderTypeMbox );
00077 newFolder = kmkernel->folderMgr()->createFolder( folderName, false, localFolderType,
00078 parentDir );
00079 return newFolder;
00080 }
00081
00082 return newFolder;
00083 }
00084
00085 void KMail::FolderUtil::deleteFolder( KMFolder *folderToDelete, TQWidget *parent )
00086 {
00087 if ( folderToDelete->hasAccounts() ) {
00088
00089 for ( AccountList::Iterator it (folderToDelete->acctList()->begin() ),
00090 end( folderToDelete->acctList()->end() ); it != end; ++it ) {
00091 (*it)->setFolder( kmkernel->inboxFolder() );
00092 KMessageBox::information(parent,
00093 i18n("<qt>The folder you deleted was associated with the account "
00094 "<b>%1</b> which delivered mail into it. The folder the account "
00095 "delivers new mail into was reset to the main Inbox folder.</qt>").arg( (*it)->name()));
00096 }
00097 }
00098 if (folderToDelete->folderType() == KMFolderTypeImap)
00099 kmkernel->imapFolderMgr()->remove(folderToDelete);
00100 else if (folderToDelete->folderType() == KMFolderTypeCachedImap) {
00101
00102 KMFolderCachedImap* storage = static_cast<KMFolderCachedImap*>( folderToDelete->storage() );
00103 KMAcctCachedImap* acct = storage->account();
00104 if ( acct )
00105 acct->addDeletedFolder( folderToDelete );
00106
00107 kmkernel->dimapFolderMgr()->remove(folderToDelete);
00108 }
00109 else if (folderToDelete->folderType() == KMFolderTypeSearch)
00110 kmkernel->searchFolderMgr()->remove(folderToDelete);
00111 else
00112 kmkernel->folderMgr()->remove(folderToDelete);
00113 }