Monotone-Parent: 3bc92406543042dce09f1c096eb8a19107b42eb2
Monotone-Revision: 0a2c134a89861c564e6bc97bf789ca4a39adcf4a Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-07-20T15:21:11 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
63c2d62b0b
commit
649b6fb90f
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -26,13 +26,6 @@
|
|||
#import "MAPIStoreMessage.h"
|
||||
|
||||
@interface MAPIStoreEmbeddedMessage : MAPIStoreMessage
|
||||
{
|
||||
id attachment;
|
||||
}
|
||||
|
||||
+ (id) embeddedMessageWithAttachment: (id) newAttachment;
|
||||
|
||||
- (id) initWithAttachment: (id) newAttachment;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue