]> err.no Git - scalable-opengroupware.org/commitdiff
added methods to retrieve full folder hierarchy
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Thu, 11 Nov 2004 16:38:06 +0000 (16:38 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Thu, 11 Nov 2004 16:38:06 +0000 (16:38 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@452 d1b88da0-ebda-0310-925b-ed51d893ca5b

SOGo/SoObjects/Mailer/ChangeLog
SOGo/SoObjects/Mailer/SOGoMailAccount.h
SOGo/SoObjects/Mailer/SOGoMailAccount.m
SOGo/SoObjects/Mailer/SOGoMailManager.h
SOGo/SoObjects/Mailer/SOGoMailManager.m
SOGo/SoObjects/Mailer/Version
SOGo/UI/Mailer/ChangeLog
SOGo/UI/Mailer/UIxMailListView.wox
SOGo/UI/Mailer/UIxMailMoveToPopUp.wox
SOGo/UI/Mailer/Version

index 1554c9e24fd619768c225c11feb0df784dcd6603..f8130ddde105eab3cf285e0a089514d3eaa586d4 100644 (file)
@@ -1,3 +1,12 @@
+2004-11-11  Helge Hess  <helge.hess@skyrix.com>
+       
+       * v0.9.53
+       
+       * SOGoMailAccounts.m: added -allFolderPathes methods to retrieve the
+         names of all folders associated with the account
+       
+       * SOGoMailManager.m: added -allFoldersForURL:password: method
+
 2004-11-09  Helge Hess  <helge.hess@skyrix.com>
 
        * added support for toggling mail flags (v0.9.52)
index 9d17b5e6b1b77512e0c8aa072becf35386c0e05e..809e20a5349b39492d873ae96cf4eb168543c665 100644 (file)
   password, etc)
 */
 
+@class NSArray;
+
 @interface SOGoMailAccount : SOGoMailBaseObject
 {
 }
 
+- (NSArray *)allFolderPathes;
+
 @end
 
 #endif /* __Mailer_SOGoMailAccount_H__ */
index 9b2a52d27c474af6bd4dbbeee054e1750c8bbade..f038287dbcd96a2311b5d6e03e48e5e343c150e9 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "SOGoMailAccount.h"
 #include "SOGoMailFolder.h"
+#include "SOGoMailManager.h"
 #include "SOGoDraftsFolder.h"
 #include "common.h"
 
   return self;
 }
 
+- (NSArray *)allFolderPathes {
+  NSArray *pathes;
+
+  pathes = [[self mailManager] allFoldersForURL:[self imap4URL] 
+                              password:[self imap4Password]];
+  pathes = [pathes sortedArrayUsingSelector:@selector(compare:)];
+  return pathes;
+}
+
 /* IMAP4 */
 
 - (BOOL)useSSL {
index ce9803f93a5a7e579b6a77d660f23d0fd43720c0..0c7d0a95a0c825ecd802645ec145a227decadcf1 100644 (file)
@@ -53,6 +53,7 @@
 - (NSString *)imap4Separator;
 - (NSString *)imap4FolderNameForURL:(NSURL *)_url;
 - (NSArray *)subfoldersForURL:(NSURL *)_url password:(NSString *)_pwd;
+- (NSArray *)allFoldersForURL:(NSURL *)_url password:(NSString *)_pwd;
 
 /* messages */
 
index 58b62fb31a7da5c544c4fe26ece662017fa0f59c..8616d2754a215870e60b77433235bb4221c87f1b 100644 (file)
@@ -211,6 +211,10 @@ static NSString       *imap4Separator  = nil;
 /* folder hierarchy */
 
 - (NSArray *)_getDirectChildren:(NSArray *)_array folderName:(NSString *)_fn {
+  /*
+    Scans string '_array' for strings which start with the string in '_fn'.
+    Then split on '/'.
+  */
   NSMutableArray *ma;
   unsigned i, count, prefixlen;
   
@@ -310,8 +314,12 @@ static NSString       *imap4Separator  = nil;
   return names;
 }
 
+- (NSArray *)extractFoldersFromResultSet:(NSDictionary *)_result {
+  /* Note: the result is normalized, that is, it contains / as the separator */
+  return [[_result valueForKey:@"list"] allKeys];
+}
+
 - (NSArray *)subfoldersForURL:(NSURL *)_url password:(NSString *)_pwd {
-  // TODO: add caching
   SOGoMailConnectionEntry *entry;
   NSDictionary  *result;
 
@@ -326,7 +334,7 @@ static NSString       *imap4Separator  = nil;
   /* check hierarchy cache */
   
   if ((result = [entry cachedHierarchyResults]) != nil)
-      return [self extractSubfoldersForURL:_url fromResultSet:result];
+    return [self extractSubfoldersForURL:_url fromResultSet:result];
   
   [self debugWithFormat:@"  no folders cached yet .."];
   
@@ -356,6 +364,50 @@ static NSString       *imap4Separator  = nil;
   return [self extractSubfoldersForURL:_url fromResultSet:result];
 }
 
+- (NSArray *)allFoldersForURL:(NSURL *)_url password:(NSString *)_pwd {
+  SOGoMailConnectionEntry *entry;
+  NSDictionary  *result;
+
+  if (debugKeys)
+    [self debugWithFormat:@"folders for URL: %@ ...",[_url absoluteString]];
+  
+  /* check connection cache */
+  
+  if ((entry = [self entryForURL:_url password:_pwd]) == nil)
+    return nil;
+  
+  /* check hierarchy cache */
+  
+  if ((result = [entry cachedHierarchyResults]) != nil)
+    return [self extractFoldersFromResultSet:result];
+  
+  [self debugWithFormat:@"  no folders cached yet .."];
+  
+  /* fetch _all_ folders */
+  
+  result = [[entry client] list:@"INBOX" pattern:@"*"];
+  if (![[result valueForKey:@"result"] boolValue]) {
+    [self logWithFormat:@"ERROR: listing of folder failed!"];
+    return nil;
+  }
+  
+  /* cache results */
+  
+  if ([result isNotNull]) {
+    if (entry == nil) /* required in case the entry was not setup */
+      entry = [self entryForURL:_url];
+    
+    [entry cacheHierarchyResults:result];
+    if (debugCache) {
+      [self logWithFormat:@"cached results in entry %@: 0x%08X(%d)", 
+             entry, result, [result count]];
+    }
+  }
+  
+  /* extract list */
+  return [self extractFoldersFromResultSet:result];
+}
+
 /* messages */
 
 - (NSArray *)fetchUIDsInURL:(NSURL *)_url qualifier:(id)_qualifier
index 1841728ac64c7ccc240eab0b75d07afe93e5ddc1..2f8d172437970ef03d798ff8f5d4bbd587726b29 100644 (file)
@@ -1,6 +1,6 @@
 # Version file
 
-SUBMINOR_VERSION:=52
+SUBMINOR_VERSION:=53
 
 # v0.9.44 requires NGMime    v4.3.194
 # v0.9.41 requires NGMime    v4.3.190
index 3e65ac0cd086c699ef4b88d030cb964be4d9c09a..c3317bce3e926961bd4acf7e54ef8ae212c1bff0 100644 (file)
@@ -1,3 +1,7 @@
+2004-11-11  Helge Hess  <helge.hess@skyrix.com>
+
+       * UIxMailListView.wox: added sample move popup (v0.9.62)
+
 2004-11-09  Helge Hess  <helge.hess@skyrix.com>
 
        * UIxMailListView.m: added support for toggling read/unread flags
index 1b03579067801ed9ee63d1a1f484fd0d798779ac..7ec09272536b71f460012ee9f795ab791e26b83b 100644 (file)
           </tr>
         </var:foreach>
 
-<!-- TODO: fix used tree, treeNavigationNodes is the _wrong_ choice
         <tr class="tableview">
           <td colspan="6" class="tbtv_actcell">
+<!-- TODO: fix used tree, treeNavigationNodes is the _wrong_ choice
             <var:component className="UIxMailMoveToPopUp"
                            const:identifier="moveto"
                            const:callback="moveTo"
                            rootNodes="clientObject.treeNavigationNodes"
             />
+-->
+            <var:popup const:name="moveto" const:id="moveto"
+                       list="clientObject.mailAccountFolder.allFolderPathes"
+                      item="item" value="item" displayString="item" />
           </td>
         </tr>
--->
       </table>
+      
       <span id="selected_uids" style="visibility: hidden;">
       </span>
     </div>
index bf1de0ca349843a3cdf0d3435ac413b1fd30055c..ec331caa6a50157092d9581d6af96294d71dbc6f 100644 (file)
           checked="1"
           read="1"
   ><var:string label:value="MoveTo" const:escapeHTML="NO" /></option>
+
   <var:foreach list="sortedNodes" item="item" >
     <option var:value="itemURL"
             var:onClick="selectItemJS"
             var:otherTagString="itemDisabledValue"
     ><var:string value="itemDisplayString" /></option>
   </var:foreach>
+
   <option value="all" disabled="1" >All</option>
 </select>
\ No newline at end of file
index be4c90df5a4b56f4b5a19196ec43d5ec4dfb8106..04380832a7ef418dd1266842ff3cc2f31d7c6114 100644 (file)
@@ -1,6 +1,6 @@
 # $Id$
 
-SUBMINOR_VERSION:=61
+SUBMINOR_VERSION:=62
 
 # v0.9.50 requires NGMime   v4.3.190
 # v0.9.43 requires NGObjWeb v4.3.73