// Token: 0x06000EC7 RID: 3783 RVA: 0x00057A38 File Offset: 0x00055C38
        protected override void InvokeInternal()
        {
            if (!this.AreSplitPlanFoldersValid())
            {
                this.splitOperationState.Error = new SplitPlanFoldersInvalidException();
                return;
            }
            PublicFolderMoveRequest publicFolderMoveRequest = this.GetPublicFolderMoveRequest();

            if (this.splitOperationState.Error == null && this.TryHandleExistingRequest(publicFolderMoveRequest))
            {
                Unlimited <ByteQuantifiedSize> totalItemSize = PublicFolderSplitHelper.GetTotalItemSize(this.logger, this.powershellFactory, this.splitState.TargetMailboxGuid, base.CurrentPublicFolderSession.OrganizationId, this.splitOperationState);
                if (this.splitOperationState.Error != null)
                {
                    return;
                }
                Unlimited <ByteQuantifiedSize> mailboxQuota = PublicFolderSplitHelper.GetMailboxQuota(this.logger, this.powershellFactory, this.splitState.TargetMailboxGuid, base.CurrentPublicFolderSession.OrganizationId, this.splitOperationState);
                if (this.splitOperationState.Error != null)
                {
                    return;
                }
                if (totalItemSize.Value.ToBytes() + this.splitState.SplitPlan.TotalSizeToSplit >= mailboxQuota.Value.ToBytes() * PublicFolderSplitConfig.Instance.SplitThreshold / 100UL)
                {
                    this.splitOperationState.Error = new TargetMailboxOutofQuotaException(base.CurrentPublicFolderSession.OrganizationId.OrganizationalUnit.Name, this.splitState.TargetMailboxGuid.ToString());
                    return;
                }
                try
                {
                    if (!PublicFolderSplitHelper.IsPrimaryHierarchy(this.splitState.TargetMailboxGuid, base.CurrentPublicFolderSession.OrganizationId))
                    {
                        bool flag  = false;
                        bool flag2 = PublicFolderSplitHelper.IsSyncRequired(this.splitState.TargetMailboxGuid, base.CurrentPublicFolderSession.OrganizationId, out flag, this.xsoFactory, this.logger);
                        if (flag2)
                        {
                            PublicFolderSplitHelper.SyncAndWaitForCompletion(this.splitState.TargetMailboxGuid, base.CurrentPublicFolderSession.OrganizationId, this.xsoFactory, this.logger, this.splitOperationState);
                        }
                    }
                    else
                    {
                        this.logger.LogEvent(LogEventType.Verbose, string.Format("The target mailbox, {0}, is the primary hierarchy. Skipped sync.", this.splitState.TargetMailboxGuid.ToString()));
                    }
                }
                catch (StorageTransientException error)
                {
                    this.splitOperationState.Error = error;
                    return;
                }
                catch (StoragePermanentException error2)
                {
                    this.splitOperationState.Error = error2;
                    return;
                }
                this.IssueMoveRequest();
                if (this.splitOperationState.Error == null)
                {
                    this.splitOperationState.PartialStep = true;
                    this.logger.LogEvent(LogEventType.Verbose, "MoveContentOperation::InvokeInternal - Successfully issued a new public folder move request.");
                }
            }
        }
        // Token: 0x06000ECF RID: 3791 RVA: 0x00058444 File Offset: 0x00056644
        private void RemovePublicFolderMoveRequest(PublicFolderMoveRequest moveRequest)
        {
            string    value = base.CurrentPublicFolderSession.OrganizationId.OrganizationalUnit.Name + "\\" + moveRequest.RequestGuid.ToString();
            PSCommand cmd   = new PSCommand();

            cmd.AddCommand("Remove-PublicFolderMoveRequest");
            cmd.AddParameter("Identity", value);
            PublicFolderSplitHelper.PowerShellExceptionHandler(delegate(out string originOfException, out ErrorRecord error)
            {
                originOfException = "MoveContentOperation::RemovePublicFolderMoveRequest - RunPSCommand - Remove-PublicFolderMoveRequest";
                IAssistantRunspaceProxy assistantRunspaceProxy = this.powershellFactory.CreateRunspaceForDatacenterAdmin(this.CurrentPublicFolderSession.OrganizationId);
                assistantRunspaceProxy.RunPSCommand <PublicFolderMoveRequest>(cmd, out error, this.logger);
            }, this.splitOperationState);
        }
        // Token: 0x06000EC9 RID: 3785 RVA: 0x00057F18 File Offset: 0x00056118
        private ADObjectId GetSourceMailbox(PublicFolderMoveRequest request)
        {
            if (request.SourceMailbox != null)
            {
                return(request.SourceMailbox);
            }
            PublicFolderMoveRequestStatistics publicFolderMoveRequestStatistics = this.GetPublicFolderMoveRequestStatistics(request, false);

            if (publicFolderMoveRequestStatistics != null)
            {
                return(publicFolderMoveRequestStatistics.SourceMailbox);
            }
            return(null);
        }
        // Token: 0x06000ECE RID: 3790 RVA: 0x0005836C File Offset: 0x0005656C
        private PublicFolderMoveRequest GetPublicFolderMoveRequest()
        {
            PSCommand cmd = new PSCommand();

            cmd.AddCommand("Get-PublicFolderMoveRequest");
            cmd.AddParameter("Organization", base.CurrentPublicFolderSession.OrganizationId.OrganizationalUnit.Name);
            PublicFolderMoveRequest moveRequest = null;

            PublicFolderSplitHelper.PowerShellExceptionHandler(delegate(out string originOfException, out ErrorRecord error)
            {
                originOfException = "MoveContentOperation::GetPublicFolderMoveRequest - RunPSCommand - Get-PublicFolderMoveRequest";
                IAssistantRunspaceProxy assistantRunspaceProxy = this.powershellFactory.CreateRunspaceForDatacenterAdmin(this.CurrentPublicFolderSession.OrganizationId);
                moveRequest = assistantRunspaceProxy.RunPSCommand <PublicFolderMoveRequest>(cmd, out error, this.logger);
            }, this.splitOperationState);
            return(moveRequest);
        }
        // Token: 0x06000ECC RID: 3788 RVA: 0x0005803C File Offset: 0x0005623C
        private PublicFolderMoveRequest IssueMoveRequest()
        {
            List <SplitPlanFolder> foldersToSplit = this.splitState.SplitPlan.FoldersToSplit;
            List <string>          list           = new List <string>();

            foreach (SplitPlanFolder splitPlanFolder in foldersToSplit)
            {
                list.Add(splitPlanFolder.PublicFolderId.MapiFolderPath.ToString());
            }
            string    publicFolderMoveRequestName = MoveContentOperation.PublicFolderMoveRequestPrefix + DateTime.UtcNow.ToString("HHmmddss");
            PSCommand cmd = new PSCommand();

            cmd.AddCommand("New-PublicFolderMoveRequest");
            cmd.AddParameter("AllowLargeItems");
            cmd.AddParameter("Name", publicFolderMoveRequestName);
            cmd.AddParameter("Folders", list.ToArray());
            cmd.AddParameter("TargetMailbox", this.splitState.TargetMailboxGuid.ToString());
            cmd.AddParameter("CompletedRequestAgeLimit", PublicFolderSplitConfig.Instance.CompletedPublicFolderMoveRequestAgeLimit);
            cmd.AddParameter("Organization", base.CurrentPublicFolderSession.OrganizationId.OrganizationalUnit.Name);
            PublicFolderMoveRequest moveRequest = null;

            PublicFolderSplitHelper.PowerShellExceptionHandler(delegate(out string originOfException, out ErrorRecord error)
            {
                originOfException = "MoveContentOperation::IssueMoveRequest - RunPSCommand - New-PublicFolderMoveRequest";
                IAssistantRunspaceProxy assistantRunspaceProxy = this.powershellFactory.CreateRunspaceForDatacenterAdmin(this.CurrentPublicFolderSession.OrganizationId);
                moveRequest = assistantRunspaceProxy.RunPSCommand <PublicFolderMoveRequest>(cmd, out error, this.logger);
                if (moveRequest != null)
                {
                    this.splitState.PublicFolderMoveRequestName = publicFolderMoveRequestName;
                }
            }, this.splitOperationState);
            if (this.splitOperationState.Error == null && moveRequest == null)
            {
                this.splitOperationState.Error = new IssuePublicFolderMoveRequestFailedException();
            }
            return(moveRequest);
        }
        // Token: 0x06000EC8 RID: 3784 RVA: 0x00057C9C File Offset: 0x00055E9C
        private bool TryHandleExistingRequest(PublicFolderMoveRequest existingRequest)
        {
            bool result = true;

            if (existingRequest != null)
            {
                result = false;
                ADObjectId sourceMailbox = this.GetSourceMailbox(existingRequest);
                if (this.IsMoveRequestInteresting(existingRequest, sourceMailbox))
                {
                    this.logger.LogEvent(LogEventType.Verbose, string.Format("MoveContentOperation::InvokeInternal - Existing move request found for the current mailbox '{0}\\{1}'. Its status is {2}", base.CurrentPublicFolderSession.OrganizationId.OrganizationalUnit.Name, base.CurrentPublicFolderSession.MailboxGuid.ToString(), existingRequest.Status.ToString()));
                    RequestStatus status = existingRequest.Status;
                    switch (status)
                    {
                    case RequestStatus.Queued:
                    case RequestStatus.InProgress:
                    case RequestStatus.CompletionInProgress:
                        this.logger.LogEvent(LogEventType.Verbose, "MoveContentOperation::InvokeInternal - Waiting for the existing move request to complete. Exiting MoveContentOperation.");
                        this.splitOperationState.Error = new PublicFolderMoveInProgressException();
                        return(result);

                    case RequestStatus.AutoSuspended:
                    case RequestStatus.Synced:
                        break;

                    case (RequestStatus)6:
                    case (RequestStatus)7:
                    case (RequestStatus)8:
                    case (RequestStatus)9:
                        goto IL_20E;

                    case RequestStatus.Completed:
                    case RequestStatus.CompletedWithWarning:
                        this.RemovePublicFolderMoveRequest(existingRequest);
                        if (this.splitOperationState.Error != null)
                        {
                            return(result);
                        }
                        this.logger.LogEvent(LogEventType.Verbose, "MoveContentOperation::InvokeInternal - Removed the successfully completed move request.");
                        this.ResetIsExcludedFromServingHierarchy();
                        if (this.splitOperationState.Error == null)
                        {
                            this.logger.LogEvent(LogEventType.Verbose, string.Format("MoveContentOperation::InvokeInternal - Successfully reset the IsExcludedFromServingHierarchy flag on the mailbox '{0}\\{1}'.", base.CurrentPublicFolderSession.OrganizationId.OrganizationalUnit.Name, base.CurrentPublicFolderSession.MailboxGuid.ToString()));
                            return(result);
                        }
                        return(result);

                    default:
                        switch (status)
                        {
                        case RequestStatus.Suspended:
                            break;

                        case RequestStatus.Failed:
                        {
                            PublicFolderMoveRequestStatistics publicFolderMoveRequestStatistics = this.GetPublicFolderMoveRequestStatistics(existingRequest, true);
                            if (publicFolderMoveRequestStatistics != null && publicFolderMoveRequestStatistics.Report != null && publicFolderMoveRequestStatistics.Report.Failures != null && publicFolderMoveRequestStatistics.Report.Failures.Count > 0)
                            {
                                this.splitOperationState.Error = new PublicFolderMoveFailedException(publicFolderMoveRequestStatistics.Report.Failures[publicFolderMoveRequestStatistics.Report.Failures.Count - 1].FailureType);
                                return(result);
                            }
                            this.splitOperationState.Error = new PublicFolderMoveFailedException(string.Empty);
                            return(result);
                        }

                        default:
                            goto IL_20E;
                        }
                        break;
                    }
                    this.splitOperationState.Error = new PublicFolderMoveSuspendedException();
                    return(result);

IL_20E:
                    this.splitOperationState.Error = new UnexpectedMoveStateException(existingRequest.Status.ToString());
                }
                else
                {
                    this.splitOperationState.PartialStep = true;
                    this.logger.LogEvent(LogEventType.Verbose, string.Format("MoveContentOperation::InvokeInternal - Existing move request found for a different mailbox '{0}\\{1}' . The move operation will resume after it is removed.", existingRequest.OrganizationId.ToString(), (sourceMailbox != null) ? sourceMailbox.ToString() : string.Empty));
                }
            }
            return(result);
        }
        // Token: 0x06000ED0 RID: 3792 RVA: 0x00058534 File Offset: 0x00056734
        private PublicFolderMoveRequestStatistics GetPublicFolderMoveRequestStatistics(PublicFolderMoveRequest moveRequest, bool includeReport)
        {
            PSCommand cmd = new PSCommand();

            cmd.AddCommand("Get-PublicFolderMoveRequestStatistics");
            cmd.AddParameter("Identity", moveRequest.Identity);
            if (includeReport)
            {
                cmd.AddParameter("IncludeReport");
            }
            PublicFolderMoveRequestStatistics moveRequestStats = null;

            PublicFolderSplitHelper.PowerShellExceptionHandler(delegate(out string originOfException, out ErrorRecord error)
            {
                originOfException = "MoveContentOperation::GetPublicFolderMoveRequestStatistics - RunPSCommand - Get-PublicFolderMoveRequestStatistics";
                IAssistantRunspaceProxy assistantRunspaceProxy = this.powershellFactory.CreateRunspaceForDatacenterAdmin(this.CurrentPublicFolderSession.OrganizationId);
                moveRequestStats = assistantRunspaceProxy.RunPSCommand <PublicFolderMoveRequestStatistics>(cmd, out error, this.logger);
            }, this.splitOperationState);
            return(moveRequestStats);
        }
 // Token: 0x06000ECB RID: 3787 RVA: 0x00057FA2 File Offset: 0x000561A2
 private bool IsMoveRequestInteresting(PublicFolderMoveRequest moveRequest, ADObjectId sourceMailbox)
 {
     return(sourceMailbox != null && sourceMailbox.Equals(base.CurrentPublicFolderSession.MailboxPrincipal.ObjectId));
 }