From 217c1e3d2b76835ec63a04e73bcb79e7ee5f2205 Mon Sep 17 00:00:00 2001 From: Volker Krause Date: Wed, 4 Apr 2007 15:35:50 +0000 Subject: [PATCH] - fix folder creation - create one lost+found sub-folder per incident svn path=/branches/kdepim/enterprise/kdepim/; revision=650440 --- kmfoldercachedimap.cpp | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/kmfoldercachedimap.cpp b/kmfoldercachedimap.cpp index 22aa6bca0..6d9b38f7f 100644 --- a/kmfoldercachedimap.cpp +++ b/kmfoldercachedimap.cpp @@ -1257,23 +1257,51 @@ void KMFolderCachedImap::uploadNewMessages() break; } KMFolderDir *inboxDir = inboxFolder->child(); - assert( inboxDir ); - if ( !inboxDir ) + if ( !inboxDir && !inboxFolder->storage() ) break; + assert( inboxFolder->storage()->folderType() == KMFolderTypeCachedImap ); // create lost+found folder if needed KMFolderNode *node; + KMFolder *lfFolder = 0; if ( !(node = inboxDir->hasNamedFolder( i18n("lost+found") )) ) { kdDebug(5006) << k_funcinfo << "creating lost+found folder" << endl; - KMFolder *folder = inboxDir->createFolder( i18n("lost+found"), false, folderType() ); - folder->storage()->setContentsType( contentsType() ); + KMFolder* folder = kmkernel->dimapFolderMgr()->createFolder( + i18n("lost+found"), false, KMFolderTypeCachedImap, inboxDir ); + if ( !folder || !folder->storage() ) + break; + static_cast( folder->storage() )->initializeFrom( + static_cast( inboxFolder->storage() ) ); + folder->storage()->setContentsType( KMail::ContentsTypeMail ); folder->storage()->writeConfig(); - dest = folder; + lfFolder = folder; } else { - dest = dynamic_cast( node ); + kdDebug(5006) << k_funcinfo << "found lost+found folder" << endl; + lfFolder = dynamic_cast( node ); } - if ( !dest ) + if ( !lfFolder || !lfFolder->createChildFolder() || !lfFolder->storage() ) break; + + // create subfolder for this incident + QDate today = QDate::currentDate(); + QString baseName = folder()->label() + "-" + QString::number( today.year() ) + + (today.month() < 10 ? "0" : "" ) + QString::number( today.month() ) + + (today.day() < 10 ? "0" : "" ) + QString::number( today.day() ); + QString name = baseName; + int suffix = 0; + while ( (node = lfFolder->child()->hasNamedFolder( name )) ) { + ++suffix; + name = baseName + '-' + QString::number( suffix ); + } + kdDebug(5006) << k_funcinfo << "creating lost+found folder " << name << endl; + dest = kmkernel->dimapFolderMgr()->createFolder( name, false, KMFolderTypeCachedImap, lfFolder->child() ); + if ( !dest || !dest->storage() ) + break; + static_cast( dest->storage() )->initializeFrom( + static_cast( lfFolder->storage() ) ); + dest->storage()->setContentsType( contentsType() ); + dest->storage()->writeConfig(); + manualMove = false; break; }