Version: (using KDE Devel) Installed from: Compiled sources Compiler: gcc 3.2.3 OS: Linux I am using courier-imapd as my mail server. As you may know, Courier makes all IMAP folders subfolders of INBOX. Ordinarily, my folder tree looks like this: Server INBOX Admin News ... If I set the "Prefix to Folders" to INBOX, my tree appears as it should (i.e. like this:) Server [which is also my INBOX] Admin News ... However, when I bring up the "Subscribe" dialog, KMail goes into some sort of infinite loop, causing the inbox (and its subfolders) to appear an infinite amount of times in the folder list on the left side of the dialog.
Subject: Re: New: KMail Cached IMAP Subscription Bug On Monday 30 June 2003 09:43, Joshua J.Berry wrote: > However, when I bring up the "Subscribe" dialog, KMail goes into some sort > of infinite loop, causing the inbox (and its subfolders) to appear an > infinite amount of times in the folder list on the left side of the dialog. Strange - I thought that I already fixed this. But ok, let me check it.
This bug also seems to be affecting Disconnected IMAP, as the synchronization routine goes into an infinite loop, constantly asking if I want to reset certain folders (such as INBOX) to the initial sync state (where the old state was either 10 or 12).
These two are not related code-wise but it
I tried your suggestion ("INBOX." instead of "INBOX" or nothing), and restarted Kontact. (This is still using Disconnected IMAP.) It now sits there for several minutes (doing apparently nothing), and eventually gives me the message "Folder 'INBOX.' is not in initial sync state (was in state 2). Reset and sync anyway?" (or something similar). I say Yes, and it immediately finishes synchronizing (i.e. without doing any subfolders), but all my folders under INBOX went away. However, they still show up in the Subscription dialog (with the appropriate folders checked). Thanks for the help and suggestions.
I tried this only with normal (online) imap so far. Independent from that "INBOX." is the correct prefix because this is your personal namespace in courier (and also in cyrus).
Subject: kdepim/kmail CVS commit by burghard: Fix loop with courier and personal namespace. CCMAIL: 60516-done@bugs.kde.org M +27 -23 subscriptiondialog.cpp 1.7 --- kdepim/kmail/subscriptiondialog.cpp #1.6:1.7 @@ -55,4 +55,5 @@ void SubscriptionDialog::slotListDirecto GroupItem *parent = 0; mLoading = true; + ImapAccountBase* ai = static_cast<ImapAccountBase*>(mAcct); if (!onlySubscribed) @@ -86,16 +87,18 @@ void SubscriptionDialog::slotListDirecto { bool create = true; - if (parent) + QListViewItem *start = folderTree()->firstChild(); + if ( parent ) + start = parent->firstChild(); + if ( start ) { - for ( QListViewItem *it = parent->firstChild() ; - it ; it = it->nextSibling() ) + for ( QListViewItem *it = start; it; it = it->nextSibling() ) { // check if this item already exists in this hierarchy item = static_cast<GroupItem*>(it); - if (item->info().path == mSubfolderPaths[i]) + if ( item->info().path == mSubfolderPaths[i] ) create = false; } } - if (create) + if ( create ) { KGroupInfo info(mSubfolderNames[i]); @@ -110,10 +113,9 @@ void SubscriptionDialog::slotListDirecto item = new GroupItem(folderTree(), info, this, true); } - if (item) - { - // reset + if ( item ) // reset item->setOn(false); - } - } else { + + } else + { // find the item QListViewItemIterator it( groupView ); @@ -129,18 +131,17 @@ void SubscriptionDialog::slotListDirecto } } - if (mSubfolderMimeTypes[i] == "message/directory" || - mSubfolderMimeTypes[i] == "inode/directory") + if ( mSubfolderMimeTypes[i] == "message/directory" || + mSubfolderMimeTypes[i] == "inode/directory" ) { // descend - static_cast<ImapAccountBase*>(mAcct)->listDirectory(mSubfolderPaths[i], - onlySubscribed); + bool secondStep = (mSubfolderPaths[i] == ai->prefix()) ? true : false; + static_cast<ImapAccountBase*>(mAcct)->listDirectory( mSubfolderPaths[i], + onlySubscribed, secondStep ); } } - if (jobData.inboxOnly) - { - ImapAccountBase* ai = static_cast<ImapAccountBase*>(mAcct); - ai->listDirectory(ai->prefix(), false, true); - ai->listDirectory(ai->prefix(), true, true); - } + if ( jobData.inboxOnly ) + ai->listDirectory( ai->prefix(), onlySubscribed, true ); + + // active buttons and stuff slotLoadingComplete(); } @@ -171,11 +172,14 @@ void SubscriptionDialog::slotSave() void SubscriptionDialog::slotLoadFolders() { + // clear the views KSubscription::slotLoadFolders(); - if ( !account()) + if ( !account() ) return; ImapAccountBase* ai = static_cast<ImapAccountBase*>(account()); + if ( ai->prefix().isEmpty() ) + return; // get folders - ai->listDirectory(ai->prefix(), false); - ai->listDirectory(ai->prefix(), true); + ai->listDirectory( ai->prefix(), false ); + ai->listDirectory( ai->prefix(), true ); }