// Token: 0x060003D4 RID: 980 RVA: 0x0001B9C0 File Offset: 0x00019BC0
        private bool PreScreenPassed(object[] itemProperties, PropertyIndexHolder propertyIndexHolder, out string itemClass)
        {
            itemClass = null;
            VersionedId versionedId = itemProperties[propertyIndexHolder.IdIndex] as VersionedId;

            if (versionedId == null)
            {
                ExpirationTagEnforcer.Tracer.TraceError <ExpirationTagEnforcer>((long)this.GetHashCode(), "{0}: We could not get id of this item. Skipping it.", this);
                return(false);
            }
            StoreObjectId storeObjectId = itemProperties[propertyIndexHolder.ParentItemIdIndex] as StoreObjectId;

            if (storeObjectId == null)
            {
                ExpirationTagEnforcer.Tracer.TraceError <ExpirationTagEnforcer>((long)this.GetHashCode(), "{0}: We could not get parent id of this item. Skipping it.", this);
                return(false);
            }
            if (base.MailboxDataForTags.CorruptItemList.Contains(versionedId.ObjectId))
            {
                ExpirationTagEnforcer.Tracer.TraceError <ExpirationTagEnforcer, VersionedId>((long)this.GetHashCode(), "{0}: The item {1} is in the corrupt list. Skipping it.", this, versionedId);
                return(false);
            }
            itemClass = (itemProperties[propertyIndexHolder.ItemClassIndex] as string);
            itemClass = ((itemClass == null) ? string.Empty : itemClass.ToLower(CultureInfo.InvariantCulture));
            return(TagAssistantHelper.IsRetainableItem(itemClass) && (!TagAssistantHelper.IsConflictableItem(itemClass, storeObjectId.ProviderLevelItemId, this.deletedItemsId) || base.ElcTagSubAssistant.ELCAssistantCalendarTaskRetentionEnabled));
        }
        // Token: 0x06000380 RID: 896 RVA: 0x000187A0 File Offset: 0x000169A0
        internal static bool IsRetainableItem(UserRetentionPolicyCache mailboxState, MailboxSession mailboxSession, StoreObjectId parentId, StoreObject item)
        {
            DefaultFolderType parentDefaultFolderType = TagAssistantHelper.GetParentDefaultFolderType(mailboxState, mailboxSession, parentId);

            if (UserRetentionPolicyCache.IsFolderTypeToSkip(parentDefaultFolderType))
            {
                TagAssistantHelper.Tracer.TraceDebug <DefaultFolderType>(0L, "Current item is in folder {0} (or a sub-folder) that should not be processed.", parentDefaultFolderType);
                return(false);
            }
            return(TagAssistantHelper.IsRetainableItem(item.ClassName));
        }
Esempio n. 3
0
        // Token: 0x0600048D RID: 1165 RVA: 0x0002067C File Offset: 0x0001E87C
        internal void Update()
        {
            bool processEhaMigratedMessages = base.MailboxDataForTags.ElcUserInformation.ProcessEhaMigratedMessages;

            using (IEnumerator <List <object[]> > allItemsIterator = this.GetAllItemsIterator())
            {
                while (allItemsIterator != null && allItemsIterator.MoveNext())
                {
                    List <object[]> list             = allItemsIterator.Current;
                    VersionedId     versionedId      = null;
                    Guid            empty            = Guid.Empty;
                    Guid            empty2           = Guid.Empty;
                    DateTime        updatedStartDate = DateTime.MaxValue;
                    Guid            updatedTagGuid   = Guid.Empty;
                    foreach (object[] array in list)
                    {
                        versionedId = (array[this.propertyIndexHolder.IdIndex] as VersionedId);
                        if (versionedId == null)
                        {
                            PropertySynchronizerBase.Tracer.TraceError <ItemPropertySynchronizer>((long)this.GetHashCode(), "{0}: We could not get id of this item.", this);
                        }
                        else
                        {
                            if (processEhaMigratedMessages)
                            {
                                object obj = array[this.propertyIndexHolder.EHAMigrationExpiryDateIndex];
                                if (obj != null && obj is ExDateTime)
                                {
                                    PropertySynchronizerBase.Tracer.TraceError <ItemPropertySynchronizer, object>((long)this.GetHashCode(), "{0}: We dont tag eha migration messages, this message is stamped with migration expiration date from eha. Expiration date is {1}", this, obj);
                                    continue;
                                }
                            }
                            base.PropertiesToBeDeleted.Clear();
                            base.PropertiesToBeUpdated.Clear();
                            bool tagChanged = false;
                            this.taggedByDefaultExpiryTag   = false;
                            this.taggedByPersonalArchiveTag = false;
                            this.taggedByPersonalExpiryTag  = false;
                            this.taggedBySystemExpiryTag    = false;
                            this.taggedByUncertainExpiryTag = false;
                            string text = array[this.propertyIndexHolder.ItemClassIndex] as string;
                            text = ((text == null) ? string.Empty : ElcPolicySettings.GetEffectiveItemClass(text).ToLower());
                            if (TagAssistantHelper.IsRetainableItem(text) && !this.ShouldSkipItem(array) && !this.IsRuleMessageItem(text))
                            {
                                try
                                {
                                    empty            = Guid.Empty;
                                    empty2           = Guid.Empty;
                                    updatedStartDate = DateTime.MaxValue;
                                    updatedTagGuid   = this.UpdateTagProperties(out tagChanged, out empty, text, array);
                                    bool tagChanged2 = this.UpdateArchiveTag(array, out empty2);
                                    if (!updatedTagGuid.Equals(Guid.Empty) || !empty2.Equals(Guid.Empty))
                                    {
                                        PropertySynchronizerBase.Tracer.TraceDebug <ItemPropertySynchronizer>((long)this.GetHashCode(), "{0}: Need to set StartDate since no tag is present.", this);
                                        updatedStartDate = this.UpdateStartDateEtc(versionedId, text, array);
                                    }
                                    this.UpdateContentSettingProperties(tagChanged, updatedTagGuid, updatedStartDate, text, array);
                                    this.UpdateRetentionFlags(empty, tagChanged, updatedTagGuid, empty2, array);
                                    this.UpdateArchiveContentSettingProperties(tagChanged2, array, text, empty2, updatedStartDate);
                                    this.CommitChangesAlready(versionedId);
                                }
                                catch (ArgumentOutOfRangeException arg)
                                {
                                    PropertySynchronizerBase.Tracer.TraceDebug <ItemPropertySynchronizer, string, ArgumentOutOfRangeException>((long)this.GetHashCode(), "{0} Corrupted Data. Skip current item {1}. Exception: {2}", this, versionedId.ObjectId.ToHexEntryId(), arg);
                                }
                            }
                        }
                    }
                }
            }
        }