]> err.no Git - scalable-opengroupware.org/commitdiff
work on mailer
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Mon, 11 Oct 2004 14:04:30 +0000 (14:04 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Mon, 11 Oct 2004 14:04:30 +0000 (14:04 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@378 d1b88da0-ebda-0310-925b-ed51d893ca5b

14 files changed:
SOGo/SoObjects/Mailer/ChangeLog
SOGo/SoObjects/Mailer/GNUmakefile
SOGo/SoObjects/Mailer/SOGoDraftObject.h [new file with mode: 0644]
SOGo/SoObjects/Mailer/SOGoDraftObject.m [new file with mode: 0644]
SOGo/SoObjects/Mailer/SOGoDraftsFolder.h
SOGo/SoObjects/Mailer/SOGoDraftsFolder.m
SOGo/SoObjects/Mailer/Version
SOGo/SoObjects/Mailer/product.plist
SOGo/UI/Mailer/ChangeLog
SOGo/UI/Mailer/GNUmakefile
SOGo/UI/Mailer/UIxMailEditor.m
SOGo/UI/Mailer/UIxMailEditorAction.m [new file with mode: 0644]
SOGo/UI/Mailer/Version
SOGo/UI/Mailer/product.plist

index 2c4f1d7d07819a5a686ce6604ff079fc418c9280..f850c3750fadeb02aa8d9aec7adc40573f9965be 100644 (file)
@@ -1,3 +1,7 @@
+2004-10-11  Helge Hess  <helge.hess@opengroupware.org>
+
+       * started SOGoDraftObject (v0.9.32)
+
 2004-10-10  Helge Hess  <helge.hess@opengroupware.org>
 
        * SOGoDraftsFolder.m: added methods to be compatible with the mail
index 89ed10edc2dc44924a810864d26d4b0bef09d65c..ef4c0b921b57dd95dd151eac05d39c246e3f5bf3 100644 (file)
@@ -20,6 +20,7 @@ Mailer_OBJC_FILES += \
        SOGoMailBodyPart.m              \
        \
        SOGoDraftsFolder.m              \
+       SOGoDraftObject.m               \
 
 Mailer_RESOURCE_FILES += \
        Version         \
diff --git a/SOGo/SoObjects/Mailer/SOGoDraftObject.h b/SOGo/SoObjects/Mailer/SOGoDraftObject.h
new file mode 100644 (file)
index 0000000..2039868
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+  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_SOGoDraftObject_H__
+#define __Mailer_SOGoDraftObject_H__
+
+#include <Mailer/SOGoMailBaseObject.h>
+
+/*
+  SOGoDraftsFolder
+    Parent object: SOGoDraftsFolder
+    Child objects: draft attachments?
+  
+  The SOGoDraftObject is used for composing new messages. It is necessary
+  because we can't cache objects in a session. So the contents of the drafts
+  folder are some kind of "mail creation transaction".
+*/
+
+@interface SOGoDraftObject : SOGoMailBaseObject
+{
+}
+
+@end
+
+#endif /* __Mailer_SOGoDraftObject_H__ */
diff --git a/SOGo/SoObjects/Mailer/SOGoDraftObject.m b/SOGo/SoObjects/Mailer/SOGoDraftObject.m
new file mode 100644 (file)
index 0000000..3e6c967
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+  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 "SOGoDraftObject.h"
+#include "common.h"
+
+@implementation SOGoDraftObject
+
+- (void)dealloc {
+  [super dealloc];
+}
+
+@end /* SOGoDraftObject */
index ebd3edf6051d9f8a9d452900a64417cd335dd967..9d6ab06c941cb33f05f7ff8e49a568acf996faf5 100644 (file)
@@ -28,7 +28,7 @@
 /*
   SOGoDraftsFolder
     Parent object: SOGoMailAccount
-    Child objects: SOGoMailFolder
+    Child objects: SOGoDraftObject's
   
   The SOGoDraftsFolder is used for composing new messages. It is necessary
   because we can't cache objects in a session. So the contents of the drafts
index b2dcf4c49e0028b20490f3efbfce44620ef66954..d15cb76ac4352ac8ad25583a87ef50e5a48881fc 100644 (file)
 // $Id$
 
 #include "SOGoDraftsFolder.h"
+#include "SOGoDraftObject.h"
+#include <SOGo/SOGoUserFolder.h>
+#include <NGExtensions/NSFileManager+Extensions.h>
 #include "common.h"
 
 @implementation SOGoDraftsFolder
 
+static NSString *spoolFolder = nil;
+
++ (void)initialize {
+  NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
+  
+  spoolFolder = [[ud stringForKey:@"SOGoMailSpoolPath"] copy];
+  if ([spoolFolder length] < 3)
+    spoolFolder = @"/tmp/";
+  
+  NSLog(@"Note: using SOGo mail spool folder: %@", spoolFolder);
+}
+
+/* draft folder functionality */
+
+- (NSFileManager *)spoolFileManager {
+  return [NSFileManager defaultManager];
+}
+
+- (NSString *)spoolFolderPath {
+  return spoolFolder;
+}
+- (NSString *)userSpoolFolderPath {
+  NSString *p, *n;
+  
+  p = [self spoolFolderPath];
+  n = [[self lookupUserFolder] nameInContainer];
+  return [p stringByAppendingPathComponent:n];
+}
+
+- (BOOL)_ensureUserSpoolFolderPath {
+  NSFileManager *fm;
+  
+  if ((fm = [self spoolFileManager]) == nil) {
+    [self logWithFormat:@"ERROR: missing spool file manager!"];
+    return NO;
+  }
+  return [fm createDirectoriesAtPath:[self userSpoolFolderPath]
+            attributes:nil];
+}
+
+- (NSArray *)fetchMailNames {
+  NSString *p;
+  
+  if ((p = [self userSpoolFolderPath]) == nil)
+    return nil;
+  
+  return [[self spoolFileManager] directoryContentsAtPath:p];
+}
+
 /* folder methods (used by template) */
 
 - (NSArray *)fetchUIDsMatchingQualifier:(id)_q sortOrdering:(id)_so {
   // TODO: retrieve contained objects
-  [self logWithFormat:@"TODO: should fetch uids (q=%@,so=%@)", _q, _so];
-  return [NSArray array];
+  NSArray *allUids;
+  
+  allUids = [self fetchMailNames];
+  if (![allUids isNotNull]) {
+    [self logWithFormat:@"Note: no uids in drafts folder: %@",
+           [self userSpoolFolderPath]];
+    return [NSArray array];
+  }
+  
+  [self logWithFormat:@"TODO: should sort uids (q=%@,so=%@): %@", _q, _so,
+         allUids];
+  return allUids;
 }
 - (NSArray *)fetchUIDs:(NSArray *)_uids parts:(NSArray *)_parts {
   [self logWithFormat:@"TODO: fetch uids (parts=%@): %@", _parts, _uids];
   return [NSArray array];
 }
 
+/* name lookup */
+
+- (id)lookupDraftMessage:(NSString *)_key inContext:(id)_ctx {
+  // TODO: we might want to check for existence prior controller creation
+  return [[[SOGoDraftObject 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;
+  
+  if ((obj = [self lookupDraftMessage:_key inContext:_ctx]) != nil)
+    return obj;
+  
+  /* return 404 to stop acquisition */
+  return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
+}
+
 /* WebDAV */
 
 - (BOOL)davIsCollection {
index 7fd6910f13bcaf504b8452bd7ef2569adf17a4bf..97a71362c3bf0ddb41e2363c8153f42f36284c9c 100644 (file)
@@ -1,3 +1,3 @@
 # $Id$
 
-SUBMINOR_VERSION:=31
+SUBMINOR_VERSION:=32
index 2060eae8e4f72027ed07d1bf78857461663e42a1..26d8c0d2ea8d59c22ac00e6e1b9b1ead9f794139 100644 (file)
     SOGoMailBodyPart = {
       superclass    = "SOGoMailBaseObject";
     };
+
+    SOGoDraftsFolder = {
+      superclass    = "SOGoMailBaseObject";
+    };
+    SOGoDraftObject = {
+      superclass    = "SOGoMailBaseObject";
+    };
   };
 }
index 11942b8a9ed4172663735627fb4bceb4505f587a..e36606c775f83a017e314d0ab7e9530f8dc97eee 100644 (file)
@@ -1,3 +1,9 @@
+2004-10-11  Helge Hess  <helge.hess@opengroupware.org>
+
+       * started UIxMailEditorAction object which will contains all the
+         redirects from the buttons to the mail editor (working on draft
+         objects in the drafts folder) (v0.9.28)
+
 2004-10-10  Helge Hess  <helge.hess@opengroupware.org>
 
        * product.plist: added some configuration for the drafts folder
index 444a73306c01684124762d58baf387ed48ab3329..bea9bcb57ff67c77d2ce8055ec8acb4c77b2a0df 100644 (file)
@@ -26,6 +26,7 @@ MailerUI_OBJC_FILES += \
        UIxMailListView.m       \
        UIxMailView.m           \
        UIxMailEditor.m         \
+       UIxMailEditorAction.m   \
        \
        UIxMailPartViewer.m             \
        UIxMailPartTextViewer.m         \
index d5d3d3608771747d365839f437a7e266fe758cd2..f509e069312995f78cbece75699df43b5c919303 100644 (file)
@@ -24,7 +24,6 @@
 
 @interface UIxMailEditor : UIxComponent
 {
-
 }
 
 @end
diff --git a/SOGo/UI/Mailer/UIxMailEditorAction.m b/SOGo/UI/Mailer/UIxMailEditorAction.m
new file mode 100644 (file)
index 0000000..d5aa505
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+  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$
+
+#include <NGObjWeb/WODirectAction.h>
+
+/*
+  UIxMailEditorAction
+  
+  This action implements the backend for the various buttons which invoke the
+  mail editor. The mail editor itself only works on a SOGoDraftObject which
+  needs to be created in advance.
+*/
+
+@interface UIxMailEditorAction : WODirectAction
+@end
+
+#include <SOGo/SoObjects/Mailer/SOGoDraftsFolder.h>
+#include "common.h"
+
+@implementation UIxMailEditorAction
+
+/* errors */
+
+- (id)didNotFindDraftsError {
+  // TODO: make a nice page
+  return [@"did not find drafts folder in object: "
+          stringByAppendingString:[[self clientObject] description]];
+}
+
+/* actions */
+
+- (id)composeAction {
+  SOGoDraftsFolder *drafts;
+  id client;
+  
+  client = [self clientObject];
+  drafts = [client lookupName:@"Drafts" inContext:[self context] acquire:YES];
+  if (![drafts isNotNull])
+    return [self didNotFindDraftsError];
+  if ([drafts isKindOfClass:[NSException class]])
+    return drafts;
+  
+  [self logWithFormat:@"compose on %@: %@", client, drafts];
+  return nil;
+}
+
+@end /* UIxMailEditorAction */
index 9461bed0f2fb385c7656d9d8638cc42bd78b158c..42d0a3b80cd7c5cbc793862161337200792359c1 100644 (file)
@@ -1,3 +1,3 @@
 # $Id$
 
-SUBMINOR_VERSION:=27
+SUBMINOR_VERSION:=28
index eceea7d239000cc1bc0ab62ca442a94811c0316b..124b7c93a0e3c0b73f93249836918ba96efdb598 100644 (file)
 
         compose = {
           protectedBy = "View";
-          pageName    = "UIxMailEditor"; 
+          actionClass = "UIxMailEditorAction"; 
+         actionName  = "compose";
         };
       };
     };
             ( /* first group */
               { link  = "getMail";
                 cssClass = "tbicon_getmail"; label = "Get Mail"; },
+              {
+                link     = "#"; // "compose"; // target = "_blank";
+                onclick  = "clickedCompose(this);return false;";
+                cssClass = "tbicon_compose"; label = "Write";
+              },
               { link  = "addressbook"; target = "addressbook";
-                cssClass = "tbicon_addressbook"; label = "Addressbook"; }
+                cssClass = "tbicon_addressbook"; label = "Addressbook"; },
             )
           );
         };
           protectedBy = "View";
           pageName    = "UIxMailListView"; 
         };
+        compose = {
+          protectedBy = "View";
+          pageName    = "UIxMailEditor"; 
+        };
       };
     };
   };