Exemple #1
0
        private bool ShouldEnumerateFolder(IStorePropertyBag folder, ContactFoldersEnumerator.DeletedItemsFolderEnumerationState deletedItemsFolderEnumerationState)
        {
            object obj            = folder.TryGetProperty(FolderSchema.Id);
            object obj2           = folder.TryGetProperty(StoreObjectSchema.ContainerClass);
            string valueOrDefault = folder.GetValueOrDefault <string>(FolderSchema.DisplayName, string.Empty);

            if (obj is PropertyError || obj2 is PropertyError)
            {
                ContactFoldersEnumerator.Tracer.TraceDebug <string, object, object>((long)this.GetHashCode(), "Skiping bogus folder (DisplayName:{0}) without ID ({1}) or container class ({2})", valueOrDefault, obj, obj2);
                return(false);
            }
            if (this.ShouldSkipDeletedFolders && this.IsDeletedFolder(folder, deletedItemsFolderEnumerationState))
            {
                ContactFoldersEnumerator.Tracer.TraceDebug <object, string>((long)this.GetHashCode(), "Skiping deleted folder - ID:{0}, DisplayName:{1}.", obj, valueOrDefault);
                return(false);
            }
            if (!ObjectClass.IsContactsFolder((string)obj2))
            {
                ContactFoldersEnumerator.Tracer.TraceDebug <object, object, string>((long)this.GetHashCode(), "Skiping non-contact folder - ID:{0}, ContainerClass:{1}, DisplayName:{2}.", obj, obj2, valueOrDefault);
                return(false);
            }
            if (this.ShouldSkipHiddenFolders && folder.TryGetProperty(FolderSchema.IsHidden) is bool && (bool)folder.TryGetProperty(FolderSchema.IsHidden))
            {
                ContactFoldersEnumerator.Tracer.TraceDebug <object, string>((long)this.GetHashCode(), "Skiping hidden folder - ID:{0}, DisplayName:{1}.", obj, valueOrDefault);
                return(false);
            }
            ContactFoldersEnumerator.Tracer.TraceDebug <object, string>((long)this.GetHashCode(), "Enumerating folder - ID:{0}, DisplayName:{1}.", obj, valueOrDefault);
            return(true);
        }
 private static OutlookModule GetModuleForObjectClass(string objectClass)
 {
     if (objectClass == null)
     {
         return(OutlookModule.None);
     }
     if (ObjectClass.IsCalendarFolder(objectClass) || ObjectClass.IsCalendarItem(objectClass))
     {
         return(OutlookModule.Calendar);
     }
     if (ObjectClass.IsContactsFolder(objectClass) || ObjectClass.IsContact(objectClass) || ObjectClass.IsDistributionList(objectClass))
     {
         return(OutlookModule.Contacts);
     }
     if (ObjectClass.IsJournalFolder(objectClass) || ObjectClass.IsJournalItem(objectClass))
     {
         return(OutlookModule.Journal);
     }
     if (ObjectClass.IsNotesFolder(objectClass) || ObjectClass.IsNotesItem(objectClass))
     {
         return(OutlookModule.Notes);
     }
     if (ObjectClass.IsTaskFolder(objectClass) || ObjectClass.IsTask(objectClass))
     {
         return(OutlookModule.Tasks);
     }
     if (ObjectClass.IsMessageFolder(objectClass) || ObjectClass.IsMessage(objectClass, false) || ObjectClass.IsMeetingMessage(objectClass) || ObjectClass.IsTaskRequest(objectClass) || ObjectClass.IsReport(objectClass))
     {
         return(OutlookModule.Mail);
     }
     return(OutlookModule.None);
 }
Exemple #3
0
        private IEnumerable <IStorePropertyBag> EnumerateCandidatesThatMatchDefaultNamingConvention()
        {
            string defaultFolderDisplayName;

            if (!OscProviderRegistry.TryGetDefaultFolderDisplayName(this.provider, out defaultFolderDisplayName))
            {
                OscProviderCandidateFolderEnumerator.Tracer.TraceDebug <Guid>((long)this.GetHashCode(), "Candidate folder enumerator: provider {0} is unknown.  Cannot enumerate candidates that match naming convention", this.provider);
            }
            else
            {
                TextFilter displayNameStartsWithProviderName = new TextFilter(FolderSchema.DisplayName, defaultFolderDisplayName, MatchOptions.Prefix, MatchFlags.IgnoreCase);
                OscProviderCandidateFolderEnumerator.Tracer.TraceDebug <Guid, string>((long)this.GetHashCode(), "Candidate folder enumerator: the default folder display name for provider {0} is {1}", this.provider, defaultFolderDisplayName);
                using (IFolder rootFolder = this.xsoFactory.BindToFolder(this.session, this.session.GetDefaultFolderId(DefaultFolderType.Root)))
                {
                    using (IQueryResult subFoldersQuery = rootFolder.IFolderQuery(FolderQueryFlags.None, null, OscProviderCandidateFolderEnumerator.SortByDisplayNameAscending, OscProviderCandidateFolderEnumerator.FolderPropertiesToLoad))
                    {
                        if (!subFoldersQuery.SeekToCondition(SeekReference.OriginBeginning, displayNameStartsWithProviderName, SeekToConditionFlags.AllowExtendedFilters))
                        {
                            OscProviderCandidateFolderEnumerator.Tracer.TraceDebug <string>((long)this.GetHashCode(), "Candidate folder enumerator: SeekToCondition = false.  No folder has display name matching {0}", defaultFolderDisplayName);
                            yield break;
                        }
                        IStorePropertyBag[] folders = subFoldersQuery.GetPropertyBags(10);
                        while (folders.Length > 0)
                        {
                            foreach (IStorePropertyBag folder in folders)
                            {
                                string      displayName = folder.GetValueOrDefault <string>(FolderSchema.DisplayName, string.Empty);
                                VersionedId folderId    = folder.GetValueOrDefault <VersionedId>(FolderSchema.Id, null);
                                if (folderId == null)
                                {
                                    OscProviderCandidateFolderEnumerator.Tracer.TraceError <string>((long)this.GetHashCode(), "Candidate folder enumerator: skipping bogus folder '{0}' because it has a blank id.", displayName);
                                }
                                else
                                {
                                    string containerClass = folder.GetValueOrDefault <string>(StoreObjectSchema.ContainerClass, string.Empty);
                                    if (string.IsNullOrEmpty(containerClass) || !ObjectClass.IsContactsFolder(containerClass))
                                    {
                                        OscProviderCandidateFolderEnumerator.Tracer.TraceDebug <string, VersionedId>((long)this.GetHashCode(), "Candidate folder enumerator: skipping folder '{0}' (ID={1}) because it's not a contacts folder.", displayName, folderId);
                                    }
                                    else
                                    {
                                        if (string.IsNullOrEmpty(displayName) || !displayName.StartsWith(defaultFolderDisplayName, StringComparison.OrdinalIgnoreCase))
                                        {
                                            OscProviderCandidateFolderEnumerator.Tracer.TraceDebug <string>((long)this.GetHashCode(), "Candidate folder enumerator: we've iterated past candidates that follow the naming convention.  Current folder is '{0}'", displayName);
                                            yield break;
                                        }
                                        OscProviderCandidateFolderEnumerator.Tracer.TraceDebug <string, VersionedId>((long)this.GetHashCode(), "Candidate folder enumerator: folder: {0}; id: {1}; is a good candidate.", displayName, folderId);
                                        yield return(folder);
                                    }
                                }
                            }
                            folders = subFoldersQuery.GetPropertyBags(10);
                        }
                    }
                }
            }
            yield break;
        }
        public bool SkipItemOperation(COWSettings settings, IDumpsterItemOperations dumpster, COWTriggerAction operation, COWTriggerActionState state, StoreSession session, StoreObjectId itemId, CoreItem item, bool onBeforeNotification, bool onDumpster, bool success, CallbackContext callbackContext)
        {
            if (!COWContactLogging.COWContactLoggingConfiguration.Instance.IsLoggingEnabled())
            {
                return(true);
            }
            Util.ThrowOnNullArgument(session, "session");
            EnumValidator.ThrowIfInvalid <COWTriggerAction>(operation, "operation");
            EnumValidator.ThrowIfInvalid <COWTriggerActionState>(state, "state");
            if (item == null)
            {
                COWContactLogging.Tracer.TraceDebug((long)this.GetHashCode(), "COWContactLogging.SkipItemOperation: Item is null");
                return(true);
            }
            if (!onBeforeNotification)
            {
                COWContactLogging.Tracer.TraceDebug((long)this.GetHashCode(), "COWContactLogging.SkipItemOperation: Not onBeforeNotification");
                return(true);
            }
            string valueOrDefault = item.PropertyBag.GetValueOrDefault <string>(StoreObjectSchema.ItemClass, string.Empty);

            COWContactLogging.Tracer.TraceDebug <string>((long)this.GetHashCode(), "COWContactLogging.SkipItemOperation: ItemClass: {0}", valueOrDefault);
            if (ObjectClass.IsPlace(valueOrDefault))
            {
                return(true);
            }
            if (!ObjectClass.IsContact(valueOrDefault) && !ObjectClass.IsDistributionList(valueOrDefault) && !ObjectClass.IsContactsFolder(valueOrDefault))
            {
                return(true);
            }
            foreach (IContactChangeTracker contactChangeTracker in COWContactLogging.ChangeTrackers)
            {
                if (contactChangeTracker.ShouldLoadPropertiesForFurtherCheck(operation, valueOrDefault, itemId, item))
                {
                    COWContactLogging.Tracer.TraceDebug((long)this.GetHashCode(), "COWContactLogging.SkipItemOperation: A tracker interested.");
                    return(false);
                }
            }
            return(true);
        }
Exemple #5
0
 public static StoreObjectType GetObjectType(string itemClass)
 {
     if (ObjectClass.IsOfClass(itemClass, "IPM.Note.Rules.OofTemplate.Microsoft", false))
     {
         return(StoreObjectType.OofMessage);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Note.Rules.ExternalOofTemplate.Microsoft", false))
     {
         return(StoreObjectType.ExternalOofMessage);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Note.Reminder"))
     {
         return(StoreObjectType.ReminderMessage);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Note"))
     {
         return(StoreObjectType.Message);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Post"))
     {
         return(StoreObjectType.Post);
     }
     if (ObjectClass.IsReport(itemClass))
     {
         return(StoreObjectType.Report);
     }
     if (ObjectClass.IsCalendarItem(itemClass))
     {
         return(StoreObjectType.CalendarItem);
     }
     if (ObjectClass.IsCalendarItemSeries(itemClass))
     {
         return(StoreObjectType.CalendarItemSeries);
     }
     if (ObjectClass.IsMeetingRequestSeries(itemClass))
     {
         return(StoreObjectType.MeetingRequestSeries);
     }
     if (ObjectClass.IsMeetingRequest(itemClass))
     {
         return(StoreObjectType.MeetingRequest);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.MeetingMessageSeries.Resp"))
     {
         return(StoreObjectType.MeetingResponseSeries);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Schedule.Meeting.Resp"))
     {
         return(StoreObjectType.MeetingResponse);
     }
     if (ObjectClass.IsMeetingCancellationSeries(itemClass))
     {
         return(StoreObjectType.MeetingCancellationSeries);
     }
     if (ObjectClass.IsMeetingCancellation(itemClass))
     {
         return(StoreObjectType.MeetingCancellation);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Schedule.Meeting.Notification.Forward"))
     {
         return(StoreObjectType.MeetingForwardNotification);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.MeetingMessageSeries.Notification.Forward"))
     {
         return(StoreObjectType.MeetingForwardNotificationSeries);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Notification.Meeting"))
     {
         return(StoreObjectType.MeetingForwardNotification);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Schedule.Inquiry"))
     {
         return(StoreObjectType.MeetingInquiryMessage);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Contact.Place"))
     {
         return(StoreObjectType.Place);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Contact"))
     {
         return(StoreObjectType.Contact);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.UserPhoto.Preview"))
     {
         return(StoreObjectType.UserPhotoPreview);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.UserPhoto"))
     {
         return(StoreObjectType.UserPhoto);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.DistList"))
     {
         return(StoreObjectType.DistributionList);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Task"))
     {
         return(StoreObjectType.Task);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.TaskRequest"))
     {
         return(StoreObjectType.TaskRequest);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.ConversationAction"))
     {
         return(StoreObjectType.ConversationActionItem);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Note.rpmsg.Microsoft.Voicemail.UM.CA"))
     {
         return(StoreObjectType.Message);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Note.rpmsg.Microsoft.Voicemail.UM"))
     {
         return(StoreObjectType.Message);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.Sharing", false))
     {
         return(StoreObjectType.SharingMessage);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.GroupMailbox.JoinRequest"))
     {
         return(StoreObjectType.GroupMailboxRequestMessage);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.MailboxAssociation.Group"))
     {
         return(StoreObjectType.MailboxAssociationGroup);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.MailboxAssociation.User"))
     {
         return(StoreObjectType.MailboxAssociationUser);
     }
     if (ObjectClass.IsOfClass(itemClass, "IPM.HierarchySync.Metadata"))
     {
         return(StoreObjectType.HierarchySyncMetadata);
     }
     if (ObjectClass.IsSubscriptionDataItem(itemClass))
     {
         return(StoreObjectType.PushNotificationSubscription);
     }
     if (ObjectClass.IsOutlookServiceSubscriptionDataItem(itemClass))
     {
         return(StoreObjectType.OutlookServiceSubscription);
     }
     if (ObjectClass.IsConfigurationItem(itemClass))
     {
         return(StoreObjectType.Configuration);
     }
     if (ObjectClass.IsParkedMeetingMessage(itemClass))
     {
         return(StoreObjectType.ParkedMeetingMessage);
     }
     if (ObjectClass.IsGenericMessage(itemClass))
     {
         return(StoreObjectType.Message);
     }
     if (ObjectClass.IsCalendarFolder(itemClass))
     {
         return(StoreObjectType.CalendarFolder);
     }
     if (ObjectClass.IsContactsFolder(itemClass))
     {
         return(StoreObjectType.ContactsFolder);
     }
     if (ObjectClass.IsTaskFolder(itemClass))
     {
         return(StoreObjectType.TasksFolder);
     }
     if (ObjectClass.IsNotesFolder(itemClass))
     {
         return(StoreObjectType.NotesFolder);
     }
     if (ObjectClass.IsJournalFolder(itemClass))
     {
         return(StoreObjectType.JournalFolder);
     }
     if (ObjectClass.IsShortcutFolder(itemClass))
     {
         return(StoreObjectType.ShortcutFolder);
     }
     if (ObjectClass.IsGenericFolder(itemClass))
     {
         return(StoreObjectType.Folder);
     }
     return(StoreObjectType.Unknown);
 }