Monotone-Parent: 3bc92406543042dce09f1c096eb8a19107b42eb2

Monotone-Revision: 0a2c134a89861c564e6bc97bf789ca4a39adcf4a

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2012-07-20T15:21:11
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2012-07-20 15:21:11 +00:00
parent 63c2d62b0b
commit 649b6fb90f
6 changed files with 103 additions and 44 deletions

View File

@ -1,5 +1,8 @@
2012-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* OpenChange/MAPIStoreSOGo.m
(sogo_message_attachment_create_embedded_message): new backend method.
* OpenChange/NSObject+MAPIStore.m
(+fillAvailableProperties:withExclusions:): new method that fills
an existing array of properties with properties existing in

View File

@ -37,10 +37,12 @@
- (uint32_t) AID;
- (int) openEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr
inMode: (enum OpenEmbeddedMessage_OpenModeFlags) mode
withMID: (uint64_t *) mid
withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) createEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr
withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr
inMemCtx: (TALLOC_CTX *) memCtx;
/* helpers */
- (NSData *) mimeAttachTag;

View File

@ -91,7 +91,6 @@
}
- (int) openEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr
inMode: (enum OpenEmbeddedMessage_OpenModeFlags) mode
withMID: (uint64_t *) mid
withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr
inMemCtx: (TALLOC_CTX *) memCtx
@ -104,24 +103,34 @@
mapping = [self mapping];
if (mode == MAPI_CREATE)
attMessage = [self createEmbeddedMessage];
else
// if (attMessage)
attMessage = [self openEmbeddedMessage];
if (attMessage)
{
// if (attMessage)
// [mapping registerURL: [attMessage url]
// withID: *mid];
attMessage = [self openEmbeddedMessage];
if (attMessage)
{
*mid = [mapping idFromURL: [attMessage url]];
*messagePtr = attMessage;
*mapistoreMsgPtr = mapistoreMsg;
}
*mid = [mapping idFromURL: [attMessage url]];
[mapping registerURL: [attMessage url]
withID: *mid];
*messagePtr = attMessage;
*mapistoreMsgPtr = mapistoreMsg;
}
return (attMessage ? MAPISTORE_SUCCESS : MAPISTORE_ERROR);
}
- (int) createEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr
withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr
inMemCtx: (TALLOC_CTX *) memCtx
{
MAPIStoreEmbeddedMessage *attMessage;
struct mapistore_message *mapistoreMsg;
mapistoreMsg = talloc_zero (memCtx, struct mapistore_message);
attMessage = [self createEmbeddedMessage];
if (attMessage)
{
*messagePtr = attMessage;
*mapistoreMsgPtr = mapistoreMsg;
}
// else if (flags == MAPI_CREATE)
// {
// }
return (attMessage ? MAPISTORE_SUCCESS : MAPISTORE_ERROR);
}

View File

@ -26,13 +26,6 @@
#import "MAPIStoreMessage.h"
@interface MAPIStoreEmbeddedMessage : MAPIStoreMessage
{
id attachment;
}
+ (id) embeddedMessageWithAttachment: (id) newAttachment;
- (id) initWithAttachment: (id) newAttachment;
@end

View File

@ -26,6 +26,8 @@
#import "MAPIStoreEmbeddedMessage.h"
#include <mapistore/mapistore_errors.h>
static Class MAPIStoreAttachmentK;
@implementation MAPIStoreEmbeddedMessage
@ -35,25 +37,28 @@ static Class MAPIStoreAttachmentK;
MAPIStoreAttachmentK = [MAPIStoreAttachment class];
}
+ (id) embeddedMessageWithAttachment: (id) newAttachment
- (int) getPidTagFolderId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
MAPIStoreEmbeddedMessage *newMessage;
newMessage = [[self alloc] initWithAttachment: newAttachment];
[newMessage autorelease];
return newMessage;
return MAPISTORE_ERR_NOT_FOUND;
}
- (id) initWithAttachment: (id) newAttachment
- (int) getPidTagChangeKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
if ((self = [self init]))
{
if ([newAttachment isKindOfClass: MAPIStoreAttachmentK])
ASSIGN (container, newAttachment);
}
return MAPISTORE_ERR_NOT_FOUND;
}
return self;
- (int) getPidTagParentSourceKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return MAPISTORE_ERR_NOT_FOUND;
}
- (int) getPidTagChangeNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return MAPISTORE_ERR_NOT_FOUND;
}
- (NSString *) nameInContainer
@ -61,4 +66,14 @@ static Class MAPIStoreAttachmentK;
return @"as-message";
}
- (uint64_t) objectVersion
{
return ULLONG_MAX;
}
- (void) save
{
[self subclassResponsibility: _cmd];
}
@end

View File

@ -962,10 +962,11 @@ sogo_message_submit (void *message_object, enum SubmitFlags flags)
}
static enum mapistore_error
sogo_message_attachment_open_embedded_message
(void *attachment_object, enum OpenEmbeddedMessage_OpenModeFlags mode,
TALLOC_CTX *mem_ctx, void **message_object, uint64_t *midP,
struct mapistore_message **msg)
sogo_message_attachment_open_embedded_message (void *attachment_object,
TALLOC_CTX *mem_ctx,
void **message_object,
uint64_t *midP,
struct mapistore_message **msg)
{
struct MAPIStoreTallocWrapper *wrapper;
NSAutoreleasePool *pool;
@ -982,7 +983,6 @@ sogo_message_attachment_open_embedded_message
GSRegisterCurrentThread ();
pool = [NSAutoreleasePool new];
rc = [attachment openEmbeddedMessage: &message
inMode: mode
withMID: midP
withMAPIStoreMsg: msg
inMemCtx: mem_ctx];
@ -999,6 +999,42 @@ sogo_message_attachment_open_embedded_message
return rc;
}
static enum mapistore_error
sogo_message_attachment_create_embedded_message (void *attachment_object,
TALLOC_CTX *mem_ctx,
void **message_object,
struct mapistore_message **msg)
{
struct MAPIStoreTallocWrapper *wrapper;
NSAutoreleasePool *pool;
MAPIStoreAttachment *attachment;
MAPIStoreEmbeddedMessage *message;
int rc;
DEBUG (5, ("[SOGo: %s:%d]\n", __FUNCTION__, __LINE__));
if (attachment_object)
{
wrapper = attachment_object;
attachment = wrapper->instance;
GSRegisterCurrentThread ();
pool = [NSAutoreleasePool new];
rc = [attachment createEmbeddedMessage: &message
withMAPIStoreMsg: msg
inMemCtx: mem_ctx];
if (rc == MAPISTORE_SUCCESS)
*message_object = [message tallocWrapper: mem_ctx];
[pool release];
GSUnregisterCurrentThread ();
}
else
{
rc = sogo_backend_unexpected_error();
}
return rc;
}
static enum mapistore_error sogo_table_get_available_properties(void *table_object,
TALLOC_CTX *mem_ctx, struct SPropTagArray **propertiesP)
{
@ -1386,6 +1422,7 @@ int mapistore_init_backend(void)
backend.message.get_attachment_table = sogo_message_get_attachment_table;
backend.message.open_attachment = sogo_message_open_attachment;
backend.message.open_embedded_message = sogo_message_attachment_open_embedded_message;
backend.message.create_embedded_message = sogo_message_attachment_create_embedded_message;
backend.message.get_message_data = sogo_message_get_message_data;
backend.message.modify_recipients = sogo_message_modify_recipients;
backend.message.set_read_flag = sogo_message_set_read_flag;