Beispiel #1
0
        /// <summary>
        /// Initialises a new instance using the specified <see cref="cMessage"/> properties.
        /// </summary>
        /// <param name="pProperties">The message properties to cache the backing data for.</param>
        public cMessageCacheItems(fMessageProperties pProperties)
        {
            Attributes = 0;

            // see comments elsewhere as to why mdnsent is commented out
            if ((pProperties & (fMessageProperties.flags | fMessageProperties.answered | fMessageProperties.flagged | fMessageProperties.deleted | fMessageProperties.seen | fMessageProperties.draft | fMessageProperties.recent | /* fMessageProperties.mdnsent | */ fMessageProperties.forwarded | fMessageProperties.submitpending | fMessageProperties.submitted)) != 0)
            {
                Attributes |= fMessageCacheAttributes.flags;
            }
            if ((pProperties & (fMessageProperties.envelope | fMessageProperties.sent | fMessageProperties.subject | fMessageProperties.basesubject | fMessageProperties.from | fMessageProperties.sender | fMessageProperties.replyto | fMessageProperties.to | fMessageProperties.cc | fMessageProperties.bcc | fMessageProperties.inreplyto | fMessageProperties.messageid)) != 0)
            {
                Attributes |= fMessageCacheAttributes.envelope;
            }
            if ((pProperties & fMessageProperties.received) != 0)
            {
                Attributes |= fMessageCacheAttributes.received;
            }
            if ((pProperties & fMessageProperties.size) != 0)
            {
                Attributes |= fMessageCacheAttributes.size;
            }
            if ((pProperties & fMessageProperties.bodystructure | fMessageProperties.attachments | fMessageProperties.plaintextsizeinbytes) != 0)
            {
                Attributes |= fMessageCacheAttributes.bodystructure;
            }
            if ((pProperties & fMessageProperties.uid) != 0)
            {
                Attributes |= fMessageCacheAttributes.uid;
            }
            if ((pProperties & fMessageProperties.modseq) != 0)
            {
                Attributes |= fMessageCacheAttributes.modseq;
            }

            cHeaderFieldNameList lNames = new cHeaderFieldNameList();

            if ((pProperties & fMessageProperties.references) != 0)
            {
                lNames.Add(kHeaderFieldName.References);
            }
            if ((pProperties & fMessageProperties.importance) != 0)
            {
                lNames.Add(kHeaderFieldName.Importance);
            }

            Names = new cHeaderFieldNames(lNames);
        }
            public void InvokeMessagePropertiesChanged(iMessageHandle pMessageHandle, fMessageProperties pProperties, cTrace.cContext pParentContext)
            {
                if (MessagePropertyChanged == null || pProperties == 0)
                {
                    return;                                                     // pre-checks for efficiency
                }
                var lContext = pParentContext.NewMethod(nameof(cCallbackSynchroniser), nameof(InvokeMessagePropertiesChanged), pMessageHandle, pProperties);

                if (mDisposed)
                {
                    throw new ObjectDisposedException(nameof(cCallbackSynchroniser));
                }

                if ((pProperties & fMessageProperties.flags) != 0)
                {
                    ZInvokeAndForgetEnqueue(new cMessagePropertyChangedEventArgs(pMessageHandle, nameof(cMessage.Flags)));
                }
                if ((pProperties & fMessageProperties.answered) != 0)
                {
                    ZInvokeAndForgetEnqueue(new cMessagePropertyChangedEventArgs(pMessageHandle, nameof(cMessage.Answered)));
                }
                if ((pProperties & fMessageProperties.flagged) != 0)
                {
                    ZInvokeAndForgetEnqueue(new cMessagePropertyChangedEventArgs(pMessageHandle, nameof(cMessage.Flagged)));
                }
                if ((pProperties & fMessageProperties.deleted) != 0)
                {
                    ZInvokeAndForgetEnqueue(new cMessagePropertyChangedEventArgs(pMessageHandle, nameof(cMessage.Deleted)));
                }
                if ((pProperties & fMessageProperties.seen) != 0)
                {
                    ZInvokeAndForgetEnqueue(new cMessagePropertyChangedEventArgs(pMessageHandle, nameof(cMessage.Seen)));
                }
                if ((pProperties & fMessageProperties.draft) != 0)
                {
                    ZInvokeAndForgetEnqueue(new cMessagePropertyChangedEventArgs(pMessageHandle, nameof(cMessage.Draft)));
                }
                if ((pProperties & fMessageProperties.recent) != 0)
                {
                    ZInvokeAndForgetEnqueue(new cMessagePropertyChangedEventArgs(pMessageHandle, nameof(cMessage.Recent)));
                }
                // see comments elsewhere as to why this is commented out
                //if ((pProperties & fMessageProperties.mdnsent) != 0) ZInvokeAndForgetEnqueue(new cMessagePropertyChangedEventArgs(pHandle, nameof(cMessage.MDNSent)));
                if ((pProperties & fMessageProperties.forwarded) != 0)
                {
                    ZInvokeAndForgetEnqueue(new cMessagePropertyChangedEventArgs(pMessageHandle, nameof(cMessage.Forwarded)));
                }
                if ((pProperties & fMessageProperties.submitpending) != 0)
                {
                    ZInvokeAndForgetEnqueue(new cMessagePropertyChangedEventArgs(pMessageHandle, nameof(cMessage.SubmitPending)));
                }
                if ((pProperties & fMessageProperties.submitted) != 0)
                {
                    ZInvokeAndForgetEnqueue(new cMessagePropertyChangedEventArgs(pMessageHandle, nameof(cMessage.Submitted)));
                }
                if (((pProperties & fMessageProperties.modseq) != 0))
                {
                    ZInvokeAndForgetEnqueue(new cMessagePropertyChangedEventArgs(pMessageHandle, nameof(cMessage.ModSeq)));
                }

                ZInvokeAndForget(lContext);
            }
Beispiel #3
0
        private void cmdPSet_Click(object sender, EventArgs e)
        {
            fMessageProperties lProperties = 0;

            if (chkPEnvelope.Checked)
            {
                lProperties |= fMessageProperties.envelope;
            }
            if (chkPSent.Checked)
            {
                lProperties |= fMessageProperties.sent;
            }
            if (chkPSubject.Checked)
            {
                lProperties |= fMessageProperties.subject;
            }
            if (chkPMessageId.Checked)
            {
                lProperties |= fMessageProperties.messageid;
            }
            if (chkPFlags.Checked)
            {
                lProperties |= fMessageProperties.flags;
            }
            if (chkPAnswered.Checked)
            {
                lProperties |= fMessageProperties.answered;
            }
            if (chkPFlagged.Checked)
            {
                lProperties |= fMessageProperties.flagged;
            }
            if (chkPSubmitted.Checked)
            {
                lProperties |= fMessageProperties.submitted;
            }
            if (chkPReceived.Checked)
            {
                lProperties |= fMessageProperties.received;
            }
            if (chkPSize.Checked)
            {
                lProperties |= fMessageProperties.size;
            }
            if (chkPUID.Checked)
            {
                lProperties |= fMessageProperties.uid;
            }
            if (chkPModSeq.Checked)
            {
                lProperties |= fMessageProperties.modseq;
            }
            if (chkPBodyStructure.Checked)
            {
                lProperties |= fMessageProperties.bodystructure;
            }
            if (chkPAttachments.Checked)
            {
                lProperties |= fMessageProperties.attachments;
            }
            if (chkPPlainTextSize.Checked)
            {
                lProperties |= fMessageProperties.plaintextsizeinbytes;
            }
            if (chkPReferences.Checked)
            {
                lProperties |= fMessageProperties.references;
            }
            if (chkPImportance.Checked)
            {
                lProperties |= fMessageProperties.importance;
            }

            mClient.DefaultMessageCacheItems = lProperties;
        }
Beispiel #4
0
                public void Update(cResponseDataFetch lFetch, out fMessageCacheAttributes rAttributesSet, out fMessageProperties rPropertiesChanged)
                {
                    rAttributesSet     = ~mAttributes & lFetch.Attributes;
                    rPropertiesChanged = 0;

                    if ((rAttributesSet & fMessageCacheAttributes.flags) != 0)
                    {
                        Flags = lFetch.Flags;
                    }
                    else if (lFetch.Flags != null)
                    {
                        foreach (var lFlag in Flags.SymmetricDifference(lFetch.Flags))
                        {
                            rAttributesSet     |= fMessageCacheAttributes.flags;
                            rPropertiesChanged |= fMessageProperties.flags | LMessageProperty(lFlag);
                        }

                        Flags = lFetch.Flags;
                    }

                    if ((rAttributesSet & fMessageCacheAttributes.envelope) != 0)
                    {
                        Envelope = lFetch.Envelope;
                    }
                    if ((rAttributesSet & fMessageCacheAttributes.received) != 0)
                    {
                        Received = lFetch.Received;
                    }
                    if ((rAttributesSet & fMessageCacheAttributes.size) != 0)
                    {
                        Size = lFetch.Size;
                    }
                    if ((rAttributesSet & fMessageCacheAttributes.body) != 0)
                    {
                        mBody = lFetch.Body;
                    }
                    if ((rAttributesSet & fMessageCacheAttributes.bodystructure) != 0)
                    {
                        BodyStructure = lFetch.BodyStructure;
                    }
                    if ((rAttributesSet & fMessageCacheAttributes.uid) != 0 && mMessageCache.UIDValidity != 0)
                    {
                        UID = new cUID(mMessageCache.UIDValidity, lFetch.UID.Value);
                    }

                    if (!mMessageCache.NoModSeq)
                    {
                        if ((rAttributesSet & fMessageCacheAttributes.modseq) != 0)
                        {
                            mModSeq = lFetch.ModSeq;
                        }
                        else if (lFetch.ModSeq != null && lFetch.ModSeq != mModSeq)
                        {
                            rAttributesSet     |= fMessageCacheAttributes.modseq;
                            rPropertiesChanged |= fMessageProperties.modseq;
                            mModSeq             = lFetch.ModSeq;
                        }
                    }

                    HeaderFields += lFetch.HeaderFields;
                    BinarySizes  += lFetch.BinarySizes;

                    mAttributes |= lFetch.Attributes;

                    fMessageProperties LMessageProperty(string pFlag)
                    {
                        if (pFlag.Equals(kMessageFlag.Answered, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return(fMessageProperties.answered);
                        }
                        if (pFlag.Equals(kMessageFlag.Flagged, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return(fMessageProperties.flagged);
                        }
                        if (pFlag.Equals(kMessageFlag.Deleted, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return(fMessageProperties.deleted);
                        }
                        if (pFlag.Equals(kMessageFlag.Seen, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return(fMessageProperties.seen);
                        }
                        if (pFlag.Equals(kMessageFlag.Draft, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return(fMessageProperties.draft);
                        }
                        if (pFlag.Equals(kMessageFlag.Recent, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return(fMessageProperties.recent);
                        }
                        // see comments elsewhere as to why this is commented out
                        //if (pFlag.Equals(kMessageFlagName.MDNSent, StringComparison.InvariantCultureIgnoreCase)) return fMessageProperties.mdnsent;
                        if (pFlag.Equals(kMessageFlag.Forwarded, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return(fMessageProperties.forwarded);
                        }
                        if (pFlag.Equals(kMessageFlag.SubmitPending, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return(fMessageProperties.submitpending);
                        }
                        if (pFlag.Equals(kMessageFlag.Submitted, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return(fMessageProperties.submitted);
                        }
                        return(0);
                    }
                }