]> err.no Git - scalable-opengroupware.org/commitdiff
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1101 d1b88da0-ebda-0310...
authorwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Tue, 10 Jul 2007 19:27:48 +0000 (19:27 +0000)
committerwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Tue, 10 Jul 2007 19:27:48 +0000 (19:27 +0000)
42 files changed:
ChangeLog
NEWS
OGoContentStore/OCSContactFieldExtractor.m
OGoContentStore/OCSiCalFieldExtractor.m
OGoContentStore/common.h [deleted file]
OGoContentStore/iCalEntityObject+OCS.m
OGoContentStore/iCalRepeatableEntityObject+OCS.m
OGoContentStore/test_quick_extract.m
SOPE/NGCards/ChangeLog
SOPE/NGCards/iCalToDo.m
SoObjects/Appointments/common.h
SoObjects/Contacts/common.h
SoObjects/Mailer/Product.m
SoObjects/Mailer/SOGoCalendarMailBodyPart.m
SoObjects/Mailer/SOGoDraftObject.m
SoObjects/Mailer/SOGoDraftsFolder.m
SoObjects/Mailer/SOGoImageMailBodyPart.m
SoObjects/Mailer/SOGoMailAccount.m
SoObjects/Mailer/SOGoMailBaseObject.m
SoObjects/Mailer/SOGoMailBodyPart.m
SoObjects/Mailer/SOGoMailFolder.m
SoObjects/Mailer/SOGoMailObject.h
SoObjects/Mailer/SOGoMailObject.m
SoObjects/Mailer/SOGoMessageMailBodyPart.m
SoObjects/Mailer/SOGoSharedInboxFolder.m
SoObjects/Mailer/SOGoSharedMailAccount.m
SoObjects/Mailer/SOGoVCardMailBodyPart.m
SoObjects/Mailer/common.h
SoObjects/SOGo/NSString+Utilities.m
SoObjects/SOGo/SOGoAuthenticator.h
SoObjects/SOGo/SOGoAuthenticator.m
SoObjects/Sieve/common.h
UI/Common/common.h
UI/Contacts/common.h
UI/MailPartViewers/common.h
UI/MailerUI/common.h
UI/MainUI/common.h
UI/SOGoUI/common.h
UI/Scheduler/UIxTaskEditor.m
UI/Scheduler/common.h
UI/WebServerResources/SchedulerUI.js
UI/WebServerResources/UIxTaskEditor.js

index f64b2b057f53051a9f5bbe2803068ecd36a70923..607614a8dbf57a092c2dc1988ffee8714f4561ea 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2007-07-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
+       -imap4URL]): rewrote method to support accented mailbox names.
+       ([SOGoMailBaseObject imap4Password]): rewrote to simply use
+       SOGoAuthenticator's passwordInContext:.
+
+       * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
+       -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
+       start and due dates to nil if hasStartDate and hasDueDate are
+       false.
+
+       * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
+       -passwordInContext:context]): made method public.
+
+       * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
+       -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
+       to false to avoid a null violation.
+
 2007-07-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
 
        * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
diff --git a/NEWS b/NEWS
index ab0830fb78212ceb2e3b38e452b45b92cb35ed08..e003261cc286843d4e7ea9d4ad4cdc44560509b7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,17 @@
 0.9.0 (200707XX)
 ----------------
-- added the ability to specify a super user through the SOGoSuperUsername user default;
+- added the ability to specify a super user through the SOGoSuperUsername user
+  default; 
 - added the ability to view the message source;
 - no longer autocreate folders if we are not their owners;
 - made compatible with PostgreSQL 8.2;
 - the months and years menus of the date selector would no longer appear;
+- fixed a bug which would produce task SQL records which would violate
+  non-null constraints on the quick calendar tables;
+- it was impossible to reset the start and the due date in the task editor
+  whenever they were set once;
+- imap folders with non-ascii characters are now correctly accessed;
+
+Local variables:
+mode: text
+End:
index 675ea7e8d181700a85b878b6fd001dd066939e13..f1f6a56b838baf5b3e6637df3fb68ca580db8eea 100644 (file)
   02111-1307, USA.
 */
 
+#import <Foundation/NSArray.h>
+#import <Foundation/NSDictionary.h>
+#import <NGExtensions/NSObject+Logs.h>
+
 #import <GDLContentStore/GCSFieldExtractor.h>
 #import <NGCards/NGVCard.h>
-#import "common.h"
 
 @interface OCSContactFieldExtractor : GCSFieldExtractor
 @end
index 9b8678f784a1ec5f6c667dc286243ffc2c6657bc..9a6188d199ab23c85bc9c3a6c4df196e6d3becbd 100644 (file)
   02111-1307, USA.
 */
 
-#include "OCSiCalFieldExtractor.h"
-#include "common.h"
-#include <NGCards/NGCards.h>
-#include "iCalEntityObject+OCS.h"
-#include "iCalRepeatableEntityObject+OCS.h"
+#import <Foundation/NSCalendarDate.h>
+#import <Foundation/NSNull.h>
+#import <Foundation/NSString.h>
+#import <Foundation/NSValue.h>
+
+#import <NGExtensions/NSNull+misc.h>
+#import <NGExtensions/NSObject+Logs.h>
+
+#import "iCalEntityObject+OCS.h"
+#import "iCalRepeatableEntityObject+OCS.h"
+
+#import "OCSiCalFieldExtractor.h"
 
 @implementation OCSiCalFieldExtractor
 
@@ -250,6 +257,11 @@ static NSNumber *distantFutureNumber = nil;
   [row setObject:[NSNumber numberWithInt:[_task priorityNumber]]
        forKey: @"priority"];
 
+  [row setObject: [NSNumber numberWithBool: NO]
+       forKey: @"isallday"];
+  [row setObject: [NSNumber numberWithBool: NO]
+       forKey: @"isopaque"];
+
   if ([title isNotNull]) [row setObject: title forKey: @"title"];
   if ([location isNotNull]) [row setObject: location forKey: @"location"];
   if ([sequence isNotNull]) [row setObject: sequence forKey: @"sequence"];
@@ -342,14 +354,12 @@ static NSNumber *distantFutureNumber = nil;
 }
 
 - (NSMutableDictionary *)extractQuickFieldsFromContent:(NSString *)_content {
-  NSAutoreleasePool *pool;
   NSDictionary *fields;
   id cal;
  
   if ([_content length] == 0)
     return nil;
 
-  pool = [[NSAutoreleasePool alloc] init];
   cal = [iCalCalendar parseSingleFromSource: _content];
  
   fields = nil;
@@ -370,8 +380,6 @@ static NSNumber *distantFutureNumber = nil;
   else
     [self logWithFormat: @"ERROR: parsing source didn't return anything"];
 
-  [pool release];
   return [fields autorelease];
 }
 
diff --git a/OGoContentStore/common.h b/OGoContentStore/common.h
deleted file mode 100644 (file)
index 8dde8af..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-  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.
-*/
-// $Id$
-
-#import <Foundation/Foundation.h>
-#import <Foundation/NSURL.h>
-
-#include <NGExtensions/NGExtensions.h>
-
-#if NeXT_RUNTIME || APPLE_RUNTIME
-#  define objc_free(__mem__)    free(__mem__)
-#  define objc_malloc(__size__) malloc(__size__)
-#  define objc_calloc(__cnt__, __size__) calloc(__cnt__, __size__)
-#  define objc_realloc(__ptr__, __size__) realloc(__ptr__, __size__)
-#  ifndef sel_eq
-#    define sel_eq(sela,selb) (sela==selb?YES:NO)
-#  endif
-#endif
index 6ff911c88fb6f6c1075e0aebbfaca7007f404afe..e95f8484dd7f8e1958fb286ee2e8f7d664740937 100644 (file)
@@ -19,8 +19,7 @@
  02111-1307, USA.
 */
 
-#include "iCalEntityObject+OCS.h"
-#include "common.h"
+#import "iCalEntityObject+OCS.h"
 
 @implementation iCalEntityObject (OCS)
 
index 5bedb6e2d1f1f794c24e4add758e8796871071b6..191a44035bfb3937cdd23a82eb0e1ae5fea818a4 100644 (file)
   02111-1307, USA.
 */
 
-#include "iCalRepeatableEntityObject+OCS.h"
-#include "common.h"
+#import <Foundation/NSArray.h>
+#import <Foundation/NSDictionary.h>
+
+#import "iCalRepeatableEntityObject+OCS.h"
 
 @implementation iCalRepeatableEntityObject (OCS)
 
index b2e46796c74a8cf2f66416920dfeca4ba1fbc709..eb728f83394cc0248068fd53e5866adc66520caa 100644 (file)
 */
 
 
+#import <Foundation/NSArray.h>
+#import <Foundation/NSAutoreleasePool.h>
 #import <Foundation/NSObject.h>
+#import <Foundation/NSProcessInfo.h>
+#import <Foundation/NSString.h>
 
-@class NSArray;
+#import <NGExtensions/NSProcessInfo+misc.h>
+
+#import <GDLContentStore/GCSFieldExtractor.h>
 
 @interface TestQuickExtract : NSObject
 
@@ -30,9 +36,6 @@
 
 @end
 
-#include <GDLContentStore/GCSFieldExtractor.h>
-#include "common.h"
-
 @implementation TestQuickExtract
 
 - (int)usage:(NSArray *)_args {
index 1431e6f254646365177dac0a7bd1b7ac95d8ba73..911fbddf5a07a8c8433050c91984eb7730164121 100644 (file)
@@ -1,3 +1,9 @@
+2007-07-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * iCalToDo.m ([iCalToDo -setDue:newDueDate]): use setDateTime:
+       instead of setDate: because the latter sets an "all day"
+       timestamp.
+
 2007-07-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
 
        * iCalRecurrenceRule.m ([iCalRecurrenceRule
index 0319f2d658255e02c05d49e70d5d555f6812b545..915589b748d67e153db292a1332d81f461a0bc25 100644 (file)
@@ -59,7 +59,7 @@
 - (void) setDue: (NSCalendarDate *) newDueDate
 {
   [(iCalDateTime *) [self uniqueChildWithTag: @"due"]
-                   setDate: newDueDate];
+                   setDateTime: newDueDate];
 }
 
 - (NSCalendarDate *) due
index acd6f20fa6c498468ff57cdf3c24b2f94fb9669e..c3c5c3aef656f565d1db3062336bfa37d3357d4d 100644 (file)
@@ -29,3 +29,5 @@
 #include <NGExtensions/NGExtensions.h>
 #include <NGObjWeb/NGObjWeb.h>
 #include <NGObjWeb/SoObjects.h>
+
+#warning importing common.h is baaad
index e213fd7583143adb0ac9c7b0a072678c8358ecd9..d22e20bfd85cad1927146e9c5d504633ab01d044 100644 (file)
@@ -31,3 +31,4 @@
 #include <NGObjWeb/NGObjWeb.h>
 #include <NGObjWeb/SoObjects.h>
 
+#warning importing common.h is baaad
index f53e63f7b03a8c548d133d2f93f2df8ca460eea9..e870692629bb251fd442cbbd99650a737fafb0b3 100644 (file)
@@ -18,7 +18,6 @@
   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.
 */
-// $Id$
 
 #import <Foundation/NSObject.h>
 
index b001b8b7560a72ad331ee6641a28be84724b5b92..714c0bc455b182671b751db523dc3edcb1c0fcec 100644 (file)
 
 @implementation SOGoCalendarMailBodyPart
 
-+ (int)version {
-  return [super version] + 0 /* v1 */;
-}
-
-+ (void)initialize {
-  NSAssert2([super version] == 1,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-}
-
 @end /* SOGoCalendarMailBodyPart */
index 92e99648fe2796f9dd3ffe95db6f61493f45f77c..8bd8ab98ede049773c66f3531de13fda9b67e2aa 100644 (file)
@@ -88,17 +88,9 @@ static BOOL        draftDeleteDisabled = NO; // for debugging
 static BOOL        debugOn = NO;
 static BOOL        showTextAttachmentsInline  = NO;
 
-+ (int)version {
-  return [super version] + 0 /* v1 */;
-}
-
 + (void)initialize {
   NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
   
-  NSAssert2([super version] == 1,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-  
   /* Note: be aware of the charset issues before enabling this! */
   showTextAttachmentsInline = [ud boolForKey:@"SOGoShowTextAttachmentsInline"];
   
index 001953747d7f0acb3d15f510e129848d0d69b94b..13655da0d22bee7e8c8f8e3c2504fc665fa88b38 100644 (file)
 
 static NSString *spoolFolder = nil;
 
-+ (int)version {
-  return [super version] + 0 /* v1 */;
-}
-
 + (void)initialize {
   NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
 
-  NSAssert2([super version] == 1,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-  
   spoolFolder = [[ud stringForKey:@"SOGoMailSpoolPath"] copy];
   if ([spoolFolder length] < 3)
     spoolFolder = @"/tmp/";
index b2b94ff23d32b333a653c2d25061ba6a4e985d06..0319ac0010e24bfc2b07dd4db5ff409fff757fe1 100644 (file)
 
 @implementation SOGoImageMailBodyPart
 
-+ (int)version {
-  return [super version] + 0 /* v1 */;
-}
-
-+ (void)initialize {
-  NSAssert2([super version] == 1,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-}
-
 @end /* SOGoImageMailBodyPart */
index be0cea9f47a9ec1d8c9b7707cdd5492de9eb0e2a..b82b1451bb1e59d9f37d282bd5746cf566abb091 100644 (file)
@@ -37,18 +37,10 @@ static NSString *sharedFolderName     = @""; // TODO: add English default
 static NSString *otherUsersFolderName = @""; // TODO: add English default
 static BOOL     useAltNamespace       = NO;
 
-+ (int)version {
-  return [super version] + 0 /* v1 */;
-}
-
 + (void)initialize {
   NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
   NSString *cfgDraftsFolderName;
 
-  NSAssert2([super version] == 1,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-  
   useAltNamespace = [ud boolForKey:@"SOGoSpecialFoldersInRoot"];
   
   sharedFolderName     = [ud stringForKey:@"SOGoSharedFolderName"];
@@ -183,48 +175,29 @@ static BOOL     useAltNamespace       = NO;
   return [creds objectAtIndex:0]; /* the user */
 }
 
-- (NSString *)imap4URLString {
+- (NSMutableString *) imap4URLString
+{
   /* private, overridden by SOGoSharedMailAccount */
-  NSString *s;
-  NSRange  r;
-  
-  s = [self nameInContainer];
-  r = [s rangeOfString:@"@"];
-  if (r.length == 0) {
-    NSString *u;
-    
-    u = [self imap4LoginFromHTTP];
-    if ([u length] == 0) {
-      [self errorWithFormat:@"missing login in account folder name: %@", s];
-      return nil;
-    }
-    s = [[u stringByAppendingString:@"@"] stringByAppendingString:s];
-  }
-  if ([s hasSuffix:@":80"]) { // HACK
-    [self logWithFormat:@"WARNING: incorrect value for IMAP4 URL: '%@'", s];
-    s = [s substringToIndex:([s length] - 3)];
-  }
-  
-  s = [([self useSSL] ? @"imaps://" : @"imap://") stringByAppendingString:s];
-  s = [s stringByAppendingString:@"/"];
-  return s;
-}
+  NSMutableString *urlString;
+  NSString *host;
 
-- (NSURL *)imap4URL {
-  /* imap://agenortest@mail.opengroupware.org/ */
-  NSString *s;
-  
-  if (self->imap4URL != nil)
-    return self->imap4URL;
+  urlString = [NSMutableString string];
 
-  if ((s = [self imap4URLString]) == nil)
-    return nil;
-  
-  self->imap4URL = [[NSURL alloc] initWithString:s];
-  return self->imap4URL;
+  if ([self useSSL])
+    [urlString appendString: @"imaps://"];
+  else
+    [urlString appendString: @"imap://"];
+
+  host = [self nameInContainer];
+  if (![host rangeOfString: @"@"].length)
+    [urlString appendFormat: @"%@@", [self imap4LoginFromHTTP]];
+  [urlString appendFormat: @"%@/", host];
+
+  return urlString;
 }
 
-- (NSString *)imap4Login {
+- (NSString *) imap4Login
+{
   return [[self imap4URL] user];
 }
 
@@ -331,22 +304,22 @@ static BOOL     useAltNamespace       = NO;
   // TODO: use some profile to determine real location, use a -traverse lookup
   SOGoMailFolder *folder;
   
-  if (self->inboxFolder != nil)
-    return self->inboxFolder;
+  if (inboxFolder != nil)
+    return inboxFolder;
   
   folder = [self lookupName:[self inboxFolderNameInContext:_ctx]
                 inContext:_ctx acquire:NO];
   if ([folder isKindOfClass:[NSException class]]) return folder;
   
-  return ((self->inboxFolder = [folder retain]));
+  return ((inboxFolder = [folder retain]));
 }
 
 - (SOGoMailFolder *)sentFolderInContext:(id)_ctx {
   // TODO: use some profile to determine real location, use a -traverse lookup
   SOGoMailFolder *folder;
   
-  if (self->sentFolder != nil)
-    return self->sentFolder;
+  if (sentFolder != nil)
+    return sentFolder;
   
   folder = useAltNamespace ? (id)self : [self inboxFolderInContext:_ctx];
   if ([folder isKindOfClass:[NSException class]]) return folder;
@@ -360,15 +333,15 @@ static BOOL     useAltNamespace       = NO;
                        reason:@"did not find Sent folder!"];
   }
   
-  return ((self->sentFolder = [folder retain]));
+  return ((sentFolder = [folder retain]));
 }
 
 - (SOGoMailFolder *)trashFolderInContext:(id)_ctx {
   // TODO: use some profile to determine real location
   SOGoMailFolder *folder;
   
-  if (self->trashFolder != nil)
-    return self->trashFolder;
+  if (trashFolder != nil)
+    return trashFolder;
   
   folder = useAltNamespace ? (id)self : [self inboxFolderInContext:_ctx];
   if ([folder isKindOfClass:[NSException class]]) return folder;
@@ -382,7 +355,7 @@ static BOOL     useAltNamespace       = NO;
                        reason:@"did not find Trash folder!"];
   }
   
-  return ((self->trashFolder = [folder retain]));
+  return ((trashFolder = [folder retain]));
 }
 
 /* WebDAV */
index af97cb7c2a779c7c959f08ca02c82fbf8a27c6f2..4ba1c62cadffbdce6c5ea50358831da8c23ec985 100644 (file)
   02111-1307, USA.
 */
 
-#include "SOGoMailBaseObject.h"
-#include "SOGoMailManager.h"
-#include "common.h"
-#include <NGObjWeb/SoObject+SoDAV.h>
-#include <NGObjWeb/SoHTTPAuthenticator.h>
-#include <NGExtensions/NSURL+misc.h>
+#import <NGObjWeb/SoObject+SoDAV.h>
+#import <NGObjWeb/SoHTTPAuthenticator.h>
+#import <NGExtensions/NSNull+misc.h>
+#import <NGExtensions/NSObject+Logs.h>
+#import <NGExtensions/NSString+misc.h>
+#import <NGExtensions/NSURL+misc.h>
 
-@implementation SOGoMailBaseObject
+#import <SoObjects/SOGo/SOGoAuthenticator.h>
 
-+ (int)version {
-  return [super version] + 1 /* v1 */;
-}
-+ (void)initialize {
-  NSAssert2([super version] == 0,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-}
+#import "SOGoMailManager.h"
+
+#import "SOGoMailBaseObject.h"
+
+@implementation SOGoMailBaseObject
 
 #if 0
 static BOOL debugOn = YES;
 #endif
 
-- (id)initWithImap4URL:(NSURL *)_url inContainer:(id)_container {
+- (id) initWithImap4URL: (NSURL *) _url
+           inContainer: (id) _container
+{
   NSString *n;
   
   n = [[_url path] lastPathComponent];
-  if ((self = [self initWithName:n inContainer:_container])) {
-    self->imap4URL = [_url retain];
-  }
+  if ((self = [self initWithName: n inContainer:_container]))
+    {
+      imap4URL = [_url retain];
+    }
+
   return self;
 }
 
-- (void)dealloc {
-  [self->imap4URL release];
+- (void) dealloc
+{
+  [imap4URL release];
   [super dealloc];
 }
 
 /* hierarchy */
 
-- (SOGoMailAccount *)mailAccountFolder {
-  if (![[self container] respondsToSelector:_cmd]) {
-    [self warnWithFormat:@"weird container of mailfolder: %@",
-            [self container]];
-    return nil;
-  }
+- (SOGoMailAccount *) mailAccountFolder
+{
+  SOGoMailAccount *folder;
+
+  if ([container respondsToSelector:_cmd])
+    folder = [container mailAccountFolder];
+  else
+    {
+      [self warnWithFormat: @"weird container of mailfolder: %@",
+           container];
+      folder = nil;
+    }
   
-  return [[self container] mailAccountFolder];
+  return folder;
 }
 
-- (SOGoMailAccounts *)mailAccountsFolder {
+- (SOGoMailAccounts *) mailAccountsFolder
+{
   id o;
-  
-  for (o = [self container]; [o isNotNull]; o = [o container]) {
-    if ([o isKindOfClass:NSClassFromString(@"SOGoMailAccounts")])
-      return o;;
-  }
-  return nil;
+  SOGoMailAccounts *folder;
+  Class folderClass;
+
+  folder = nil;
+
+  folderClass = NSClassFromString (@"SOGoMailAccounts");
+  o = container;
+  while (!folder && [o isNotNull])
+    if ([o isKindOfClass: folderClass])
+      folder = o;
+    else
+      o = [o container];
+
+  return o;
 }
 
 /* IMAP4 */
 
-- (NGImap4ConnectionManager *)mailManager {
+- (NGImap4ConnectionManager *) mailManager
+{
   return [NGImap4ConnectionManager defaultConnectionManager];
 }
-- (NGImap4Connection *)imap4Connection {
-  if (self->imap4 == nil) {
-    self->imap4 = [[[self mailManager] connectionForURL:[self imap4URL] 
-                                      password:[self imap4Password]] retain];
-    if (self->imap4 == nil) {
-      [self errorWithFormat:@"Could not connect IMAP4."];
-      self->imap4 = [[NSNull null] retain];
+
+- (NGImap4Connection *) imap4Connection
+{
+  if (!imap4)
+    {
+      imap4 = [[self mailManager] connectionForURL: [self imap4URL] 
+                                 password: [self imap4Password]];
+      if (imap4)
+       [imap4 retain];
+      else
+       [self errorWithFormat:@"Could not connect IMAP4."];
     }
-  }
-  return [self->imap4 isNotNull] ? self->imap4 : nil;
+
+  return imap4;
 }
 
-- (NSString *)relativeImap4Name {
-  [self warnWithFormat:@"subclass should override %@", 
-         NSStringFromSelector(_cmd)];
+- (NSString *) relativeImap4Name
+{
+  [self subclassResponsibility: _cmd];
+
   return nil;
 }
-- (NSURL *)baseImap4URL {
-  if (![[self container] respondsToSelector:@selector(imap4URL)]) {
-    [self warnWithFormat:@"container does not implement -imap4URL!"];
-    return nil;
-  }
+
+- (NSURL *) baseImap4URL
+{
+  NSURL *url;
+
+  if ([container respondsToSelector:@selector(imap4URL)])
+    url = [container imap4URL];
+  else
+    {
+      [self warnWithFormat:@"container does not implement -imap4URL!"];
+      url = nil;
+    }
   
-  return [[self container] imap4URL];
+  return url;
 }
-- (NSURL *)imap4URL {
-  NSString *sn;
-  NSURL    *base;
-  
-  if (self->imap4URL != nil) 
-    return self->imap4URL;
-  
-  if ((sn = [self relativeImap4Name]) == nil)
-    return nil;
-  
-  if (![[self container] respondsToSelector:_cmd]) {
-    [self warnWithFormat:@"container does not implement -imap4URL!"];
-    return nil;
-  }
-  
-  if ((base = [self baseImap4URL]) == nil)
-    return nil;
-  
-  sn = [[base path] stringByAppendingPathComponent:sn];
-  self->imap4URL = [[NSURL alloc] initWithString:sn relativeToURL:base];
-  return self->imap4URL;
+
+- (NSMutableString *) imap4URLString
+{
+  NSMutableString *urlString;
+
+  urlString = [container imap4URLString];
+  [urlString appendFormat: @"%@/", [nameInContainer stringByEscapingURL]];
+
+  return urlString;
 }
 
-- (NSString *)imap4Login {
-  if (![[self container] respondsToSelector:_cmd])
+- (NSURL *) imap4URL
+{
+  /* this could probably be handled better from NSURL but it's buggy in
+     GNUstep */
+  if (!imap4URL)
+    {
+      imap4URL = [[NSURL alloc] initWithString: [self imap4URLString]];
+    }
+
+  return imap4URL;
+}
+
+- (NSString *) imap4Login
+{
+  if (![container respondsToSelector:_cmd])
     return nil;
   
-  return [[self container] imap4Login];
+  return [container imap4Login];
 }
-- (NSString *)imap4Password {
+
+- (NSString *) imap4Password
+{
   /*
     Extract password from basic authentication.
     
@@ -145,22 +178,8 @@ static BOOL debugOn = YES;
     a) move the primary code to SOGoMailAccount
     b) cache the password
   */
-  WORequest *rq;
-  NSString  *auth;
-  NSArray   *creds;
-  
-  rq = [context request];
-  if ((auth = [rq headerForKey:@"authorization"]) == nil) {
-    /* no basic auth */
-    return nil;
-  }
-  
-  creds = [SoHTTPAuthenticator parseCredentials:auth];
-  if ([creds count] < 2)
-    /* somehow invalid */
-    return nil;
-  
-  return [creds objectAtIndex:1]; /* the password */
+
+  return [[self authenticatorInContext: context] passwordInContext: context];
 }
 
 - (void)flushMailCaches {
index ddad7dffa350b2c6831bd93bf45e830b6f15b76d..ec10200f2165b8d8bc9c0a1c4823448c781612fe 100644 (file)
 static NSString *mailETag = nil;
 static BOOL debugOn = NO;
 
-+ (int)version {
-  return [super version] + 0 /* v1 */;
-}
-
-+ (void)initialize {
++ (void) initialize
+{
   NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
   
-  NSAssert2([super version] == 1,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-  
   if (![[ud objectForKey:@"SOGoMailDisableETag"] boolValue]) {
     mailETag = [[NSString alloc] initWithFormat:@"\"imap4url_%d_%d_%03d\"",
                                 UIX_MAILER_MAJOR_VERSION,
index 68c7467896a046d1ac94f94d49bb5353052f2699..ab951bda192d58c8e9e0fe06d360642e44bcdeeb 100644 (file)
@@ -46,19 +46,10 @@ static NSString *defaultUserID =  @"anyone";
 
 static BOOL useAltNamespace = NO;
 
-+ (int) version
-{
-  return [super version] + 0 /* v1 */;
-}
-
 + (void) initialize
 {
   NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
 
-  NSAssert2([super version] == 1,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-  
   useAltNamespace = [ud boolForKey:@"SOGoSpecialFoldersInRoot"];
 }
 
@@ -111,7 +102,7 @@ static BOOL useAltNamespace = NO;
 
 - (NSString *) relativeImap4Name
 {
-  return [self nameInContainer];
+  return nameInContainer;
 }
 
 /* listing the available folders */
@@ -269,10 +260,12 @@ static BOOL useAltNamespace = NO;
   /* check whether URL exists */
   
   sf = [self imap4URL];
-  sf = [NSURL URLWithString:[[sf path] stringByAppendingPathComponent:_key]
-             relativeToURL:sf];
+  sf = [NSURL URLWithString: _key relativeToURL: sf];
+
+// -  sf = [NSURL URLWithString:[[sf path] stringByAppendingPathComponent:_key]
+// -         relativeToURL:sf];
   
-  if (![[self imap4Connection] doesMailboxExistAtURL:sf]) {
+  if (![[self imap4Connection] doesMailboxExistAtURL: sf]) {
     /* 
        We may not return 404, confuses path traversal - but we still do in the
        calling method. Probably the traversal process should be fixed to
@@ -360,9 +353,11 @@ static BOOL useAltNamespace = NO;
   /* build IMAP4 URL for target */
   
   destImapURL = [_target imap4URL];
-  destImapURL = [NSURL URLWithString:[[destImapURL path] 
-                                      stringByAppendingPathComponent:_name]
-                      relativeToURL:destImapURL];
+// -  destImapURL = [NSURL URLWithString:[[destImapURL path] 
+// -                                  stringByAppendingPathComponent:_name]
+// -                  relativeToURL:destImapURL];
+  destImapURL = [NSURL URLWithString: _name
+                      relativeToURL: destImapURL];
   
   [self logWithFormat:@"TODO: should move collection as '%@' to: %@",
        [[self imap4URL] absoluteString], 
@@ -398,8 +393,8 @@ static BOOL useAltNamespace = NO;
     return folderType;
   
   account = [self mailAccountFolder];
-  n       = [self nameInContainer];
-  
+  n = nameInContainer;
+
   if ([n isEqualToString:[account trashFolderNameInContext:nil]])
     folderType = @"IPF.Trash";
   else if ([n isEqualToString:[account inboxFolderNameInContext:nil]])
index 7e46daadd62e182b4ead508eb804eb42d33665d3..72dae38852c86934c7df8c4ad2b1edcdcd3ddc0d 100644 (file)
@@ -22,7 +22,7 @@
 #ifndef __Mailer_SOGoMailObject_H__
 #define __Mailer_SOGoMailObject_H__
 
-#include <SoObjects/Mailer/SOGoMailBaseObject.h>
+#import <SoObjects/Mailer/SOGoMailBaseObject.h>
 
 /*
   SOGoMailObject
index 29c6a0ea7789d148253865d8f47033b082ff5d94..db704eb93090867fdd5fba9df92229a8c52ce293 100644 (file)
@@ -36,6 +36,7 @@
 #import <NGExtensions/NSObject+Logs.h>
 #import <NGExtensions/NGQuotedPrintableCoding.h>
 #import <NGExtensions/NSString+Encoding.h>
+#import <NGExtensions/NSString+misc.h>
 #import <NGImap4/NGImap4Connection.h>
 #import <NGImap4/NGImap4Envelope.h>
 #import <NGImap4/NGImap4EnvelopeAddress.h>
@@ -60,17 +61,10 @@ static BOOL debugOn            = NO;
 static BOOL debugBodyStructure = NO;
 static BOOL debugSoParts       = NO;
 
-+ (int)version {
-  return [super version] + 0 /* v1 */;
-}
-
-+ (void)initialize {
++ (void) initialize
+{
   NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
   
-  NSAssert2([super version] == 1,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-  
   if ((fetchHeader = ([ud boolForKey:@"SOGoDoNotFetchMailHeader"] ? NO : YES)))
     NSLog(@"Note: fetching full mail header.");
   else
@@ -107,16 +101,27 @@ static BOOL debugSoParts       = NO;
 }
 
 - (void)dealloc {
-  [self->headers    release];
-  [self->headerPart release];
-  [self->coreInfos  release];
+  [headers    release];
+  [headerPart release];
+  [coreInfos  release];
   [super dealloc];
 }
 
 /* IMAP4 */
 
-- (NSString *)relativeImap4Name {
-  return [[self nameInContainer] stringByDeletingPathExtension];
+- (NSString *) relativeImap4Name
+{
+  return [nameInContainer stringByDeletingPathExtension];
+}
+
+- (NSMutableString *) imap4URLString
+{
+  NSMutableString *urlString;
+
+  urlString = [container imap4URLString];
+  [urlString appendFormat: @"%@", [nameInContainer stringByEscapingURL]];
+
+  return urlString;
 }
 
 /* hierarchy */
@@ -207,8 +212,8 @@ static BOOL debugSoParts       = NO;
   static NSArray *existsKey = nil;
   id msgs;
   
-  if (self->coreInfos != nil) /* if we have coreinfos, we can use them */
-    return [self->coreInfos isNotNull];
+  if (coreInfos != nil) /* if we have coreinfos, we can use them */
+    return [coreInfos isNotNull];
   
   /* otherwise fetch something really simple */
   
@@ -223,8 +228,8 @@ static BOOL debugSoParts       = NO;
 - (id)fetchCoreInfos {
   id msgs;
   
-  if (self->coreInfos != nil)
-    return [self->coreInfos isNotNull] ? self->coreInfos : nil;
+  if (coreInfos != nil)
+    return [coreInfos isNotNull] ? coreInfos : nil;
   
 #if 0 // TODO: old code, why was it using clientObject??
   msgs = [[self clientObject] fetchParts:coreInfoKeys]; // returns dict
@@ -236,8 +241,8 @@ static BOOL debugSoParts       = NO;
   if ([msgs count] == 0)
     return nil;
   
-  self->coreInfos = [[msgs objectAtIndex:0] retain];
-  return self->coreInfos;
+  coreInfos = [[msgs objectAtIndex:0] retain];
+  return coreInfos;
 }
 
 - (id)bodyStructure {
@@ -291,27 +296,30 @@ static BOOL debugSoParts       = NO;
   NGMimeMessageParser *parser;
   NSData *data;
   
-  if (self->headerPart != nil)
-    return [self->headerPart isNotNull] ? self->headerPart : nil;
+  if (headerPart != nil)
+    return [headerPart isNotNull] ? headerPart : nil;
   
   if ([(data = [self mailHeaderData]) length] == 0)
     return nil;
   
   // TODO: do we need to set some delegate method which stops parsing the body?
   parser = [[NGMimeMessageParser alloc] init];
-  self->headerPart = [[parser parsePartFromData:data] retain];
+  headerPart = [[parser parsePartFromData:data] retain];
   [parser release]; parser = nil;
 
-  if (self->headerPart == nil) {
-    self->headerPart = [[NSNull null] retain];
+  if (headerPart == nil) {
+    headerPart = [[NSNull null] retain];
     return nil;
   }
-  return self->headerPart;
+  return headerPart;
 }
-- (NSDictionary *)mailHeaders {
-  if (self->headers == nil)
-    self->headers = [[[self mailHeaderPart] headers] copy];
-  return self->headers;
+
+- (NSDictionary *) mailHeaders
+{
+  if (!headers)
+    headers = [[[self mailHeaderPart] headers] copy];
+
+  return headers;
 }
 
 - (id)lookupInfoForBodyPart:(id)_path {
index 32e2da9a818d8ff324442662308a4ff0e17a9895..4932bf20cce227abce0c51c01d02f67572f65044 100644 (file)
 
 @implementation SOGoMessageMailBodyPart
 
-+ (int)version {
-  return [super version] + 0 /* v1 */;
-}
-
-+ (void)initialize {
-  NSAssert2([super version] == 1,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-}
-
 @end /* SOGoMessageMailBodyPart */
index 85a98f473883984490944bbad9c6e17cb2be930b..d5e444bffe2af018f8c0371739c67a45ae110303 100644 (file)
 
 @implementation SOGoSharedInboxFolder
 
-+ (int)version {
-  return [super version] + 0 /* v1 */;
-}
-
-+ (void)initialize {
-  NSAssert2([super version] == 1,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-}
-
 /* listing available folders */
 
 - (NSArray *)toManyRelationshipKeys {
index 27326638d910dda4bc62e4b56d239b4be5067c42..5b7ba9ec2cb92498a9078e749fb6a44b3a2bc633 100644 (file)
 
 static NSString *otherUsersFolderName = @""; // TODO: add English default
 
-+ (int)version {
-  return [super version] + 0 /* v1 */;
-}
-
-+ (void)initialize {
++ (void) initialize
+{
   NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
 
-  NSAssert2([super version] == 1,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-  
   otherUsersFolderName = [ud stringForKey:@"SOGoOtherUsersFolderName"];
   NSLog(@"Note: using other-users-folders name: '%@'", otherUsersFolderName);
 }
index 13ce223172957609122b22d0931c45e4dcdb68c3..3f24d21a343c9e5cbedc366e4777bded73154a51 100644 (file)
 
 @implementation SOGoVCardMailBodyPart
 
-+ (int)version {
-  return [super version] + 0 /* v1 */;
-}
-
-+ (void)initialize {
-  NSAssert2([super version] == 1,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-}
-
 @end /* SOGoVCardMailBodyPart */
index c694a6dc59674ab06fefa61c6c5fb3abd61deac5..634e72ebc26c3be8572a4522c5bcfd9b57de40e9 100644 (file)
@@ -36,3 +36,5 @@
 #include <NGObjWeb/SoObject+SoDAV.h>
 
 #include <NGImap4/NGImap4Connection.h>
+
+#warning importing common.h is baaad
index 640c057d6d39cdc9f2f97c2c51eac6cbd7232e6b..6a93540dc6ae9f8a7141edb185b7a095316992ea 100644 (file)
@@ -69,7 +69,8 @@ static NSMutableCharacterSet *urlAfterEndingChars = nil;
       hostR = [self rangeOfString: @"://"];
       locationR = [[self substringFromIndex: (hostR.location + hostR.length)]
                     rangeOfString: @"/"];
-      newURL = [self substringFromIndex: (hostR.location + hostR.length + locationR.location)];
+      newURL = [self substringFromIndex: (hostR.location + hostR.length
+                                         + locationR.location)];
     }
 
   return newURL;
index 3ada07357a2cb2d26320dec740a598579fcc6e64..6f8cd5febdf68c48ef8027f498335b3c2ababb9d 100644 (file)
@@ -44,6 +44,7 @@
 + (id) sharedSOGoAuthenticator;
 
 - (SOGoUser *) userInContext: (WOContext *) _ctx;
+- (NSString *) passwordInContext: (WOContext *) context;
 
 @end
 
index cb67ba4c63a7218b5ff654ec83ee53ad5a677864..edf368fb99afa866313a09111863ae1197929ffa 100644 (file)
@@ -82,7 +82,7 @@
 //           && [_pwd isEqualToString: @"freebusy"]));
 }
 
-- (NSString *) _passwordInContext: (WOContext *) context
+- (NSString *) passwordInContext: (WOContext *) context
 {
   NSString  *auth, *password;
   NSArray   *creds;
@@ -95,7 +95,7 @@
       if ([creds count] > 1)
        password = [creds objectAtIndex: 1];
     }
-  
+
   return password;
 }
 
        {
          user = [SOGoUser userWithLogin: login
                           roles: [self rolesForLogin: login]];
-         [user setCurrentPassword: [self _passwordInContext: _ctx]];
+         [user setCurrentPassword: [self passwordInContext: _ctx]];
        }
     }
   else
index bf5ab285e2de13665ba436e5af36bd3e1545e1bb..3c76bc134085e663760c3df2af6e0bbdc9a23386 100644 (file)
@@ -32,3 +32,5 @@
 #include <NGObjWeb/SoObjects.h>
 
 #include <NGImap4/NGImap4Client.h>
+
+#warning importing common.h is baaad
index ea759a93ad27f9d2dafb1f7848e22077d6ef9e0f..803270d7a1be9004cea85ab9cdf352582f63a1e3 100644 (file)
@@ -22,6 +22,8 @@
 
 #import <Foundation/Foundation.h>
 
+#warning importing common.h is baaad
+
 #if LIB_FOUNDATION_LIBRARY
 #  include <Foundation/exceptions/GeneralExceptions.h>
 #elif NeXT_Foundation_LIBRARY || COCOA_Foundation_LIBRARY
index bb109a4ae13c646364379b7db806f61ab8563cba..6443479df2f000c278e005953e949645faf67f2b 100644 (file)
@@ -32,3 +32,5 @@
 #include <NGExtensions/NGExtensions.h>
 #include <NGObjWeb/NGObjWeb.h>
 #include <NGObjWeb/SoObjects.h>
+
+#warning importing common.h is baaad
index 9e98639ce8e5c5b3b94d4998744ca9ce8257d18d..6cda6842fc518ae536dc2303c981f0d1cb8b7036 100644 (file)
@@ -31,3 +31,5 @@
 #include <NGExtensions/NGExtensions.h>
 #include <NGObjWeb/NGObjWeb.h>
 #include <NGObjWeb/SoObjects.h>
+
+#warning importing common.h is baaad
index ca5c2267c1313e1de51db80673313b38b9a450de..4906cbaeb9a5f6884b05672280725326584934bc 100644 (file)
@@ -32,3 +32,5 @@
 #include <NGExtensions/NGExtensions.h>
 #include <NGObjWeb/NGObjWeb.h>
 #include <NGObjWeb/SoObjects.h>
+
+#warning importing common.h is baaad
index ea6a4dbfb4d5057c9ab9150c44c05781f603719f..24b5c03ee0fdf513be429ba7bbef169431431a89 100644 (file)
@@ -32,3 +32,5 @@
 #include <NGObjWeb/SoObjects.h>
 
 #include <GDLAccess/GDLAccess.h>
+
+#warning importing common.h is baaad
index 4a433df21c7f8b58c0e2361df346586b340b0366..56a455ce683f9653528a918fb616b5d47b6c9ab2 100644 (file)
@@ -24,3 +24,5 @@
 
 #include <NGObjWeb/NGObjWeb.h>
 #include <NGObjWeb/SoObjects.h>
+
+#warning importing common.h is baaad
index c2764a3935017114c34e53dc02b321048adff999..d2c2a342c03b0249ba9cb8a4a2a3f6af324ea82e 100644 (file)
 
   if (hasStartDate)
     [todo setStartDate: taskStartDate];
+  else
+    [todo setStartDate: nil];
+
   if (hasDueDate)
     [todo setDue: taskDueDate];
+  else
+    [todo setDue: nil];
+
   if ([status isEqualToString: @"COMPLETED"])
     [todo setCompleted: statusDate];
   else
index 5f7079c03136a8a08c3dbf999626e24366656d6b..f8c223d56039a2db8120e09b99b43d52e1a2b3ff 100644 (file)
@@ -32,3 +32,5 @@
 #import <NGExtensions/NGExtensions.h>
 #import <NGObjWeb/NGObjWeb.h>
 #import <NGObjWeb/SoObjects.h>
+
+#warning importing common.h is baaad
index 3c7c91fe92979443969dec9642e2b10b256e871c..860d0e57644d7568189e1ba4f4b51260fb95d78f 100644 (file)
@@ -250,21 +250,21 @@ function onDaySelect(node) {
   return false;
 }
 
-function onDateSelectorGotoMonth(node) {
-  var day = node.getAttribute("date");
+function onDateSelectorGotoMonth(event) {
+   var day = this.getAttribute("date");
 
-  changeDateSelectorDisplay(day, true);
+   changeDateSelectorDisplay(day, true);
 
-  return false;
+   Event.stop(event);
 }
 
 function onCalendarGotoDay(node) {
-  var day = node.getAttribute("date");
-
-  changeDateSelectorDisplay(day);
-  changeCalendarDisplay( { "day": day } );
-
-  return false;
+   var day = node.getAttribute("date");
+   
+   changeDateSelectorDisplay(day);
+   changeCalendarDisplay( { "day": day } );
+  
+   return false;
 }
 
 function gotoToday() {
@@ -280,6 +280,8 @@ function setDateSelectorContent(content) {
   div.innerHTML = content;
   if (currentDay.length > 0)
     restoreCurrentDaySelection(div);
+
+  initDateSelectorEvents();
 }
 
 function dateSelectorCallback(http) {
@@ -289,7 +291,6 @@ function dateSelectorCallback(http) {
      var content = http.responseText;
      setDateSelectorContent(content);
      cachedDateSelectors[http.callbackData] = content;
-     initDateSelectorEvents();
   }
   else
     log ("dateSelectorCallback Ajax error");
index 7c67eb7bb6f45929872aec69848428f76f3323e0..b68d3dac9d7b322d7a8a66f50abd7e08e691dca4 100644 (file)
@@ -1,7 +1,5 @@
 var contactSelectorAction = 'calendars-contacts';
 
-addEvent(window, 'DOMContentLoaded', onTaskEditorLoad);
-
 function uixEarlierDate(date1, date2) {
   // can this be done in a sane way?
   //   cuicui = 'year';
@@ -294,3 +292,5 @@ function initializeStatusLine() {
 function onTaskEditorLoad() {
    initializeStatusLine();
 }
+
+addEvent(window, 'load', onTaskEditorLoad);