[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-pim
Subject:    Re: [Kde-pim] Review Request 109276: Fixes in IMAP resource folder handling
From:       "Andras Mantia" <amantia () kde ! org>
Date:       2013-05-24 9:34:28
Message-ID: 20130524093428.6954.76029 () vidsolbach ! de
[Download RAW message or body]



> On May 6, 2013, 6:20 p.m., Volker Krause wrote:
> > resources/imap/addcollectiontask.cpp, line 87
> > <http://git.reviewboard.kde.org/r/109276/diff/1/?file=116820#file116820line87>
> > 
> > This looks rather dangerous, what if there's already content in this folder?

Good question. What is the probability that it can happen? This is called from the resource's \
collectionAdded. The problem is point #3. Any other idea?


- Andras


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/109276/#review32148
-----------------------------------------------------------


On March 28, 2013, 9:45 p.m., Andras Mantia wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://git.reviewboard.kde.org/r/109276/
> -----------------------------------------------------------
> 
> (Updated March 28, 2013, 9:45 p.m.)
> 
> 
> Review request for KDEPIM and Kevin Ottens.
> 
> 
> Description
> -------
> 
> We discovered several issues with the IMAP resource folder handling. This patch addresses \
> them, although in some cases with a temporarly solution: 
> 1) Creation of toplevel folders created folders with weird remote ids. E.g when creating \
> folder "foo", it set the remoteid to "ifoo". This was because AddCollectionTask sets the \
> first char of the remoteId for new collections based on the first character of the remoteId \
> of the parent collection. For toplevel collections this is "i" from "imap://"... This breaks \
> everything created below this folder as well. Now it is hardcoded to "/", although this will \
> break for IMAP servers using other separators. A nicer solution is needed (finding the right \
> separator is not trivial though). This bug seems to be present also in other tasks as well, \
> but I didn't change as I didn't tested those codepaths. 
> 2) Creating toplevel folders requires a resync of the resource for them to appear. This is \
> actually some bug in the ETM that I don't feel like debugging, so a solution used also in \
> other parts of the code is reused: request a resync of the collection list. 
> 3) If a folder is created, but it fails (e.g lack of rights on the server), the collection \
> for the folder remains in the akonadi database without a remoteId. This blocks creating of \
> new folders with the same name. I consider that failing to create a folder on the resource's \
> server side is something the user must know and the akonadi cache should reflect the status \
>                 on the server, I did the following:
> - remove the collection from the cache
> - propagate the error through the status message. This is less then optimal, but afaik there \
> is no other mechanism so far to catch the errors in applications (KMail). Maybe the tracer \
> can be used though? 
> 4) Given two folders starting with the same characters (e.g foo and foobar) and deleting \
> "foo" deleted both "foo" and "foobar" because of the wrong startsWith check. Now the folder \
>                 is deleted, if:
> - it matches the name exactly
> - the found folder is a subolder of the folder that will be deleted (startwith name + \
> separator) 
> 5) Deleting of folder was...broken completely. If we had INBOX, foo, bar and tried to deleted \
> e.g bar,  the code started to list the directories, but aborted on the first time when \
> onMailBoxesReceived was called, but the list of mailbox didn't include what we wanted to \
> delete. E.g if the list emitted INBOX, then we aborted without waiting that the slot is \
> called with the rest of the folders. Now we keep track if we found the right folder and abort \
> only if none of the listed folders is what we were expecting. 
> 6) Dummyresourcestate unconditionally removed the first char from the mailbox name, so for a \
> collection "foo" it returned "oo" messing the tests up. Now it is slightly more intelligent. 
> 7) adapt the test (now the order of deletion calls is different) and fix its synchronization \
> by not using QTest::qWait(), but an event loop to detect when the task finished. This catches \
> (with a deadlock) cases when the task is finished without calling changeProcessed() or \
> cancelTask(). 
> 
> Diffs
> -----
> 
> resources/imap/tests/testremovecollectiontask.cpp ba1780b 
> resources/imap/tests/dummyresourcestate.cpp 518bf8a 
> resources/imap/removecollectionrecursivetask.cpp 50de4d6 
> resources/imap/removecollectionrecursivetask.h 361cb0d 
> resources/imap/imapresource.cpp 8d2332e 
> resources/imap/imapresource.h 130a337 
> resources/imap/changecollectiontask.cpp c5ae674 
> resources/imap/addcollectiontask.cpp d44b98b 
> 
> Diff: http://git.reviewboard.kde.org/r/109276/diff/
> 
> 
> Testing
> -------
> 
> Testing on GMail and the KDAB imap server, running the above unit test (most of the unit \
> tests fail, but I was looking only at this one now). 
> 
> Thanks,
> 
> Andras Mantia
> 
> 

_______________________________________________
KDE PIM mailing list kde-pim@kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
KDE PIM home page at http://pim.kde.org/


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic