]> err.no Git - scalable-opengroupware.org/commitdiff
improved WebDAV support
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Thu, 7 Oct 2004 22:50:44 +0000 (22:50 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Thu, 7 Oct 2004 22:50:44 +0000 (22:50 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@369 d1b88da0-ebda-0310-925b-ed51d893ca5b

17 files changed:
SOGo/SoObjects/Mailer/ChangeLog
SOGo/SoObjects/Mailer/SOGoDraftsFolder.m
SOGo/SoObjects/Mailer/SOGoMailAccount.m
SOGo/SoObjects/Mailer/SOGoMailAccounts.m
SOGo/SoObjects/Mailer/SOGoMailFolder.m
SOGo/SoObjects/Mailer/SOGoMailObject.m
SOGo/SoObjects/Mailer/Version
SOGo/SoObjects/SOGo/ChangeLog
SOGo/SoObjects/SOGo/SOGoContentObject.m
SOGo/SoObjects/SOGo/SOGoFolder.m
SOGo/SoObjects/SOGo/SOGoObject.h
SOGo/SoObjects/SOGo/SOGoObject.m
SOGo/SoObjects/SOGo/SOGoUserFolder.m
SOGo/SoObjects/SOGo/Version
SOGoLogic/ChangeLog
SOGoLogic/SOGoAppointment.m
SOGoLogic/Version

index d06d9153ddf26aa3eac24db4262db6d0be484b98..440bfab560d4ffbd4549931c07679d31bc66de99 100644 (file)
@@ -1,3 +1,7 @@
+2004-10-08  Helge Hess  <helge.hess@opengroupware.org>
+
+       * marked collections as WebDAV collections (v0.9.28)
+
 2004-10-06  Helge Hess  <helge.hess@opengroupware.org>
 
        * started SOGoDraftsFolder (v0.9.27)
index 3528bea4a540c6796f870da24d32f520cf7ed79a..bde6c49a1a9a010065471aa12169781f480b25d9 100644 (file)
 
 @implementation SOGoDraftsFolder
 
+/* WebDAV */
+
+- (BOOL)davIsCollection {
+  return YES;
+}
+
 @end /* SOGoDraftsFolder */
index 11f8a3c37995e9be7c3b978ac034994c06e56321..9b2a52d27c474af6bd4dbbeee054e1750c8bbade 100644 (file)
 
 /* WebDAV */
 
+- (BOOL)davIsCollection {
+  return YES;
+}
+
 - (NSString *)shortTitle {
   NSString *s, *login, *host;
   NSRange r;
index cf6e2b49650e542187f9feffe0e951fe32bcd905..0682a40a4c119d6f0e4b752582cfea1175181e21 100644 (file)
   return [self treeNavigationBlockForActiveNode];
 }
 
+/* WebDAV */
+
+- (BOOL)davIsCollection {
+  return YES;
+}
+
 @end /* SOGoMailAccounts */
index b158dc5ff909dcdac53b0a0463eff58cbd909e8b..425389c836763d871b4798aed6c6e1dd2240c98d 100644 (file)
   return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
 }
 
+/* WebDAV */
+
+- (BOOL)davIsCollection {
+  return YES;
+}
+
 @end /* SOGoMailFolder */
index e22a5ca8b10ac501eca7e1c278d721db46a3c477..c3d17e0db4337b8f7d3342cf4761ddd8069e37ff 100644 (file)
@@ -165,4 +165,11 @@ static NSArray *coreInfoKeys = nil;
   return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
 }
 
+/* WebDAV */
+
+- (BOOL)davIsCollection {
+  /* while a mail has child objects, it should appear as a file in WebDAV */
+  return NO;
+}
+
 @end /* SOGoMailObject */
index 9461bed0f2fb385c7656d9d8638cc42bd78b158c..42d0a3b80cd7c5cbc793862161337200792359c1 100644 (file)
@@ -1,3 +1,3 @@
 # $Id$
 
-SUBMINOR_VERSION:=27
+SUBMINOR_VERSION:=28
index b76017e8f83e3336cb027cc430b9ea8d4c60964b..7ea1785ea2c40083dfe4457e9c0d4ff8dfb43269 100644 (file)
@@ -1,3 +1,22 @@
+2004-10-08  Helge Hess  <helge.hess@opengroupware.org>
+
+       * v0.9.21
+
+       * SOGoContentObject.m: added PUTAction:
+
+       * SOGoObject.m: implemented special WebDAV support in GETAction:
+
+       * SOGoFolder.m: added -toOneRelationshipKeys method (enables listing of
+         contained objects in WebDAV), added container name to logging prefix,
+         explicitly mark as WebDAV collection
+
+       * SOGoContentObject.m: mark as WebDAV non-collection
+
+2004-10-07  Helge Hess  <helge.hess@opengroupware.org>
+
+       * SOGoUserFolder.m: added toManyRelationshipKeys, marked as WebDAV
+         collection (v0.9.20)
+
 2004-09-29  Helge Hess  <helge.hess@opengroupware.org>
        
        * SOGoObject.m: added -fetchSubfolders method to resolve all 
index f82d031d128f033505508977dcb5671f7c5eef67..1419b0a268af15dba7dffd98a3d940ecf6cbe733 100644 (file)
   return nil;
 }
 
+/* actions */
+
+- (id)PUTAction:(WOContext *)_ctx {
+  WORequest   *rq;
+  NSException *error;
+  
+  rq = [_ctx request];
+  if ((error = [self saveContentString:[rq contentAsString]]) != nil)
+    return error;
+  
+  // TODO: this should be automatic if we return nil?
+  [[_ctx response] setStatus:201 /* Created */];
+  return [_ctx response];
+}
+
+/* WebDAV */
+
+- (BOOL)davIsCollection {
+  return [self isFolderish];
+}
+
 /* description */
 
 - (void)appendAttributesToDescription:(NSMutableString *)_ms {
index c3fff2fa377f140094fe1b9744c67118040f2e23..ff770364ea65a0fc64ae94b0c76b0e379b086041 100644 (file)
   return self->ocsFolder;
 }
 
+- (NSArray *)fetchContentObjectNames {
+  NSArray     *fields, *records;
+  
+  fields = [NSArray arrayWithObject:@"c_name"];
+  records = [[self ocsFolder] fetchFields:fields matchingQualifier:nil];
+  if (![records isNotNull]) {
+    [self logWithFormat:@"ERROR(%s): fetch failed!", __PRETTY_FUNCTION__];
+    return nil;
+  }
+  if ([records isKindOfClass:[NSException class]])
+    return records;
+  return [records valueForKey:@"cName"];
+}
+
+/* reflection */
+
+- (NSArray *)toOneRelationshipKeys {
+  /* toOneRelationshipKeys are the 'files' contained in a folder */
+  return [self fetchContentObjectNames];
+}
+
+/* WebDAV */
+
+- (BOOL)davIsCollection {
+  return [self isFolderish];
+}
+
 /* description */
 
 - (void)appendAttributesToDescription:(NSMutableString *)_ms {
   [_ms appendFormat:@" ocs=%@", [self ocsPath]];
 }
 
+- (NSString *)loggingPrefix {
+  return [NSString stringWithFormat:@"<0x%08X[%@]:%@>",
+                  self, NSStringFromClass([self class]),
+                  [self nameInContainer]];
+}
+
 @end /* SOGoFolder */
index a79577a521811810882c41cbf26c7439d54e6847..b072828f81eb0af09d092133de43b56216da7895 100644 (file)
@@ -55,7 +55,7 @@
 
 /* hierarchy */
 
-- (NSArray *)fetchSubfolders;
+- (NSArray *)fetchSubfolders; /* uses toManyRelationshipKeys */
 
 /* operations */
 
index 2afabb992407ce8da4ee5028abca12beed48d9cb..b18c9e3b669b1d551dee93f8a936fb835f403c4b 100644 (file)
 #include "SOGoUserFolder.h"
 #include "common.h"
 
+@interface SOGoObject(Content)
+- (NSString *)contentAsString;
+@end
+
 @implementation SOGoObject
 
 - (BOOL)doesRetainContainer {
 - (id)GETAction:(WOContext *)_ctx {
   // TODO: I guess this should really be done by SOPE (redirect to
   //       default method)
+  WORequest  *rq;
   WOResponse *r;
   NSString *uri;
   
-  uri = [[_ctx request] uri];
+  rq = [_ctx request];
+  if ([rq isSoWebDAVRequest]) {
+    if ([self respondsToSelector:@selector(contentAsString)])
+      return [self contentAsString];
+    
+    return [NSException exceptionWithHTTPStatus:502 /* not implemented */
+                       reason:@"no WebDAV GET support?!"];
+  }
+  
+  uri = [rq uri];
   if (![uri hasSuffix:@"/"]) uri = [uri stringByAppendingString:@"/"];
   uri = [uri stringByAppendingString:@"view"];
   
index 9bc1a24a6894bba4c3a4b81244108b6ea9e658ba..96752e3452284cb51e86a12fa7fce2f67969f62f 100644 (file)
   return [self nameInContainer];
 }
 
+/* hierarchy */
+
+- (NSArray *)toManyRelationshipKeys {
+  static NSArray *children = nil;
+  
+  if (children == nil) {
+    children = [[NSArray alloc] initWithObjects:
+                                 @"Calendar", @"Contacts", @"Mail", nil];
+  }
+  return children;
+}
+
 /* ownership */
 
 - (NSString *)ownerInContext:(id)_ctx {
   return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
 }
 
+/* WebDAV */
+
+- (BOOL)davIsCollection {
+  return YES;
+}
+
 @end /* SOGoUserFolder */
index 590c3a2c58997118391876a0466083719b50f8cb..d5b1826cb73dadd0fa306b4f42054942b22a5d43 100644 (file)
@@ -1,3 +1,3 @@
 # $Id: Version 170 2004-08-11 10:45:40Z helge $
 
-SUBMINOR_VERSION:=19
+SUBMINOR_VERSION:=21
index f753756f81c6573fca3158474c15e495d388eef8..271c7d2f1e64ee1ba6f2596a597e6e580c7abbdd 100644 (file)
@@ -1,3 +1,8 @@
+2004-10-08  Helge Hess  <helge.hess@opengroupware.org>
+
+       * SOGoAppointment.m: improved behaviour in some edge condition (the
+         value of the categories being an NSCalendarDate) (v0.9.14)
+
 2004-10-06  Marcus Mueller  <znek@mulle-kybernetik.com>
 
        * v0.9.13
index 114103302b593f6b9b98969680fa9d00435dd2ef..8a664f06dca800a3a56210c18d48759918c9f302 100644 (file)
@@ -205,12 +205,12 @@ static SaxObjectDecoder          *sax   = nil;
   NSString *catString;
   NSArray *cats;
   NSRange r;
-
+  
   catString = [self->event categories];
-  if(!catString) {
+  if (![catString isNotNull])
     return [NSArray array];
-  }
-  r = [catString rangeOfString:@";"];
+  
+  r = [[catString stringValue] rangeOfString:@";"];
   if(r.length > 0) {
     catString = [catString substringToIndex:r.location];
   }
index 9637b5fa76492adc9ea85333941998a6e223827d..dc9886a4cb4122556d50ff257ccc655cdeaa8aed 100644 (file)
@@ -1,5 +1,5 @@
 # $Id$
 
-SUBMINOR_VERSION:=13
+SUBMINOR_VERSION:=14
 
 # v0.9.13 requires libFoundation v1.0.62