Пример #1
0
 public UniqueAttribute(OnConflictAction onConflict)
 {
     OnConflict = onConflict;
 }
Пример #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);
        }