protected override void InternalDispose(bool disposing) { if (disposing) { foreach (KeyValuePair <int, PersistablePropertyBag> keyValuePair in this.newAttachmentList) { PersistablePropertyBag value = keyValuePair.Value; value.Dispose(); } foreach (KeyValuePair <int, PersistablePropertyBag> keyValuePair2 in this.savedAttachmentList) { PersistablePropertyBag value2 = keyValuePair2.Value; value2.Dispose(); } foreach (KeyValuePair <int, CoreItem> keyValuePair3 in this.attachedItems) { CoreItem value3 = keyValuePair3.Value; value3.Dispose(); } this.newAttachmentList.Clear(); this.savedAttachmentList.Clear(); this.attachedItems.Clear(); } base.InternalDispose(disposing); }
public void OnAttachmentDisconnected(AttachmentPropertyBag attachmentBag, PersistablePropertyBag dataPropertyBag) { if (dataPropertyBag != null) { dataPropertyBag.Dispose(); } }
public void OnCollectionDisposed(AttachmentPropertyBag attachmentBag, PersistablePropertyBag dataPropertyBag) { this.CheckDisposed(null); int attachmentNumber = attachmentBag.AttachmentNumber; this.newAttachmentList.Remove(attachmentNumber); if (dataPropertyBag != null) { dataPropertyBag.Dispose(); } }
internal ConflictResolutionResult SaveChangesWithAcr(SaveMode saveMode) { base.CheckDisposed("AcrPropertyBag::SaveChangesWithAcr"); ConflictResolutionResult conflictResolutionResult = null; if (this.CanSaveBeNoOp() && !this.uncommitted) { return(ConflictResolutionResult.Success); } try { this.propertyBag.SaveChanges(false); this.uncommitted = false; } catch (SaveConflictException) { PersistablePropertyBag persistablePropertyBag = this.propertyBagFactory.CreateStorePropertyBag(this.propertyBag, this.PrefetchPropertyArray); persistablePropertyBag.Context.Copy(this.propertyBag.Context); try { conflictResolutionResult = this.ApplyAcr(persistablePropertyBag, saveMode); if (conflictResolutionResult.SaveStatus == SaveResult.Success || conflictResolutionResult.SaveStatus == SaveResult.SuccessWithConflictResolution) { persistablePropertyBag.FlushChanges(); persistablePropertyBag.SaveChanges(false); this.PropertyBag = persistablePropertyBag; persistablePropertyBag = null; this.uncommitted = false; } } finally { if (persistablePropertyBag != null) { persistablePropertyBag.Dispose(); } } } if (conflictResolutionResult == null) { conflictResolutionResult = ConflictResolutionResult.Success; } if (conflictResolutionResult.SaveStatus != SaveResult.IrresolvableConflict) { this.RefreshCacheAfterSave(conflictResolutionResult); } return(conflictResolutionResult); }
private AttachmentPropertyBag InternalCreateAttachmentPropertyBag(AttachmentType?type, CoreAttachment attachmentToClone, IItem itemToAttach) { this.InitCollection("InternalCreateAttachmentPropertyBag", true); bool flag = false; int attachmentNumber = -1; PersistablePropertyBag persistablePropertyBag = null; AttachmentPropertyBag attachmentPropertyBag = null; try { Schema attachmentSchema = CoreAttachmentCollection.GetAttachmentSchema(type); ICollection <PropertyDefinition> prefetchProperties = InternalSchema.Combine <PropertyDefinition>(attachmentSchema.AutoloadProperties, (ICollection <PropertyDefinition>) this.fetchProperties); persistablePropertyBag = this.attachmentProvider.CreateAttachment(prefetchProperties, attachmentToClone, itemToAttach, out attachmentNumber); attachmentPropertyBag = new AttachmentPropertyBag(this.attachmentProvider, attachmentNumber, persistablePropertyBag, true); attachmentPropertyBag.ExTimeZone = this.ExTimeZone; if (type != null) { int num = CoreAttachment.AttachmentTypeToAttachMethod(type.Value); ((IDirectPropertyBag)attachmentPropertyBag).SetValue(InternalSchema.AttachMethod, num); } this.isDirty = true; this.IsClonedFromAnExistingAttachmentCollection = false; flag = true; } finally { if (!flag) { if (attachmentPropertyBag != null) { attachmentPropertyBag.Dispose(); attachmentPropertyBag = null; } if (persistablePropertyBag != null) { persistablePropertyBag.Dispose(); persistablePropertyBag = null; } } } return(attachmentPropertyBag); }
public PersistablePropertyBag CreateAttachment(ICollection <PropertyDefinition> propertiesToLoad, CoreAttachment attachmentToClone, IItem itemToAttach, out int attachmentNumber) { MapiAttach mapiAttach = null; PersistablePropertyBag persistablePropertyBag = null; bool flag = false; int num = 0; try { StoreSession session = this.AttachmentCollection.ContainerItem.Session; bool flag2 = false; try { if (session != null) { session.BeginMapiCall(); session.BeginServerHealthCall(); flag2 = true; } if (StorageGlobals.MapiTestHookBeforeCall != null) { StorageGlobals.MapiTestHookBeforeCall(MethodBase.GetCurrentMethod()); } mapiAttach = this.AttachmentCollection.ContainerItem.MapiMessage.CreateAttach(out num); } catch (MapiPermanentException ex) { throw StorageGlobals.TranslateMapiException(ServerStrings.MapiCannotOpenAttachment, ex, session, this, "{0}. MapiException = {1}.", new object[] { string.Format("MapiAttachmentProvider::CreateMapiAttachment", new object[0]), ex }); } catch (MapiRetryableException ex2) { throw StorageGlobals.TranslateMapiException(ServerStrings.MapiCannotOpenAttachment, ex2, session, this, "{0}. MapiException = {1}.", new object[] { string.Format("MapiAttachmentProvider::CreateMapiAttachment", new object[0]), ex2 }); } finally { try { if (session != null) { session.EndMapiCall(); if (flag2) { session.EndServerHealthCall(); } } } finally { if (StorageGlobals.MapiTestHookAfterCall != null) { StorageGlobals.MapiTestHookAfterCall(MethodBase.GetCurrentMethod()); } } } attachmentNumber = num; if (attachmentToClone != null) { MapiAttachmentProvider.CopySavedMapiAttachment(true, this, this.AttachmentCollection.ContainerItem.Session, (MapiAttach)attachmentToClone.PropertyBag.MapiProp, mapiAttach); } else if (itemToAttach != null) { MapiMessage mapiMessage = itemToAttach.MapiMessage; MapiMessage mapiMessage2 = null; StoreSession session2 = this.AttachmentCollection.ContainerItem.Session; bool flag3 = false; try { if (session2 != null) { session2.BeginMapiCall(); session2.BeginServerHealthCall(); flag3 = true; } if (StorageGlobals.MapiTestHookBeforeCall != null) { StorageGlobals.MapiTestHookBeforeCall(MethodBase.GetCurrentMethod()); } mapiMessage2 = mapiAttach.OpenEmbeddedMessage(OpenPropertyFlags.Create); } catch (MapiPermanentException ex3) { throw StorageGlobals.TranslateMapiException(ServerStrings.MapiCannotOpenEmbeddedMessage, ex3, session2, this, "{0}. MapiException = {1}.", new object[] { string.Format("MapiAttachmentProvider::CreateMapiAttachment", new object[0]), ex3 }); } catch (MapiRetryableException ex4) { throw StorageGlobals.TranslateMapiException(ServerStrings.MapiCannotOpenEmbeddedMessage, ex4, session2, this, "{0}. MapiException = {1}.", new object[] { string.Format("MapiAttachmentProvider::CreateMapiAttachment", new object[0]), ex4 }); } finally { try { if (session2 != null) { session2.EndMapiCall(); if (flag3) { session2.EndServerHealthCall(); } } } finally { if (StorageGlobals.MapiTestHookAfterCall != null) { StorageGlobals.MapiTestHookAfterCall(MethodBase.GetCurrentMethod()); } } } using (mapiMessage2) { PropProblem[] array = null; StoreSession session3 = this.AttachmentCollection.ContainerItem.Session; bool flag4 = false; try { if (session3 != null) { session3.BeginMapiCall(); session3.BeginServerHealthCall(); flag4 = true; } if (StorageGlobals.MapiTestHookBeforeCall != null) { StorageGlobals.MapiTestHookBeforeCall(MethodBase.GetCurrentMethod()); } array = mapiMessage.CopyTo(mapiMessage2, new PropTag[] { (PropTag)InternalSchema.UrlCompName.PropertyTag }); } catch (MapiPermanentException ex5) { throw StorageGlobals.TranslateMapiException(ServerStrings.MapiCopyFailedProperties, ex5, session3, this, "{0}. MapiException = {1}.", new object[] { string.Format("MapiAttachmentProvider::CreateMapiAttachment", new object[0]), ex5 }); } catch (MapiRetryableException ex6) { throw StorageGlobals.TranslateMapiException(ServerStrings.MapiCopyFailedProperties, ex6, session3, this, "{0}. MapiException = {1}.", new object[] { string.Format("MapiAttachmentProvider::CreateMapiAttachment", new object[0]), ex6 }); } finally { try { if (session3 != null) { session3.EndMapiCall(); if (flag4) { session3.EndServerHealthCall(); } } } finally { if (StorageGlobals.MapiTestHookAfterCall != null) { StorageGlobals.MapiTestHookAfterCall(MethodBase.GetCurrentMethod()); } } } if (array != null) { int num2 = -1; for (int i = 0; i < array.Length; i++) { int scode = array[i].Scode; if (scode == -2147221233 || scode == -2147221222) { ExTraceGlobals.StorageTracer.TraceDebug <int>((long)this.GetHashCode(), "Storage.MapiAttachmentProvider.AddExisting Item: CopyTo returned ignorable scode = {0}", scode); } else { ExTraceGlobals.StorageTracer.TraceError <int>((long)this.GetHashCode(), "Storage.MapiAttachmentProvider.AddExisting Item: CopyTo returned fatal scode = {0}", scode); num2 = i; } if (num2 != -1) { throw PropertyError.ToException(ServerStrings.ExUnableToCopyAttachments, StoreObjectPropertyBag.MapiPropProblemsToPropertyErrors(null, mapiMessage, array)); } } } StoreSession session4 = this.AttachmentCollection.ContainerItem.Session; bool flag5 = false; try { if (session4 != null) { session4.BeginMapiCall(); session4.BeginServerHealthCall(); flag5 = true; } if (StorageGlobals.MapiTestHookBeforeCall != null) { StorageGlobals.MapiTestHookBeforeCall(MethodBase.GetCurrentMethod()); } mapiMessage2.SaveChanges(); } catch (MapiPermanentException ex7) { throw StorageGlobals.TranslateMapiException(ServerStrings.MapiCannotSaveChanges, ex7, session4, this, "{0}. MapiException = {1}.", new object[] { string.Format("MapiAttachmentProvider::CreateMapiAttachment", new object[0]), ex7 }); } catch (MapiRetryableException ex8) { throw StorageGlobals.TranslateMapiException(ServerStrings.MapiCannotSaveChanges, ex8, session4, this, "{0}. MapiException = {1}.", new object[] { string.Format("MapiAttachmentProvider::CreateMapiAttachment", new object[0]), ex8 }); } finally { try { if (session4 != null) { session4.EndMapiCall(); if (flag5) { session4.EndServerHealthCall(); } } } finally { if (StorageGlobals.MapiTestHookAfterCall != null) { StorageGlobals.MapiTestHookAfterCall(MethodBase.GetCurrentMethod()); } } } } } persistablePropertyBag = this.CreateStorePropertyBag(mapiAttach, propertiesToLoad); persistablePropertyBag.ExTimeZone = this.ExTimeZone; flag = true; } finally { if (!flag) { if (persistablePropertyBag != null) { persistablePropertyBag.Dispose(); } if (mapiAttach != null) { mapiAttach.Dispose(); } } } return(persistablePropertyBag); }