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:
Wolfgang Sourdeau 2007-08-06 17:44:01 +00:00
parent 98d4ad6af8
commit 2d905b13c8
4 changed files with 0 additions and 297 deletions

View file

@ -18,7 +18,6 @@ Mailer_OBJC_FILES += \
SOGoMailFolder.m \
SOGoSharedInboxFolder.m \
SOGoMailObject.m \
SOGoMailFolderDataSource.m \
SOGoTrashFolder.m \
\
SOGoMailBodyPart.m \

View file

@ -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

View file

@ -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 */

View file

@ -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 */