]> err.no Git - scalable-opengroupware.org/blobdiff - UI/MailerUI/UIxMailListView.m
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1193 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / UI / MailerUI / UIxMailListView.m
index b63b740c1ca65c4c14ae0406efdfaa153cfe1244..e2cb26daf9f2580e865a98f56e8a665da3359c7c 100644 (file)
@@ -92,12 +92,30 @@ static int attachmentFlagSize = 8096;
 {
   NSCalendarDate *messageDate;
 
-  messageDate = [[message objectForKey: @"envelope"] date];
+  messageDate = [[message valueForKey: @"envelope"] date];
   [messageDate setTimeZone: userTimeZone];
 
   return [dateFormatter formattedDateAndTime: messageDate];
 }
 
+- (NSString *) messageSubject
+{
+  NSString *subject;
+  id envSubject;
+
+  envSubject = [[message valueForKey: @"envelope"] subject];
+  if ([envSubject isKindOfClass: [NSData class]])
+    {
+      subject = [[NSString alloc] initWithData: envSubject
+                                 encoding: NSUTF8StringEncoding];
+      [subject autorelease];
+    }
+  else
+    subject = envSubject;
+
+  return subject;
+}
+
 - (BOOL) showToAddress 
 {
   NSString *ftype;
@@ -140,6 +158,7 @@ static int attachmentFlagSize = 8096;
   flags = [[self message] valueForKey:@"flags"];
   return [flags containsObject:@"seen"];
 }
+
 - (NSString *) messageUidString 
 {
   return [[[self message] valueForKey:@"uid"] stringValue];
@@ -220,10 +239,24 @@ static int attachmentFlagSize = 8096;
 
 - (NSArray *) sortedUIDs 
 {
+  EOQualifier *fetchQualifier, *notDeleted;
   if (!sortedUIDs)
     {
+      notDeleted = [EOQualifier qualifierWithQualifierFormat:
+                                 @"(not (flags = %@))",
+                               @"deleted"];
+      if (qualifier)
+       {
+         fetchQualifier = [[EOAndQualifier alloc] initWithQualifiers:
+                                                    notDeleted, qualifier,
+                                                  nil];
+         [fetchQualifier autorelease];
+       }
+      else
+       fetchQualifier = notDeleted;
+
       sortedUIDs
-        = [[self clientObject] fetchUIDsMatchingQualifier: qualifier
+        = [[self clientObject] fetchUIDsMatchingQualifier: fetchQualifier
                               sortOrdering: [self imap4SortOrdering]];
       [sortedUIDs retain];
     }
@@ -406,36 +439,8 @@ static int attachmentFlagSize = 8096;
   return [self redirectToLocation:url];
 }
 
-/* active message */
-
-- (SOGoMailObject *) lookupActiveMessage 
-{
-  NSString *uid;
-  
-  if ((uid = [[context request] formValueForKey: @"uid"]) == nil)
-    return nil;
-
-  return [[self clientObject] lookupName: uid
-                             inContext: context
-                             acquire: NO];
-}
-
 /* actions */
 
-- (BOOL) isJavaScriptRequest 
-{
-  return [[[context request] formValueForKey:@"jsonly"] boolValue];
-}
-
-- (id) javaScriptOK 
-{
-  WOResponse *r;
-
-  r = [context response];
-  [r setStatus:200 /* OK */];
-  return r;
-}
-
 - (int) firstMessageOfPageFor: (int) messageNbr
 {
   NSArray *messageNbrs;
@@ -461,26 +466,23 @@ static int attachmentFlagSize = 8096;
 
   if ([criteria isEqualToString: @"subject"])
     qualifier = [EOQualifier qualifierWithQualifierFormat:
-                              @"(subject doesContain: %@)",
-                            value];
+                              @"(subject doesContain: %@)", value];
   else if ([criteria isEqualToString: @"sender"])
     qualifier = [EOQualifier qualifierWithQualifierFormat:
-                            @"(from doesContain: %@)",
-                            value];
+                              @"(from doesContain: %@)", value];
   else if ([criteria isEqualToString: @"subject_or_sender"])
     qualifier = [EOQualifier qualifierWithQualifierFormat:
-                              @"(subject doesContain: %@) OR "
-                            @"(from doesContain: %@)",
+                              @"((subject doesContain: %@)"
+                            @" OR (from doesContain: %@))",
                             value, value];
   else if ([criteria isEqualToString: @"to_or_cc"])
     qualifier = [EOQualifier qualifierWithQualifierFormat:
-                              @"(to doesContain: %@) OR "
-                            @"(cc doesContain: %@)",
+                              @"((to doesContain: %@)"
+                            @" OR (cc doesContain: %@))",
                             value, value];
   else if ([criteria isEqualToString: @"entire_message"])
     qualifier = [EOQualifier qualifierWithQualifierFormat:
-                            @"(message doesContain: %@)",
-                            value];
+                              @"(body doesContain: %@)", value];
   else
     qualifier = nil;
 
@@ -499,8 +501,7 @@ static int attachmentFlagSize = 8096;
   specificMessage = [request formValueForKey: @"pageforuid"];
   searchCriteria = [request formValueForKey: @"search"];
   searchValue = [request formValueForKey: @"value"];
-  if ([searchCriteria length] > 0
-      && [searchValue length] > 0)
+  if ([searchValue length])
     [self _setQualifierForCriteria: searchCriteria
          andValue: searchValue];
 
@@ -508,43 +509,9 @@ static int attachmentFlagSize = 8096;
     = ((specificMessage)
        ? [self firstMessageOfPageFor: [specificMessage intValue]]
        : [[request formValueForKey:@"idx"] intValue]);
-
   return self;
 }
 
-- (id) viewAction 
-{
-  return [self defaultAction];
-}
-
-- (id) markMessageUnreadAction 
-{
-  NSException *error;
-  
-  if ((error = [[self lookupActiveMessage] removeFlags:@"seen"]) != nil)
-    // TODO: improve error handling
-    return error;
-
-  if ([self isJavaScriptRequest])
-    return [self javaScriptOK];
-  
-  return [self redirectToLocation:@"view"];
-}
-
-- (id) markMessageReadAction 
-{
-  NSException *error;
-  
-  if ((error = [[self lookupActiveMessage] addFlags:@"seen"]) != nil)
-    // TODO: improve error handling
-    return error;
-  
-  if ([self isJavaScriptRequest])
-    return [self javaScriptOK];
-  
-  return [self redirectToLocation:@"view"];
-}
-
 - (id) getMailAction 
 {
   // TODO: we might want to flush the caches?
@@ -567,28 +534,21 @@ static int attachmentFlagSize = 8096;
   return [self redirectToLocation:@"view"];
 }
 
-- (id) expungeAction 
+- (NSString *) msgLabels
 {
-  // TODO: we might want to flush the caches?
-  NSException *error;
-  id clientObject;
+  NSMutableArray *labels;
+  NSEnumerator *flags;
+  NSString *currentFlag;
 
-  clientObject = [self clientObject];
-  if (clientObject)
-    {
-      error = [clientObject expunge];
-      if (!error)
-       {
-         if ([clientObject respondsToSelector: @selector(flushMailCaches)])
-           [clientObject flushMailCaches];
-         return [self redirectToLocation:@"view"];
-       }
-    }
-  else
-    error = [NSException exceptionWithHTTPStatus:404 /* Not Found */
-                        reason: @"did not find mail folder"];
-  
-  return error;
+  labels = [NSMutableArray new];
+  [labels autorelease];
+
+  flags = [[message objectForKey: @"flags"] objectEnumerator];
+  while ((currentFlag = [flags nextObject]))
+    if ([currentFlag hasPrefix: @"$label"])
+      [labels addObject: [currentFlag substringFromIndex: 1]];
+
+  return [labels componentsJoinedByString: @" "];
 }
 
 @end