예제 #1
0
        private void userConfirmationCall(SyncConflict conflict)
        {
            userNotification(conflict.Filename, SyncNotification.UserCallOnConflict, conflict.ConflictType.ToString());
            _conflicts.Add(conflict.ConflictID, conflict);

            if (_userHandledConflicts.Contains(conflict.ConflictType))
            {
                OnConflictConfirmationRequiredToProceed?.Invoke(conflict.Filename, conflict.ConflictType, conflict.ConflictID);
            }
            else
            {
                ProcessConflictAsync(conflict.ConflictID, byDefaultSyncEventAction(conflict.ConflictType));
            }
        }
예제 #2
0
        public async Task ProcessConflictAsync(string conflictID, OnConflictAction action)
        {
            SyncConflict conflict = _conflicts[conflictID];

            switch (conflict.ConflictType)
            {
            case SyncConflictType.NewerVersionRemoteAndLocalVersionChanged:
                switch (action)
                {
                case OnConflictAction.SyncFromRemote:
                    operationDownloadFileAsync(conflict.Filename, conflict.CRC, true);
                    break;

                case OnConflictAction.SyncFromLocal:
                    operationUploadFileAsync(conflict.Filename, true);
                    break;

                default:
                    break;
                }
                break;

            case SyncConflictType.NewerVersionRemoteAndLocalDeleted:
                switch (action)
                {
                case OnConflictAction.SyncFromLocal:
                    operationCallDeleteFileAsync(conflict.Filename, false);
                    break;

                case OnConflictAction.SyncFromRemote:
                    operationDownloadFileAsync(conflict.Filename, conflict.CRC, true);
                    break;

                default:
                    break;
                }
                break;

            case SyncConflictType.UploadedLocalFileNewerVersionRemote:
                switch (action)
                {
                case OnConflictAction.SyncFromLocal:         //Confirm Upload
                    if (await _serverManager.ConfirmUploadAsync(conflict.Filename, conflict.TempGuid))
                    {
                        _folderSyncState.NewFileLocalAndServer(conflict.Filename, conflict.CRC);
                        userNotification(conflict.Filename, SyncNotification.SuccessfulUpdateUpload);
                    }
                    else
                    {
                        userNotification(conflict.Filename, SyncNotification.UpdateUploadFail);
                    }
                    break;

                case OnConflictAction.SyncFromRemote:         //Delete temp remotely & Download file
                    if (await _serverManager.DeleteTempAsync(conflict.Filename, conflict.TempGuid))
                    {
                        userNotification(conflict.Filename, SyncNotification.GeneralInfo, "Upload Aborted");
                    }
                    else
                    {
                        userNotification(conflict.Filename, SyncNotification.GeneralFail, "Failed to delete temporary file");
                    }

                    operationDownloadFileAsync(conflict.Filename, conflict.CRC, true);
                    break;

                default:
                    break;
                }
                break;

            case SyncConflictType.RemoteFileDeletedAndLocalIsNewer:
                switch (action)
                {
                case OnConflictAction.SyncFromRemote:
                    operationDeleteFileAsync(conflict.Filename, conflict.CRC, true);
                    break;

                case OnConflictAction.SyncFromLocal:
                    operationUploadFileAsync(conflict.Filename, true);
                    break;

                default:
                    break;
                }
                break;

            default:
                break;
            }

            _conflicts.Remove(conflict.ConflictID);
        }