private void OnEngineStateChanged(object sender, EngineStateChangeArgs e)
        {
            switch (e.NewState)
            {
                case EngineState.Idle:
                    this.CurrentState = PartnershipState.Idle;
                    switch (e.OldState)
                    {
                        case EngineState.Cancelling:
                            this.FireSyncStopped(SyncStoppedReason.Cancelled);
                            return;

                        case EngineState.Aborting:
                            this.FireSyncStopped(SyncStoppedReason.Aborted);
                            return;

                        case EngineState.Paused:
                            return;

                        case EngineState.Completing:
                            this.FireSyncStopped(SyncStoppedReason.Completed);
                            return;
                    }
                    return;

                case EngineState.PreparingSync:
                    this.CurrentState = PartnershipState.PreparingSync;
                    this.attemptedSyncOperations.Clear();
                    this.successfulSyncOperations.Clear();
                    this.successfulAcquiredOperations.Clear();
                    this.isFirstSync = !this.ZmdbProvider.SyncedItemCacheExists();
                    this.UnlockForSyncing();
                    return;

                case EngineState.Syncing:
                    this.CurrentState = PartnershipState.Syncing;
                    this.UnlockForSyncing();
                    return;

                case EngineState.Cancelling:
                    if ((e.SyncResult == null) || (e.SyncResult.ResultCode != 0x83002113))
                    {
                        this.CurrentState = PartnershipState.CancelingSync;
                        break;
                    }
                    this.CurrentState = PartnershipState.CancelingSync;
                    if (this.PartnershipClient != null)
                    {
                        this.PartnershipClient.OnDeviceLocked(this);
                    }
                    break;

                case EngineState.Aborting:
                case EngineState.Completing:
                case EngineState.ShuttingDown:
                    return;

                case EngineState.Paused:
                    this.CurrentState = PartnershipState.Idle;
                    return;

                default:
                    return;
            }
            this.UnlockForSyncing();
        }
        private void OnEngineStateChanged(object sender, EngineStateChangeArgs e)
        {
            switch (e.NewState)
            {
            case EngineState.Idle:
                this.CurrentState = PartnershipState.Idle;
                switch (e.OldState)
                {
                case EngineState.Cancelling:
                    this.FireSyncStopped(SyncStoppedReason.Cancelled);
                    return;

                case EngineState.Aborting:
                    this.FireSyncStopped(SyncStoppedReason.Aborted);
                    return;

                case EngineState.Paused:
                    return;

                case EngineState.Completing:
                    this.FireSyncStopped(SyncStoppedReason.Completed);
                    return;
                }
                return;

            case EngineState.PreparingSync:
                this.CurrentState = PartnershipState.PreparingSync;
                this.attemptedSyncOperations.Clear();
                this.successfulSyncOperations.Clear();
                this.successfulAcquiredOperations.Clear();
                this.isFirstSync = !this.ZmdbProvider.SyncedItemCacheExists();
                this.UnlockForSyncing();
                return;

            case EngineState.Syncing:
                this.CurrentState = PartnershipState.Syncing;
                this.UnlockForSyncing();
                return;

            case EngineState.Cancelling:
                if ((e.SyncResult == null) || (e.SyncResult.ResultCode != 0x83002113))
                {
                    this.CurrentState = PartnershipState.CancelingSync;
                    break;
                }
                this.CurrentState = PartnershipState.CancelingSync;
                if (this.PartnershipClient != null)
                {
                    this.PartnershipClient.OnDeviceLocked(this);
                }
                break;

            case EngineState.Aborting:
            case EngineState.Completing:
            case EngineState.ShuttingDown:
                return;

            case EngineState.Paused:
                this.CurrentState = PartnershipState.Idle;
                return;

            default:
                return;
            }
            this.UnlockForSyncing();
        }