public UniqueAttribute(OnConflictAction onConflict) { OnConflict = onConflict; }
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); }