internal List <cMessage> Messages(iMailboxHandle pMailboxHandle, cFilter pFilter, cSort pSort, cMessageCacheItems pItems, cMessageFetchConfiguration pConfiguration) { var lContext = mRootContext.NewMethod(nameof(cIMAPClient), nameof(Messages)); var lTask = ZMessagesAsync(pMailboxHandle, pFilter, pSort, pItems, pConfiguration, lContext); mSynchroniser.Wait(lTask, lContext); return(lTask.Result); }
private static sCTorParams ZCTorParams(cFilter pA, cFilter pB) { if (pA == null) { throw new ArgumentNullException(nameof(pA)); } if (pB == null) { throw new ArgumentNullException(nameof(pB)); } sCTorParams lParams = new sCTorParams(); if (pA.ContainsMessageHandles || pB.ContainsMessageHandles) { lParams.ContainsMessageHandles = true; } if (pA.UIDValidity == null) { lParams.UIDValidity = pB.UIDValidity; } else if (pB.UIDValidity == null) { lParams.UIDValidity = pA.UIDValidity; } else if (pA.UIDValidity != pB.UIDValidity) { throw new ArgumentOutOfRangeException(); } else { lParams.UIDValidity = pA.UIDValidity; } return(lParams); }
public async Task <cMessageHandleList> SearchExtendedAsync(cMethodControl pMC, iMailboxHandle pMailboxHandle, cFilter pFilter, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cSession), nameof(SearchExtendedAsync), pMC, pMailboxHandle, pFilter); if (mDisposed) { throw new ObjectDisposedException(nameof(cSession)); } if (_ConnectionState != eConnectionState.selected) { throw new InvalidOperationException(kInvalidOperationExceptionMessage.NotSelected); } if (pMailboxHandle == null) { throw new ArgumentNullException(nameof(pMailboxHandle)); } if (pFilter == null) { throw new ArgumentNullException(nameof(pFilter)); } using (var lBuilder = new cCommandDetailsBuilder()) { lBuilder.Add(await mSelectExclusiveAccess.GetBlockAsync(pMC, lContext).ConfigureAwait(false)); // block select var lSelectedMailbox = mMailboxCache.CheckIsSelectedMailbox(pMailboxHandle, pFilter.UIDValidity); // special cases if (ReferenceEquals(pFilter, cFilter.All)) { return(new cMessageHandleList(lSelectedMailbox.MessageCache)); } if (ReferenceEquals(pFilter, cFilter.None)) { return(new cMessageHandleList()); } if (pFilter.ContainsMessageHandles) { lBuilder.Add(await mMSNUnsafeBlock.GetTokenAsync(pMC, lContext).ConfigureAwait(false)); // wait until all commands that are msnunsafe complete, block all commands that are msnunsafe } lBuilder.AddUIDValidity(lSelectedMailbox.MessageCache.UIDValidity); // if a UIDValidity change happens while the command is running, disbelieve the results lBuilder.Add(kSearchExtendedCommandPart); lBuilder.Add(pFilter, lSelectedMailbox, false, mEncodingPartFactory); var lHook = new cCommandHookSearchExtended(lBuilder.Tag, lSelectedMailbox, false); lBuilder.Add(lHook); var lResult = await mPipeline.ExecuteAsync(pMC, lBuilder.EmitCommandDetails(), lContext).ConfigureAwait(false); if (lResult.ResultType == eCommandResultType.ok) { lContext.TraceInformation("extended search success"); if (lHook.MessageHandles == null) { throw new cUnexpectedServerActionException(fCapabilities.esearch, "results not received on a successful extended search", lContext); } return(lHook.MessageHandles); } if (lHook.MessageHandles != null) { lContext.TraceError("results received on a failed extended search"); } if (lResult.ResultType == eCommandResultType.no) { throw new cUnsuccessfulCompletionException(lResult.ResponseText, fCapabilities.esearch, lContext); } throw new cProtocolErrorException(lResult, fCapabilities.esearch, lContext); } }
public cFilterNot(cFilter pNot) : base(pNot.ContainsMessageHandles, pNot.UIDValidity) { Not = pNot ?? throw new ArgumentNullException(nameof(pNot)); }
public cFilterOr(cFilter pA, cFilter pB) : base(ZCTorParams(pA, pB)) { A = pA; B = pB; }
private async Task <List <cMessage> > ZZMessagesAsync(cMethodControl pMC, iMailboxHandle pMailboxHandle, cFilter pFilter, cSort pSort, cMessageCacheItems pItems, cMessageFetchConfiguration pConfiguration, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cIMAPClient), nameof(ZZMessagesAsync), pMC, pMailboxHandle, pFilter, pSort, pItems); if (mDisposed) { throw new ObjectDisposedException(nameof(cIMAPClient)); } var lSession = mSession; if (lSession == null || lSession.ConnectionState != eConnectionState.selected) { throw new InvalidOperationException(kInvalidOperationExceptionMessage.NotSelected); } if (pMailboxHandle == null) { throw new ArgumentNullException(nameof(pMailboxHandle)); } if (pFilter == null) { throw new ArgumentNullException(nameof(pFilter)); } if (pSort == null) { throw new ArgumentNullException(nameof(pSort)); } if (pItems == null) { throw new ArgumentNullException(nameof(pItems)); } cMessageCacheItems lItems; if (ReferenceEquals(pSort, cSort.None)) { lItems = pItems; } /* de-implemented pending a requirement to complete it * else if (ReferenceEquals(pSort, cSort.ThreadOrderedSubject)) * { * if (lSession.Capabilities.ThreadOrderedSubject) return await ZMessagesThreadAsync(pMC, lSession, pHandle, eMessageThreadAlgorithm.orderedsubject, pFilter, pItems, pConfiguration, lContext).ConfigureAwait(false); * lItems = new cCacheItems(pItems.Attributes | fCacheAttributes.envelope | fCacheAttributes.received, pItems.Names); * } * else if (ReferenceEquals(pSort, cSort.ThreadReferences)) * { * if (lSession.Capabilities.ThreadReferences) return await ZMessagesThreadAsync(pMC, lSession, pHandle, eMessageThreadAlgorithm.references, pFilter, pItems, pConfiguration, lContext).ConfigureAwait(false); * lItems = new cCacheItems(pItems.Attributes | fCacheAttributes.envelope | fCacheAttributes.received, pItems.Names.Union(cHeaderFieldNames.References)); * } */ else { var lSortAttributes = pSort.Attributes(out var lSortDisplay); if (!lSortDisplay && lSession.Capabilities.Sort || lSortDisplay && lSession.Capabilities.SortDisplay) { return(await ZMessagesSortAsync(pMC, lSession, pMailboxHandle, pSort, pFilter, pItems, pConfiguration, lContext).ConfigureAwait(false)); } lItems = new cMessageCacheItems(pItems.Attributes | lSortAttributes, pItems.Names); } cMessageHandleList lMessageHandles; if (lSession.Capabilities.ESearch) { lMessageHandles = await lSession.SearchExtendedAsync(pMC, pMailboxHandle, pFilter, lContext).ConfigureAwait(false); } else { lMessageHandles = await lSession.SearchAsync(pMC, pMailboxHandle, pFilter, lContext).ConfigureAwait(false); } // get the properties await ZMessagesFetchAsync(pMC, lSession, lMessageHandles, lItems, pConfiguration, lContext).ConfigureAwait(false); if (ReferenceEquals(pSort, cSort.None)) { return(ZMessagesFlatMessageList(lMessageHandles, lContext)); } // client side sorting // de-implemented pending a requirement to complete it // if (ReferenceEquals(pSort, cSort.ThreadOrderedSubject)) return ZMessagesThreadOrderedSubject(lHandles, lContext); // if (ReferenceEquals(pSort, cSort.ThreadReferences)) return ZMessagesThreadReferences(lHandles, lContext); lMessageHandles.Sort(pSort); return(ZMessagesFlatMessageList(lMessageHandles, lContext)); }
private async Task <List <cMessage> > ZMessagesAsync(iMailboxHandle pMailboxHandle, cFilter pFilter, cSort pSort, cMessageCacheItems pItems, cMessageFetchConfiguration pConfiguration, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cIMAPClient), nameof(ZMessagesAsync), pMailboxHandle, pFilter, pSort, pItems); if (pConfiguration == null) { using (var lToken = mCancellationManager.GetToken(lContext)) { var lMC = new cMethodControl(mTimeout, lToken.CancellationToken); return(await ZZMessagesAsync(lMC, pMailboxHandle, pFilter, pSort, pItems, null, lContext).ConfigureAwait(false)); } } else { var lMC = new cMethodControl(pConfiguration.Timeout, pConfiguration.CancellationToken); return(await ZZMessagesAsync(lMC, pMailboxHandle, pFilter, pSort, pItems, pConfiguration, lContext).ConfigureAwait(false)); } }
internal Task <List <cMessage> > MessagesAsync(iMailboxHandle pMailboxHandle, cFilter pFilter, cSort pSort, cMessageCacheItems pItems, cMessageFetchConfiguration pConfiguration) { var lContext = mRootContext.NewMethod(nameof(cIMAPClient), nameof(MessagesAsync)); return(ZMessagesAsync(pMailboxHandle, pFilter, pSort, pItems, pConfiguration, lContext)); }
private async Task <List <cMessage> > ZMessagesSortAsync(cMethodControl pMC, cSession pSession, iMailboxHandle pMailboxHandle, cSort pSort, cFilter pFilter, cMessageCacheItems pItems, cMessageFetchConfiguration pConfiguration, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cIMAPClient), nameof(ZMessagesSortAsync), pMC, pMailboxHandle, pSort, pFilter, pItems); cMessageHandleList lMessageHandles; if (pSession.Capabilities.ESort) { lMessageHandles = await pSession.SortExtendedAsync(pMC, pMailboxHandle, pFilter, pSort, lContext).ConfigureAwait(false); } else { lMessageHandles = await pSession.SortAsync(pMC, pMailboxHandle, pFilter, pSort, lContext).ConfigureAwait(false); } await ZMessagesFetchAsync(pMC, pSession, lMessageHandles, pItems, pConfiguration, lContext).ConfigureAwait(false); return(ZMessagesFlatMessageList(lMessageHandles, lContext)); }