예제 #1
0
 public virtual void OnFolderMove(MAPIFullNtf ntf)
 {
     if (_mapiListener != null)
     {
         _mapiListener.OnFolderMove(ntf);
     }
 }
예제 #2
0
 public void OnMailCopy(MAPIFullNtf ntf)
 {
     if (CheckArgument("OnMailCopy", ntf))
     {
         OnMailAdd(ntf);
     }
 }
예제 #3
0
 public virtual void OnMailCopy(MAPIFullNtf ntf)
 {
     if (_mapiListener != null)
     {
         _mapiListener.OnMailCopy(ntf);
     }
 }
예제 #4
0
 public void OnFolderMove(MAPIFullNtf ntf)
 {
     if (CheckArgument("OnFolderMove", ntf))
     {
         _jobStrategy.QueueJob(new DelegateMAPIFullNtf(OnFolderMoveImpl), ntf);
     }
 }
예제 #5
0
 public void OnMailMove(MAPIFullNtf ntf)
 {
     if (CheckArgument("OnMailMove", ntf) && Settings.ProcessMessageMove)
     {
         _jobStrategy.QueueJob(new DelegateMAPIFullNtf(OnMailMoveImpl), ntf);
     }
 }
예제 #6
0
 public MailMovedDescriptor(MAPIFullNtf ntf, string storeID)
 {
     Guard.NullArgument(ntf, "ntf");
     Guard.NullArgument(storeID, "storeID");
     _storeID = storeID;
     _ntf     = ntf;
 }
예제 #7
0
 private void OnFolderCopyImpl(MAPIFullNtf ntf)
 {
     if (CheckStorageIgnored(_storeID))
     {
         return;
     }
     FolderAddDescriptor.Do(JobPriority.AboveNormal, ntf, _storeID);
 }
예제 #8
0
 private void OnFolderMoveImpl(MAPIFullNtf ntf)
 {
     if (CheckStorageIgnored(_storeID))
     {
         return;
     }
     Core.ResourceAP.QueueJob(JobPriority.AboveNormal, new FolderModifiedDescriptor(ntf, _storeID, true));
 }
예제 #9
0
        private bool CheckArgument(string category, MAPIFullNtf ntf)
        {
            bool bRet = CheckArgument(category, (MAPINtf)ntf);

            if (_bTrace)
            {
                Trace(category, "oldParentID", ntf.OldParentID);
                Trace(category, "oldEntryID", ntf.OldEntryID);
            }
            return(bRet);
        }
예제 #10
0
 private void OnMailModifyImpl(MAPIFullNtf ntf)
 {
     if (CheckStorageIgnored(_storeID))
     {
         return;
     }
     try
     {
         IEFolder folder = OutlookSession.OpenFolder(ntf.ParentID, _storeID);
         if (folder == null)
         {
             return;
         }
         using ( folder )
         {
             FolderDescriptor folderDescriptor = FolderDescriptor.Get(folder);
             if (folderDescriptor.ContainerClass == FolderType.IMAP)
             {
                 if (!ProcessMailAddNtf.ProcessIMAPMessage(folder, ntf.EntryID))
                 {
                     return;
                 }
             }
             IEMessage message = OutlookSession.OpenMessage(ntf.EntryID, _storeID);
             if (message == null)
             {
                 return;
             }
             using ( message )
             {
                 ProcessMailModifyImpl(ntf, message, folderDescriptor);
             }
         }
     }
     catch (System.Threading.ThreadAbortException ex)
     {
         Tracer._TraceException(ex);
     }
     catch (Exception exception)
     {
         Core.ReportBackgroundException(exception);
     }
 }
예제 #11
0
        private void ProcessMailModifyImpl(MAPIFullNtf ntf, IEMessage message, FolderDescriptor folderDescriptor)
        {
            string messageClass = MessageType.GetMessageClass(message);

            if (MessageType.InterpretAsMail(messageClass))
            {
                string entryId = OutlookSession.GetMessageID(message);
                if (OutlookSession.IsMailExported(entryId))
                {
                    return;
                }
                new MailDescriptor(folderDescriptor, entryId, message, MailDescriptor.UpdateState).QueueJob(JobPriority.AboveNormal);
            }
            else if (MessageType.InterpretAsContact(messageClass))
            {
                string realEntryId = message.GetBinProp(MAPIConst.PR_ENTRYID);
                if (OutlookSession.IsMailExported(realEntryId))
                {
                    return;
                }
                ContactDescriptorWrapper.Do(folderDescriptor, realEntryId, realEntryId);
            }
            else if (MessageType.InterpretAsTask(messageClass))
            {
                _tracer.Trace("Task was modified");
                string realEntryId = message.GetBinProp(MAPIConst.PR_ENTRYID);
                if (OutlookSession.IsMailExported(realEntryId))
                {
                    return;
                }
                TaskDescriptor.Do(JobPriority.AboveNormal, folderDescriptor, message, realEntryId);
            }
            else
            {
                ntf = ntf;
//                _tracer.Trace( "Unknown item of class " + messageClass + " was modified" );
            }
        }
예제 #12
0
            public override void OnMailMove(MAPIFullNtf ntf)
            {
                Console.WriteLine("OnMailMove: " + _count);
                Console.WriteLine("ntf.EntryID: " + ntf.EntryID);
                Console.WriteLine("ntf.OntryID: " + ntf.OldEntryID);
                IEMessage message   = null;
                string    msgId     = null;
                string    recordKey = null;

                switch (_count)
                {
                case 0:
                    message = OutlookSession.OpenMessage(ntf.EntryID, _storeID);
                    if (message == null)
                    {
                        return;
                    }
                    Console.WriteLine("Subject + " + message.GetStringProp(MAPIConst.PR_SUBJECT));

                    Assert.IsNotNull(message);
                    using ( message )
                    {
                        msgId     = OutlookSession.GetMessageID(message);
                        recordKey = message.GetBinProp(MAPIConst.PR_RECORD_KEY);
                    }
                    Console.WriteLine("Id1: " + msgId);
                    Console.WriteLine("Id2: " + _messageID);
                    if (msgId != _messageID)
                    {
                        if (recordKey == _recordKey)
                        {
                            _messageID = msgId;
                        }
                        else
                        {
                            return;
                        }
                    }
                    Console.WriteLine("PID = " + ntf.ParentID);
                    Console.WriteLine("OID = " + ntf.OldParentID);
                    Console.WriteLine("FID = " + _folderFirst.FolderIDs.EntryId);
                    Console.WriteLine("SID = " + _folderSecond.FolderIDs.EntryId);
                    Assert.AreEqual(GetFolderID(ntf.ParentID), _folderSecond.FolderIDs.EntryId);
                    Assert.AreEqual(GetFolderID(ntf.OldParentID), _folderFirst.FolderIDs.EntryId);
                    ++_count;
                    _complete = true;
                    break;

                case 1:
                    message = OutlookSession.OpenMessage(ntf.EntryID, _storeID);
                    if (message == null)
                    {
                        return;
                    }
                    Console.WriteLine(message.GetStringProp(MAPIConst.PR_SUBJECT));

                    Assert.IsNotNull(message);
                    using ( message )
                    {
                        msgId     = OutlookSession.GetMessageID(message);
                        recordKey = message.GetBinProp(MAPIConst.PR_RECORD_KEY);
                    }
                    Console.WriteLine("Id1: " + msgId);
                    Console.WriteLine("Id2: " + _messageID);
                    if (msgId != _messageID)
                    {
                        if (recordKey == _recordKey)
                        {
                            _messageID = msgId;
                        }
                        else
                        {
                            return;
                        }
                    }
                    Assert.AreEqual(GetFolderID(ntf.ParentID), _folderFirst.FolderIDs.EntryId);
                    Assert.AreEqual(GetFolderID(ntf.OldParentID), _folderSecond.FolderIDs.EntryId);
                    ++_count;
                    _complete = true;
                    break;
                }
            }
예제 #13
0
 public virtual void OnMailMove(MAPIFullNtf ntf)
 {
 }
예제 #14
0
 public virtual void OnMailCopy(MAPIFullNtf ntf)
 {
 }
예제 #15
0
 public virtual void OnFolderCopy(MAPIFullNtf ntf)
 {
 }
예제 #16
0
 public virtual void OnFolderMove(MAPIFullNtf ntf)
 {
 }
예제 #17
0
        private void OnMailMoveImpl(MAPIFullNtf ntf)
        {
            if (CheckStorageIgnored(_storeID))
            {
                return;
            }
            FolderDescriptor folderDescriptor = FolderDescriptor.Get(ntf.ParentID, _storeID);

            if (folderDescriptor == null)
            {
                return;
            }

            try
            {
                IEMessage message = OutlookSession.OpenMessage(ntf.EntryID, _storeID);
                if (message == null)
                {
                    return;
                }
                using ( message )
                {
                    string realID = message.GetBinProp(MAPIConst.PR_ENTRYID);
                    if (realID == null)
                    {
                        realID = ntf.EntryID;
                    }
                    else
                    {
                        if (OutlookSession.IsMailExported(realID))
                        {
                            return;
                        }
                    }
                    string messageClass = MessageType.GetMessageClass(message);
                    if (MessageType.InterpretAsMail(messageClass))
                    {
                        Core.ResourceAP.QueueJob(JobPriority.AboveNormal, new MailMovedDescriptor(ntf, _storeID));
                    }
                    else
                    if (MessageType.InterpretAsContact(messageClass))
                    {
                        if (folderDescriptor.ContainerClass != FolderType.Contact)
                        {
                            _tracer.Trace("Contact was moved to deleted items");
                            IResource contact = Core.ResourceStore.FindUniqueResource(STR.Contact, PROP.EntryID, realID);
                            string    entryID = realID;
                            if (contact == null && ntf.OldEntryID != null)
                            {
                                _tracer.Trace("contact not found");
                                contact = Core.ResourceStore.FindUniqueResource(STR.Contact, PROP.EntryID, ntf.OldEntryID);
                                entryID = ntf.EntryID;
                            }
                            if (contact != null)
                            {
                                _tracer.Trace("contact found");
                                _tracer.Trace("RemoveFromSync");
                                Contact.RemoveFromSync(contact, entryID);
                            }
                            else
                            {
                                _tracer.Trace("ClearInvalidEntryIDFromContacts");
                                _jobStrategy.QueueJob(new MethodInvoker(REGISTRY.ClearInvalidEntryIDFromContacts));
                            }
                        }
                        else
                        {
                            string searchEntryID = realID;
                            if (realID != ntf.OldEntryID)
                            {
                                searchEntryID = ntf.OldEntryID;
                            }

                            _tracer.Trace("ContactDescriptorWrapper process moving");
                            ContactDescriptorWrapper.Do(_jobStrategy.JobPriority, folderDescriptor, realID, searchEntryID);
                        }
                        //OutlookSession.OutlookProcessor.QueueJob( new ContactDescriptorWrapper( folderDescriptor, ntf.EntryID ) );
                    }
                    else if (MessageType.InterpretAsTask(messageClass))
                    {
                        _tracer.Trace("Task was moved");
                        if (Core.ResourceStore.FindUniqueResource(STR.Task, PROP.EntryID, realID) != null)
                        {
                            TaskDescriptor.Do(JobPriority.AboveNormal, folderDescriptor, message, realID);
                        }
                        else
                        {
                            RefreshTaskFolder(folderDescriptor);
                            FolderDescriptor oldFolderDescriptor = FolderDescriptor.Get(ntf.OldParentID, _storeID);
                            if (oldFolderDescriptor != null)
                            {
                                RefreshTaskFolder(oldFolderDescriptor);
                            }
                        }
                    }
                    else
                    {
                        _tracer.Trace("Unknown item of class " + messageClass + " was moved");
                    }
                }
            }
            catch (System.Threading.ThreadAbortException ex)
            {
                Tracer._TraceException(ex);
            }
            catch (Exception exception)
            {
                Core.ReportBackgroundException(exception);
            }
        }
예제 #18
0
 public virtual void OnMailModify(MAPIFullNtf ntf)
 {
 }