[imp] Dimp : folders tree not updated after an add (new) folder action

Jan Schneider jan at horde.org
Sat Nov 29 10:10:05 UTC 2008


Zitat von Emeric Jhelil <Emeric.Jhelil at univ-lemans.fr>:

> Dimp : folders tree not updated after an add (new) folder action
>
> Installation infos : horde-webmail-1.2 ; php-5.2.6 ; debian etch
>
> By Dimp interface, after the creation of a new folder, I don't see  
> the new folder dynamically added to the folders tree.
> I need to refresh the page to see the new folder in the folders tree.
>
> I remarked that this behaviour doesn't occur when I have another  
> virtual folder in addition to the virtual inbox.
>
> For instance, I try to create the folder "foo".
> If I have no other virtual folder but the virtual inbox, then :
> - I get the message 'The folder "foo" was successfully created'.
> But :
> - The folder "foo" doesn't appear in the folders tree.
>
> Setting the javascript debugging and using dimp/js/src produces an alert :
> with Firefox 2.0.0.18 :
> doActionComplete callback: TypeError-$(elt) has no properties
> with IE7
>  doActionComplete callback: TypeError-'null' is null or not an object
>
> Refreshing the page corrects the situation :
> - The folder "foo" appears successfully in the folders tree.
>
> So, if I have created a virtual folder by Imp interface, then when I  
> connect to the webmail by Dimp interface, a new created folder  
> dynamically appears in the folders tree without refreshing the page.
>
> I don't know if it's due to my configuration (admin config ? or user  
> config ?).
>
> I tried to understand and it seems to be caused by the virtual folders.
> The getFolderResponse (horde/dimp/lib/DIMP.php) result contains the  
> new folder in the array a but the "Virtual Folders%" in the array c  
> too.
> Then it makes the _folderCallback function  
> (horde/dimp/js/src/DimpBase.js) fails when it manages the changed  
> folders. And it doesn't continue managing the added folders.
> More precisely :
> _folderCallback calls
>  changeFolder which calls
>    deleteFolderElt sets f to null by the instruction
>      var f = $(fid); (because there is no fldVirtual_Folders_) then calls
>      DimpCore.removeMouseEvents(f) which wraps
>        DimpBase._removeMouseEvents which fails on the instruction
>          var d, id = $(elt).readAttribute('id'); with elt that is null
>
> I think that it is linked to the re-creation of the virtual folders.  
> After the deletion of the virtual inbox, its parent folder is empty.  
> So during the re-creation of the virtual inbox, its parent is marked  
> "changed" and it finishes to appear in the changed folders.
>
> If I am not on a wrong trail, a part of the calls is :
> with Folder as horde/imp/lib/Folder.php, Search as  
> horde/imp/lib/Search.php, Tree as horde/imp/lib/IMAP/Tree.php
> Folder.create calls
>  Search.sessionSetup(true) which calls
>    Search.createVINBOXFolder which calls
>      Search.addVFolder (by the else branch of if (empty($vinbox_id))  
> ) which calls
>        Search._updateIMPTree(add... which calls
>          Tree.insertVFolders which calls
>            Tree.insert which calls
>              Tree._insertElt which sets
>                $this-->_eltdiff[$elt['p']]['changed'] = true;  
> (because its parent is empty)
>
> I tried a modification to prevent the getFolderResponse result to  
> contain the virtual folders in the changed folders array c.
> I modified horde/dimp/lib/DIMP.php (v1.110.2.32)  :
> --- horde/dimp/lib/DIMP.php     2008-09-26 12:26:24.000000000 +0200
> +++ horde-webmail-1.2_um/dimp/lib/DIMP.php      2008-11-27  
> 11:31:45.000000000 +0100
> @@ -318,6 +318,11 @@
>             if ($val == IMPTREE_BASE_ELT) {
>                 continue;
>             }
> +/* Debut UM EJ : 20-11-2008 */
> +            if ($val == IMPTREE_VFOLDER_KEY) {
> +                continue;
> +            }
> +/* Fin UM EJ : 20-11-2008 */
>             $result['c'][] = DIMP::_createFolderElt($imptree->element($val));
>         }
>
> It corrects the problem : without any other virtual folders but the  
> virtual inbox, the creation of a new folder is dynamically added to  
> the folders tree with Dimp interface.
>
> Moreover, during my tries, I remarked in horde/imp/lib/IMAP/Tree.php  
> (v 1.25.2.60), the function delete uses the instruction :
> $vfolder_base = ($id == IMPTREE_VFOLDER_LABEL);
> but shouldn't it be ?
> $vfolder_base = ($id == IMPTREE_VFOLDER_KEY);
> Because when I logged the function, it seems to be the key and not  
> the label that was used.
>
>
> Thanks for reading and help.
>
> Emeric
> PS : I have another problem on renaming a folder but I write it in a  
> separate email to be not too long.
> --
> IMP mailing list - Join the hunt: http://horde.org/bounties/#imp
> Frequently Asked Questions: http://horde.org/faq/
> To unsubscribe, mail: imp-unsubscribe at lists.horde.org
>


Please create a ticket on http://bugs.horde.org/.

Jan.

-- 
Do you need professional PHP or Horde consulting?
http://horde.org/consulting/



More information about the imp mailing list