]> err.no Git - scalable-opengroupware.org/commitdiff
started body part support
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Sun, 3 Oct 2004 20:36:21 +0000 (20:36 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Sun, 3 Oct 2004 20:36:21 +0000 (20:36 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@349 d1b88da0-ebda-0310-925b-ed51d893ca5b

SOGo/SoObjects/Mailer/ChangeLog
SOGo/SoObjects/Mailer/GNUmakefile
SOGo/SoObjects/Mailer/SOGoMailAccounts.m
SOGo/SoObjects/Mailer/SOGoMailBodyPart.h [new file with mode: 0644]
SOGo/SoObjects/Mailer/SOGoMailBodyPart.m [new file with mode: 0644]
SOGo/SoObjects/Mailer/SOGoMailObject.h
SOGo/SoObjects/Mailer/SOGoMailObject.m
SOGo/SoObjects/Mailer/Version
SOGo/SoObjects/Mailer/product.plist

index 922d85a951cf9d46b838818dcbbc8452299bbd23..9be6b5f4a1cfdd66155fb9e4ab9628388648d928 100644 (file)
@@ -1,9 +1,17 @@
 2004-10-03  Helge Hess  <helge.hess@opengroupware.org>
 
+       * v0.9.21
+       
+       * SOGoMailObject.m: lookup 'number' names as part child objects
+       
+       * added SOGoMailBodyPart as a child object of SOGoMailObject
+       
+       * SOGoMailAccounts.m: changed link generation for active folder
+       
        * v0.9.20
-
+       
        * SOGoMailObject.m: added method to fetch parts
-
+       
        * SOGoMailManager.m: properly select folder prior fetch, added method
          to fetch parts of a single (message) URL
 
index f033de565c14bd1eda1934030303fd8cd5750e79..a372e0015b05c8302e96762de5ed2a0ea0ff1908 100644 (file)
@@ -16,6 +16,7 @@ Mailer_OBJC_FILES += \
        SOGoMailAccount.m       \
        SOGoMailFolder.m        \
        SOGoMailObject.m        \
+       SOGoMailBodyPart.m      \
 
 Mailer_RESOURCE_FILES += \
        Version         \
index aca3fc7fd3deaddd7b4fa7bfebb355beab438d60..cf6e2b49650e542187f9feffe0e951fe32bcd905 100644 (file)
   [md setObject:[NSNumber numberWithBool:YES] forKey:@"isPathNode"];
   [md setObject:[self davDisplayName]         forKey:@"title"];
   [md setObject:[self nameInContainer]        forKey:@"name"];
-  [md setObject:@"."                          forKey:@"link"];
+  [md setObject:[@"../" stringByAppendingString:[self nameInContainer]]
+      forKey:@"link"];
   if ([blocks count] > 0)
     [md setObject:blocks forKey:@"children"];
   return md;
diff --git a/SOGo/SoObjects/Mailer/SOGoMailBodyPart.h b/SOGo/SoObjects/Mailer/SOGoMailBodyPart.h
new file mode 100644 (file)
index 0000000..cd2eb99
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+  Copyright (C) 2004 SKYRIX Software AG
+
+  This file is part of OpenGroupware.org.
+
+  OGo is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with OGo; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
+
+#ifndef __Mailer_SOGoMailBodyPart_H__
+#define __Mailer_SOGoMailBodyPart_H__
+
+#include <Mailer/SOGoMailBaseObject.h>
+
+/*
+  SOGoMailBodyPart
+    Parent object: SOGoMailObject or SOGoMailBodyPart
+    Child objects: SOGoMailBodyPart's
+    
+  Represents a MIME part of a mail as retrieved using IMAP4 body structure
+  commands in NGImap4.
+*/
+
+@interface SOGoMailBodyPart : SOGoMailBaseObject
+{
+}
+
+@end
+
+#endif /* __Mailer_SOGoMailBodyPart_H__ */
diff --git a/SOGo/SoObjects/Mailer/SOGoMailBodyPart.m b/SOGo/SoObjects/Mailer/SOGoMailBodyPart.m
new file mode 100644 (file)
index 0000000..8a66834
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+  Copyright (C) 2004 SKYRIX Software AG
+
+  This file is part of OpenGroupware.org.
+
+  OGo is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with OGo; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
+
+#include "SOGoMailBodyPart.h"
+#include "SOGoMailObject.h"
+#include "common.h"
+
+@implementation SOGoMailBodyPart
+
+- (void)dealloc {
+  [super dealloc];
+}
+
+/* hierarchy */
+
+- (SOGoMailObject *)mailObject {
+  return [[self container] mailObject];
+}
+
+/* name lookup */
+
+- (id)lookupImap4BodyPartKey:(NSString *)_key inContext:(id)_ctx {
+  // TODO: we might want to check for existence prior controller creation
+  return [[[SOGoMailBodyPart alloc] initWithName:_key 
+                                   inContainer:self] autorelease];
+}
+
+- (id)lookupName:(NSString *)_key inContext:(id)_ctx acquire:(BOOL)_flag {
+  id obj;
+  
+  /* first check attributes directly bound to the application */
+  if ((obj = [super lookupName:_key inContext:_ctx acquire:NO]) != nil)
+    return obj;
+  
+  /* lookup body part */
+  
+  if ((obj = [self lookupImap4BodyPartKey:_key inContext:_ctx]) != nil)
+    return obj;
+  
+  /* return 404 to stop acquisition */
+  return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
+}
+
+@end /* SOGoMailBodyPart */
index 9cb4ab1a0783da098b4bdc98980c2267bac4a4dd..ae45d58fa3e2c22f8af25d0d00669490d080ba8e 100644 (file)
 /*
   SOGoMailObject
     Parent object: the SOGoMailFolder
-    Child objects: none (maybe SOGoMailAttachments?)
+    Child objects: SOGoMailBodyPart's
   
-  Represents a single mail as retrieved using NGImap4.
+  Represents a single mail as retrieved using NGImap4. Since IMAP4 can parse
+  MIME structures on the server side, which we map into child objects of the
+  message.
+  The child objects are accessed using integer IDs, eg:
+    /INBOX/12345/1/2/3
+  would address the MIME part 1.2.3 of the mail 12345 in the folder INBOX.
 */
 
 @interface SOGoMailObject : SOGoMailBaseObject
@@ -39,7 +44,7 @@
 
 /* message */
 
-- (id)fetchParts:(NSArray *)_parts;
+- (id)fetchParts:(NSArray *)_parts; /* Note: 'parts' are fetch keys here */
 
 @end
 
index 603ea64ac9bccda93f5ddaf1ee5a06a30968c91e..072fdb62472bfbb7398aaf2f893fedc05a1963a9 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "SOGoMailObject.h"
 #include "SOGoMailManager.h"
+#include "SOGoMailBodyPart.h"
 #include "common.h"
 
 @implementation SOGoMailObject
   return [self nameInContainer];
 }
 
+/* hierarchy */
+
+- (SOGoMailObject *)mailObject {
+  return self;
+}
+
 /* message */
 
 - (id)fetchParts:(NSArray *)_parts {
                             password:[self imap4Password]];
 }
 
+/* name lookup */
+
+- (BOOL)isBodyPartKey:(NSString *)_key inContext:(id)_ctx {
+  /*
+    Every key starting with a digit is consider an IMAP4 mime part key.
+  */
+  if ([_key length] == 0)
+    return NO;
+  
+  if (isdigit([_key characterAtIndex:0]))
+    return YES;
+  
+  return NO;
+}
+
+- (id)lookupImap4BodyPartKey:(NSString *)_key inContext:(id)_ctx {
+  // TODO: we might want to check for existence prior controller creation
+  return [[[SOGoMailBodyPart alloc] initWithName:_key 
+                                   inContainer:self] autorelease];
+}
+
+- (id)lookupName:(NSString *)_key inContext:(id)_ctx acquire:(BOOL)_flag {
+  id obj;
+  
+  /* first check attributes directly bound to the application */
+  if ((obj = [super lookupName:_key inContext:_ctx acquire:NO]) != nil)
+    return obj;
+  
+  /* lookup body part */
+  
+  if ([self isBodyPartKey:_key inContext:_ctx]) {
+    if ((obj = [self lookupImap4BodyPartKey:_key inContext:_ctx]) != nil)
+      return obj;
+  }
+  
+  /* return 404 to stop acquisition */
+  return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
+}
+
 @end /* SOGoMailObject */
index 7cb001acfe53aa2f6319d40435bdf0120783297d..49f242e531df55a4ec8619c8424bdc414d69e19a 100644 (file)
@@ -1,3 +1,3 @@
 # $Id$
 
-SUBMINOR_VERSION:=20
+SUBMINOR_VERSION:=21
index 539c0e8c078964550a10c9a525cd989bd653bc8b..2060eae8e4f72027ed07d1bf78857461663e42a1 100644 (file)
@@ -27,5 +27,9 @@
     SOGoMailObject = {
       superclass    = "SOGoMailBaseObject";
     };
+    
+    SOGoMailBodyPart = {
+      superclass    = "SOGoMailBaseObject";
+    };
   };
 }