Exemple #1
0
 public virtual void OnNewMail(MAPINtf ntf)
 {
     if (_mapiListener != null)
     {
         _mapiListener.OnNewMail(ntf);
     }
 }
Exemple #2
0
 public virtual void OnFolderDelete(MAPINtf ntf)
 {
     if (_mapiListener != null)
     {
         _mapiListener.OnFolderDelete(ntf);
     }
 }
Exemple #3
0
        public FolderModifiedDescriptor(MAPINtf ntf, string storeID, bool isMovedFolder)
        {
            Guard.NullArgument(ntf, "ntf");
            _isMovedFolder = isMovedFolder;
            IEFolder folder = OutlookSession.OpenFolder(ntf.EntryID, storeID);

            if (folder != null)
            {
                using ( folder )
                {
                    _folder = FolderDescriptor.Get(folder);
                    if (ntf.ParentID != null && ntf.ParentID.Length > 0)
                    {
                        IEFolder parentFolder =
                            OutlookSession.OpenFolder(ntf.ParentID, storeID);
                        if (parentFolder != null)
                        {
                            using ( parentFolder )
                            {
                                _parentFolder = FolderDescriptor.Get(parentFolder);
                            }
                        }
                    }
                }
            }
        }
Exemple #4
0
 public void OnMailAdd(MAPINtf ntf)
 {
     if (CheckArgument("OnMailAdd", ntf) && Settings.ProcessMessageAdd)
     {
         _jobStrategy.QueueJob(new DelegateMAPINtf(OnMailAddImpl), ntf);
     }
 }
Exemple #5
0
 public void OnNewMail(MAPINtf ntf)
 {
     if (CheckArgument("OnNewMail", ntf) && Settings.ProcessMessageNew)
     {
         _jobStrategy.QueueJob(new DelegateMAPINtf(OnNewMailImpl), ntf);
     }
 }
Exemple #6
0
 private void OnMailDeleteImpl(MAPINtf ntf)
 {
     if (!CheckStorageIgnored(_storeID))
     {
         Core.ResourceAP.QueueJob(JobPriority.AboveNormal, new MailDeletedDescriptor(ntf, _storeID));
     }
 }
Exemple #7
0
 public void OnFolderModify(MAPINtf ntf)
 {
     if (CheckArgument("OnFolderModify", ntf) && Settings.ProcessFolderModify)
     {
         _jobStrategy.QueueJob(new DelegateMAPINtf(OnFolderModifyImpl), ntf);
     }
 }
Exemple #8
0
 public void OnFolderDelete(MAPINtf ntf)
 {
     if (CheckArgument("OnFolderDelete", ntf))
     {
         _jobStrategy.QueueJob(new DelegateMAPINtf(OnFolderDeleteImpl), ntf);
     }
 }
Exemple #9
0
 public virtual void OnMailAdd(MAPINtf ntf)
 {
     if (_mapiListener != null)
     {
         _mapiListener.OnMailAdd(ntf);
     }
 }
Exemple #10
0
 public virtual void OnFolderModify(MAPINtf ntf)
 {
     if (_mapiListener != null)
     {
         _mapiListener.OnFolderModify(ntf);
     }
 }
Exemple #11
0
 private void OnFolderDeleteImpl(MAPINtf ntf)
 {
     if (CheckStorageIgnored(_storeID))
     {
         return;
     }
     Core.ResourceAP.QueueJob(JobPriority.AboveNormal, new FolderDeletedDescriptor(ntf, _storeID));
 }
Exemple #12
0
 private void OnFolderAddImpl(MAPINtf ntf)
 {
     if (CheckStorageIgnored(_storeID))
     {
         return;
     }
     FolderAddDescriptor.Do(JobPriority.AboveNormal, ntf, _storeID);
 }
Exemple #13
0
 private void OnMailAddImpl(MAPINtf ntf)
 {
     if (CheckStorageIgnored(_storeID))
     {
         return;
     }
     ProcessMailAddNtf.DoJob(ntf, _storeID);
 }
Exemple #14
0
        public static void Do(JobPriority jobPriority, MAPINtf ntf, string storeID)
        {
            FolderAddDescriptor descriptor = new FolderAddDescriptor(ntf, storeID);

            if (descriptor.GetParentFolder() != null)
            {
                Core.ResourceAP.QueueJob(jobPriority, descriptor);
            }
        }
Exemple #15
0
        public MailDeletedDescriptor(MAPINtf ntf, string storeId)
        {
            Guard.NullArgument(ntf, "ntf");
            Guard.NullArgument(storeId, "storeID");
            IEMessage deletedItem = OutlookSession.OpenMessage(ntf.EntryID, storeId);

            if (deletedItem != null)
            {
                using ( deletedItem )
                {
                    Trace.WriteLine("Successfully opened deleted item resource");
                    string entryId = OutlookSession.GetMessageID(deletedItem);
                    if (String.IsNullOrEmpty(entryId))
                    {
                        throw new ArgumentNullException("entryId", "MailDeletedDescriptor -- NULL entryId string of the existing IEMessage");
                    }

                    FindResourcesByEntryId(entryId);
                }
            }
            else
            {
                FindResourcesByEntryId(ntf.EntryID);
                if (_resourceToDelete != null)
                {
                    return;
                }

                // we've got a short-term entry ID in the notification; we need to scan the parent
                // folder to find the resources which need to be deleted
                IEFolder parentFolder = OutlookSession.OpenFolder(ntf.ParentID, storeId);
                if (parentFolder != null)
                {
                    using ( parentFolder )
                    {
                        string    parentId         = OutlookSession.GetFolderID(parentFolder);
                        IResource parentMAPIFolder = Folder.Find(parentId);
                        if (parentMAPIFolder != null)
                        {
                            if (Folder.IsFolderOfType(parentMAPIFolder, FolderType.Contact))
                            {
                                RemoveContactFromSync(parentId, storeId);
                                return;
                            }

                            //  Deletion from the folder which we ignore anyway
                            //  must not lead to a great performance loss.
                            if (!parentMAPIFolder.HasProp(PROP.IgnoredFolder))
                            {
                                FindResourceToDelete(parentFolder, parentMAPIFolder, storeId);
                            }
                        }
                    }
                }
            }
        }
Exemple #16
0
        public void OnMailDelete(MAPINtf ntf)
        {
            if (CheckArgument("OnMailDelete", ntf))
            {
                Trace("Attempt to ignore OnMailDelete");
            }

            //if ( CheckArgument( "OnMailDelete", ntf ) )
            {
                _jobStrategy.QueueJob(new DelegateMAPINtf(OnMailDeleteImpl), ntf);
            }
        }
Exemple #17
0
        public static void DoJob(MAPINtf ntf, string storeID)
        {
            if (ntf == null)
            {
                return;
            }

            try
            {
                IEFolder folder = OutlookSession.OpenFolder(ntf.ParentID, storeID);
                if (folder == null)
                {
                    return;
                }
                FolderDescriptor folderDescriptor = FolderDescriptor.Get(folder);
                if (folderDescriptor == null)
                {
                    return;
                }
                using ( folder )
                {
                    if (folderDescriptor.ContainerClass == FolderType.IMAP)
                    {
                        if (!ProcessIMAPMessage(folder, ntf.EntryID))
                        {
                            return;
                        }
                    }
                    IEMessage message = OutlookSession.OpenMessage(ntf.EntryID, storeID);
                    if (message == null)
                    {
                        return;
                    }
                    using ( message )
                    {
                        DoJobImpl(ntf, message, folderDescriptor);
                    }
                }
            }
            catch (System.Threading.ThreadAbortException exception)
            {
                Tracer._TraceException(exception);
            }
            catch (Exception exception)
            {
                Core.ReportException(exception, ExceptionReportFlags.AttachLog);
            }
        }
Exemple #18
0
 private bool CheckArgument(string category, MAPINtf ntf)
 {
     Guard.NullArgument(ntf, "ntf");
     if (_bTrace)
     {
         Trace(category, ntf);
     }
     if (ntf.EntryID != null && ntf.EntryID.Length > 0)
     {
         bool ret = OutlookSession.IsMailExported(ntf.EntryID);
         if (ret)
         {
             Trace(category + ": event is ignored");
         }
         return(!ret);
     }
     return(true);
 }
Exemple #19
0
        public static void DoJobImpl(MAPINtf ntf, IEMessage message, FolderDescriptor folderDescriptor)
        {
            string entryId      = OutlookSession.GetMessageID(message);
            string messageClass = MessageType.GetMessageClass(message);

            if (MessageType.InterpretAsMail(messageClass))
            {
                new MailDescriptor(folderDescriptor, entryId, message).QueueJob(JobPriority.AboveNormal);
            }
            else if (MessageType.InterpretAsContact(messageClass))
            {
                ContactDescriptorWrapper.Do(JobPriority.AboveNormal, folderDescriptor, entryId, entryId);
            }
            else if (MessageType.InterpretAsTask(messageClass))
            {
                Tracer._Trace("Task was added");
                TaskDescriptor.Do(JobPriority.AboveNormal, folderDescriptor, message, entryId);
            }
            else
            {
                Tracer._Trace("Unknown item of class " + messageClass + " was added");
            }
        }
Exemple #20
0
 private void OnFolderModifyImpl(MAPINtf ntf)
 {
     Core.ResourceAP.QueueJob(new FolderModifiedDescriptor(ntf, _storeID, false));
 }
Exemple #21
0
 public virtual void OnFolderAdd(MAPINtf ntf)
 {
 }
Exemple #22
0
 public virtual void OnFolderModify(MAPINtf ntf)
 {
 }
Exemple #23
0
        public FolderDeletedDescriptor(MAPINtf ntf, string storeID)
        {
            Guard.NullArgument(ntf, "ntf");
            Guard.EmptyStringArgument(storeID, "storeID");
            _ntf     = ntf;
            _storeID = storeID;

            // The notification contains only the short-term entry ID, and since the
            // folder has already been deleted, it is no longer possible to get the
            // long-term entry ID. Thus, we need to scan the children of the parent of
            // the deleted folder and check if all of them still exist.
            IResource resFolder = Folder.Find(ntf.EntryID);

            if (resFolder == null)
            {
                IEFolder parentFolder =
                    OutlookSession.OpenFolder(ntf.ParentID, storeID);
                if (parentFolder != null)
                {
                    using ( parentFolder )
                    {
                        string    parentId         = OutlookSession.GetFolderID(parentFolder);
                        IResource parentMAPIFolder = Folder.Find(parentId);
                        if (parentMAPIFolder == null)
                        {
                            parentMAPIFolder = Folder.Find(ntf.ParentID);
                        }

                        if (parentMAPIFolder != null)
                        {
                            IResourceList childFolders = parentMAPIFolder.GetLinksTo("MAPIFolder", "Parent");
                            foreach (IResource childFolderRes in childFolders)
                            {
                                IEFolder childFolder = OutlookSession.OpenFolder(childFolderRes.GetStringProp("EntryID"),
                                                                                 storeID);
                                if (childFolder != null)
                                {
                                    childFolder.Dispose();
                                }
                                else
                                {
                                    _entryId = childFolderRes.GetStringProp("EntryID");
                                }
                            }

                            if (_entryId == null)
                            {
                                HashSet set = new HashSet(childFolders.Count);
                                foreach (IResource childFolderRes in childFolders)
                                {
                                    set.Add(childFolderRes.GetStringProp("EntryID"));
                                }

                                IEFolders folders = OutlookSession.GetFolders(parentFolder);
                                if (folders != null)
                                {
                                    using ( folders )
                                    {
                                        for (int i = 0; i < folders.GetCount(); ++i)
                                        {
                                            IEFolder folder = OutlookSession.OpenFolder(folders, i);
                                            if (folder != null)
                                            {
                                                using ( folder )
                                                {
                                                    string entryId = folder.GetBinProp(MAPIConst.PR_ENTRYID);
                                                    if (entryId != null)
                                                    {
                                                        set.Remove(entryId);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                foreach (HashSet.Entry entry in set)
                                {
                                    _entryId = (string)entry.Key;
                                    break;
                                }

                                if (_entryId == null && Retry)
                                {
                                    OutlookSession.OutlookProcessor.QueueJobAt(DateTime.Now.AddMinutes(2), "Delete folder",
                                                                               new MethodInvoker(CreateFolderDeletedDescriptor));
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                _entryId = ntf.EntryID;
            }
        }
Exemple #24
0
 public virtual void OnNewMail(MAPINtf ntf)
 {
 }
Exemple #25
0
 public virtual void OnMailAdd(MAPINtf ntf)
 {
 }
Exemple #26
0
 public virtual void OnFolderDelete(MAPINtf ntf)
 {
 }
Exemple #27
0
 private FolderAddDescriptor(MAPINtf ntf, string storeID) : base(ntf, storeID, false)
 {
 }
Exemple #28
0
 private void Trace(string category, MAPINtf ntf)
 {
     Trace(category, "storeID", _storeID);
     Trace(category, "parentID", ntf.ParentID);
     Trace(category, "entryID", ntf.EntryID);
 }
Exemple #29
0
        private void OnNewMailImpl(MAPINtf ntf)
        {
            Trace("[New] *Email* - OnNewMailImpl");
            if (CheckStorageIgnored(_storeID))
            {
                Trace("OnNewMailImpl: storage is ignored");
                return;
            }
            FolderDescriptor folderDescriptor = FolderDescriptor.Get(ntf.ParentID, _storeID);

            if (folderDescriptor == null)
            {
                Trace("OnNewMailImpl: folderDescriptor == null");
                return;
            }

            if (folderDescriptor.ContainerClass == FolderType.IMAP)
            {
                IEFolder folder = OutlookSession.OpenFolder(ntf.ParentID, _storeID);
                if (folder == null)
                {
                    return;
                }
                using ( folder )
                {
                    if (!ProcessMailAddNtf.ProcessIMAPMessage(folder, ntf.EntryID))
                    {
                        return;
                    }
                }
            }

            IEMessage message = OutlookSession.OpenMessage(ntf.EntryID, _storeID);

            if (message == null)
            {
                Trace("OnNewMailImpl: cannot open mapi message");
                return;
            }
            using ( message )
            {
                try
                {
                    string entryId = OutlookSession.GetMessageID(message);
                    if (OutlookSession.IsMailExported(entryId))
                    {
                        Trace("OnNewMailImpl: mail is exported at the moment");
                        return;
                    }
                    new NewMailDescriptor(folderDescriptor, entryId, message).QueueJob(JobPriority.AboveNormal);
                }
                catch (System.Threading.ThreadAbortException ex)
                {
                    Tracer._TraceException(ex);
                }
                catch (Exception exception)
                {
                    Core.ReportBackgroundException(exception);
                }
            }
        }
Exemple #30
0
 public virtual void OnMailDelete(MAPINtf ntf)
 {
 }