Monotone-Parent: 9715a82415417b61abb765bb77ed338dc1fb58b3
Monotone-Revision: 60f9148aaf760d42dcfae9f3006ede633fc61305 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-08-06T17:44:01 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
parent
98d4ad6af8
commit
2d905b13c8
|
@ -18,7 +18,6 @@ Mailer_OBJC_FILES += \
|
|||
SOGoMailFolder.m \
|
||||
SOGoSharedInboxFolder.m \
|
||||
SOGoMailObject.m \
|
||||
SOGoMailFolderDataSource.m \
|
||||
SOGoTrashFolder.m \
|
||||
\
|
||||
SOGoMailBodyPart.m \
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
#import "SOGoMailObject.h"
|
||||
#import "SOGoMailAccount.h"
|
||||
#import "SOGoMailManager.h"
|
||||
#import "SOGoMailFolderDataSource.h"
|
||||
#import "SOGoMailFolder.h"
|
||||
|
||||
static NSString *defaultUserID = @"anyone";
|
||||
|
@ -174,15 +173,6 @@ static BOOL useAltNamespace = NO;
|
|||
return filenames;
|
||||
}
|
||||
|
||||
- (EODataSource *) contentDataSourceInContext: (id) _ctx
|
||||
{
|
||||
SOGoMailFolderDataSource *ds;
|
||||
|
||||
ds = [[SOGoMailFolderDataSource alloc] initWithImap4URL:[self imap4URL]
|
||||
imap4Password:[self imap4Password]];
|
||||
return [ds autorelease];
|
||||
}
|
||||
|
||||
/* messages */
|
||||
|
||||
- (NSArray *) fetchUIDsMatchingQualifier: (id) _q
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2005 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_SOGoMailFolderDataSource_H__
|
||||
#define __Mailer_SOGoMailFolderDataSource_H__
|
||||
|
||||
#include <EOControl/EODataSource.h>
|
||||
|
||||
/*
|
||||
SOGoMailFolderDataSource
|
||||
|
||||
This is used as the contentDataSource in the SOGoMailFolder, that is, as the
|
||||
object to retrieve WebDAV listings of an IMAP4 folder.
|
||||
*/
|
||||
|
||||
@class NSString, NSURL, NSArray;
|
||||
@class EOFetchSpecification;
|
||||
|
||||
@interface SOGoMailFolderDataSource : EODataSource
|
||||
{
|
||||
EOFetchSpecification *fetchSpecification;
|
||||
NSURL *imap4URL;
|
||||
NSString *imap4Password;
|
||||
}
|
||||
|
||||
- (id)initWithImap4URL:(NSURL *)_imap4URL imap4Password:(NSString *)_pwd;
|
||||
|
||||
/* accessors */
|
||||
|
||||
- (void)setFetchSpecification:(EOFetchSpecification *)_fetchSpec;
|
||||
- (EOFetchSpecification *)fetchSpecification;
|
||||
|
||||
- (NSURL *)imap4URL;
|
||||
|
||||
/* operations */
|
||||
|
||||
- (NSArray *)fetchObjects;
|
||||
|
||||
@end
|
||||
|
||||
#endif /* SOGoMailFolderDataSource */
|
|
@ -1,227 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2005 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.
|
||||
*/
|
||||
|
||||
#import <Foundation/NSArray.h>
|
||||
#import <Foundation/NSAutoreleasePool.h>
|
||||
#import <Foundation/NSString.h>
|
||||
#import <Foundation/NSUserDefaults.h>
|
||||
|
||||
#import <NGObjWeb/EOFetchSpecification+SoDAV.h>
|
||||
#import <NGExtensions/EODataSource+NGExtensions.h>
|
||||
#import <NGExtensions/NSObject+Logs.h>
|
||||
#import <EOControl/EOQualifier.h>
|
||||
#import <EOControl/EOSortOrdering.h>
|
||||
#import <NGImap4/NGImap4Envelope.h>
|
||||
|
||||
#import "SOGoMailManager.h"
|
||||
|
||||
#import "SOGoMailFolderDataSource.h"
|
||||
|
||||
@implementation SOGoMailFolderDataSource
|
||||
|
||||
static BOOL debugOn = NO;
|
||||
|
||||
- (id)initWithImap4URL:(NSURL *)_imap4URL imap4Password:(NSString *)_pwd {
|
||||
if (_imap4URL == nil) {
|
||||
[self release];
|
||||
return nil;
|
||||
}
|
||||
|
||||
if ((self = [super init])) {
|
||||
self->imap4URL = [_imap4URL copy];
|
||||
self->imap4Password = [_pwd copy];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
- (id)init {
|
||||
return [self initWithImap4URL:nil imap4Password:nil];
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[self->imap4Password release];
|
||||
[self->imap4URL release];
|
||||
[self->fetchSpecification release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
/* accessors */
|
||||
|
||||
- (void)setFetchSpecification:(EOFetchSpecification *)_fetchSpec {
|
||||
if ([_fetchSpec isEqual:self->fetchSpecification]) return;
|
||||
|
||||
ASSIGN(self->fetchSpecification, _fetchSpec);
|
||||
[self postDataSourceChangedNotification];
|
||||
}
|
||||
- (EOFetchSpecification *)fetchSpecification {
|
||||
return self->fetchSpecification;
|
||||
}
|
||||
|
||||
- (NSURL *)imap4URL {
|
||||
return self->imap4URL;
|
||||
}
|
||||
|
||||
- (NGImap4ConnectionManager *)mailManager {
|
||||
static NGImap4ConnectionManager *mm = nil;
|
||||
if (mm == nil)
|
||||
mm = [[NGImap4ConnectionManager defaultConnectionManager] retain];
|
||||
return mm;
|
||||
}
|
||||
|
||||
/* fetches */
|
||||
|
||||
- (NSArray *)partsForWebDAVPropertyNames:(NSArray *)_names {
|
||||
// TODO: implement
|
||||
static NSArray *parts = nil;
|
||||
|
||||
// [self logWithFormat:@"props: %@", _names];
|
||||
|
||||
if (parts == nil) {
|
||||
parts = [[NSArray alloc] initWithObjects:
|
||||
@"FLAGS", @"ENVELOPE", @"RFC822.SIZE", nil];
|
||||
}
|
||||
return parts;
|
||||
}
|
||||
|
||||
- (void)addRecordsForFolderNames:(NSArray *)_n toArray:(NSMutableArray *)_r {
|
||||
unsigned i, count;
|
||||
|
||||
for (i = 0, count = [_n count]; i < count; i++) {
|
||||
NSDictionary *rec;
|
||||
NSString *keys[2], *values[2];
|
||||
|
||||
keys[0] = @"{DAV:}href"; values[0] = [_n objectAtIndex:i];
|
||||
keys[1] = @"davResourceType"; values[1] = @"collection";
|
||||
rec = [[NSDictionary alloc] initWithObjects:values forKeys:keys count:2];
|
||||
[_r addObject:rec];
|
||||
[rec release];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)addRecordsForUIDs:(NSArray *)_uids toArray:(NSMutableArray *)_r {
|
||||
NSAutoreleasePool *pool;
|
||||
NSArray *partNames, *results;
|
||||
unsigned i, count;
|
||||
|
||||
if ([_uids count] == 0)
|
||||
return;
|
||||
|
||||
pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
partNames = [self partsForWebDAVPropertyNames:
|
||||
[[self fetchSpecification] selectedWebDAVPropertyNames]];
|
||||
|
||||
results = [[self mailManager] fetchUIDs:_uids inURL:self->imap4URL
|
||||
parts:partNames password:self->imap4Password];
|
||||
results = [results valueForKey:@"fetch"];
|
||||
|
||||
for (i = 0, count = [results count]; i < count; i++) {
|
||||
NGImap4Envelope *envelope;
|
||||
NSDictionary *result;
|
||||
NSDictionary *rec;
|
||||
NSString *keys[6];
|
||||
id values[6];
|
||||
|
||||
result = [results objectAtIndex:i];
|
||||
envelope = [result valueForKey:@"envelope"];
|
||||
// NSLog(@"RES: %@", result);
|
||||
|
||||
keys[0] = @"{DAV:}href";
|
||||
values[0] = [[[result objectForKey:@"uid"] stringValue]
|
||||
stringByAppendingString:@".mail"];
|
||||
keys[1] = @"davResourceType";
|
||||
values[1] = @"";
|
||||
keys[2] = @"davContentLength";
|
||||
values[2] = [result objectForKey:@"size"];
|
||||
keys[3] = @"davDisplayName";
|
||||
values[3] = [envelope subject];
|
||||
keys[4] = @"davLastModified";
|
||||
values[4] = [envelope date];
|
||||
|
||||
rec = [[NSDictionary alloc] initWithObjects:values forKeys:keys count:5];
|
||||
[_r addObject:rec];
|
||||
[rec release];
|
||||
}
|
||||
|
||||
[pool release];
|
||||
}
|
||||
|
||||
/* operations */
|
||||
|
||||
- (NSArray *)fetchObjects {
|
||||
NSMutableArray *results;
|
||||
EOQualifier *qualifier;
|
||||
NSArray *sortOrderings;
|
||||
NSArray *uids, *folderNames;
|
||||
unsigned total;
|
||||
|
||||
// TODO: support [fs davBulkTargetKeys]
|
||||
if ([[self fetchSpecification] davBulkTargetKeys] != nil) {
|
||||
[self logWithFormat:@"unsupported fetch specification"];
|
||||
return nil;
|
||||
}
|
||||
|
||||
/* fetch message uids */
|
||||
|
||||
// TODO: translate WebDAV qualifier and sort-ordering into IMAP4 one
|
||||
uids = [[self mailManager] fetchUIDsInURL:self->imap4URL
|
||||
qualifier:nil sortOrdering:@"DATE"
|
||||
password:self->imap4Password];
|
||||
|
||||
/* fetch folders */
|
||||
|
||||
folderNames = [[self mailManager] subfoldersForURL:self->imap4URL
|
||||
password:self->imap4Password];
|
||||
|
||||
/* builds results */
|
||||
|
||||
if ((total = ([uids count] + [folderNames count])) == 0)
|
||||
return [NSArray array];
|
||||
|
||||
results = [NSMutableArray arrayWithCapacity:total];
|
||||
|
||||
[self addRecordsForFolderNames:folderNames toArray:results];
|
||||
[self addRecordsForUIDs:uids toArray:results];
|
||||
|
||||
/* filter and sort results */
|
||||
|
||||
if ((qualifier = [[self fetchSpecification] qualifier]) != nil)
|
||||
results = (id)[results filteredArrayUsingQualifier:qualifier];
|
||||
|
||||
if ((sortOrderings = [[self fetchSpecification] sortOrderings]) != nil) {
|
||||
if (qualifier != nil)
|
||||
results = (id)[results sortedArrayUsingKeyOrderArray:sortOrderings];
|
||||
else
|
||||
[results sortUsingKeyOrderArray:sortOrderings];
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
/* logging */
|
||||
|
||||
- (NSString *)loggingPrefix {
|
||||
return @"[mailfolder-ds]";
|
||||
}
|
||||
- (BOOL)isDebuggingEnabled {
|
||||
return debugOn;
|
||||
}
|
||||
|
||||
@end /* SOGoMailFolderDataSource */
|
Loading…
Reference in a new issue