use of bolts.Task in project Parse-SDK-Android by ParsePlatform.
the class ParseTaskUtilsTest method testWaitForTaskWrapsAggregateExceptionAsParseException.
/**
* Verifies {@link bolts.AggregateException} gets wrapped with {@link ParseException} when thrown from
* {@link com.parse.ParseTaskUtils#wait(bolts.Task)}.
*/
@Test
public void testWaitForTaskWrapsAggregateExceptionAsParseException() {
final Exception error = new RuntimeException("This task failed.");
final ArrayList<Task<Void>> tasks = new ArrayList<>();
for (int i = 0; i < 20; i++) {
final int number = i;
Task<Void> task = Task.callInBackground(new Callable<Void>() {
@Override
public Void call() throws Exception {
Thread.sleep((long) (Math.random() * 100));
if (number == 10 || number == 11) {
throw error;
}
return null;
}
});
tasks.add(task);
}
try {
ParseTaskUtils.wait(Task.whenAll(tasks));
} catch (ParseException e) {
assertTrue(e.getCause() instanceof AggregateException);
}
}
use of bolts.Task in project Bolts-Java by BoltsFramework.
the class TaskTest method testWhenAllTwoErrors.
public void testWhenAllTwoErrors() {
final Exception error = new RuntimeException("This task failed.");
runTaskTest(new Callable<Task<?>>() {
@Override
public Task<?> call() throws Exception {
final ArrayList<Task<Void>> tasks = new ArrayList<Task<Void>>();
for (int i = 0; i < 20; i++) {
final int number = i;
Task<Void> task = Task.callInBackground(new Callable<Void>() {
@Override
public Void call() throws Exception {
Thread.sleep((long) (Math.random() * 1000));
if (number == 10 || number == 11) {
throw error;
}
return null;
}
});
tasks.add(task);
}
return Task.whenAll(tasks).continueWith(new Continuation<Void, Void>() {
@Override
public Void then(Task<Void> task) {
assertTrue(task.isCompleted());
assertTrue(task.isFaulted());
assertFalse(task.isCancelled());
assertTrue(task.getError() instanceof AggregateException);
assertEquals(2, ((AggregateException) task.getError()).getErrors().size());
assertEquals(error, ((AggregateException) task.getError()).getErrors().get(0));
assertEquals(error, ((AggregateException) task.getError()).getErrors().get(1));
for (Task<Void> t : tasks) {
assertTrue(t.isCompleted());
}
return null;
}
});
}
});
}
use of bolts.Task in project Bolts-Java by BoltsFramework.
the class TaskTest method testWhenAllOneError.
public void testWhenAllOneError() {
final Exception error = new RuntimeException("This task failed.");
runTaskTest(new Callable<Task<?>>() {
@Override
public Task<?> call() throws Exception {
final ArrayList<Task<Void>> tasks = new ArrayList<Task<Void>>();
for (int i = 0; i < 20; i++) {
final int number = i;
Task<Void> task = Task.callInBackground(new Callable<Void>() {
@Override
public Void call() throws Exception {
Thread.sleep((long) (Math.random() * 1000));
if (number == 10) {
throw error;
}
return null;
}
});
tasks.add(task);
}
return Task.whenAll(tasks).continueWith(new Continuation<Void, Void>() {
@Override
public Void then(Task<Void> task) {
assertTrue(task.isCompleted());
assertTrue(task.isFaulted());
assertFalse(task.isCancelled());
assertFalse(task.getError() instanceof AggregateException);
assertEquals(error, task.getError());
for (Task<Void> t : tasks) {
assertTrue(t.isCompleted());
}
return null;
}
});
}
});
}
use of bolts.Task in project Rocket.Chat.Android by RocketChat.
the class FileUploadingToUrlObserver method onUpdateResults.
@Override
public void onUpdateResults(List<FileUploading> results) {
if (results.isEmpty()) {
return;
}
List<FileUploading> uploadingList = realmHelper.executeTransactionForReadResults(realm -> realm.where(FileUploading.class).equalTo(FileUploading.SYNC_STATE, SyncState.SYNCING).findAll());
if (uploadingList.size() >= 3) {
// do not upload more than 3 files simultaneously
return;
}
FileUploading fileUploading = results.get(0);
final String roomId = fileUploading.getRoomId();
final String uplId = fileUploading.getUplId();
final String filename = fileUploading.getFilename();
final long filesize = fileUploading.getFilesize();
final String mimeType = fileUploading.getMimeType();
final Uri fileUri = Uri.parse(fileUploading.getUri());
final String storageType = fileUploading.getStorageType();
realmHelper.executeTransaction(realm -> realm.createOrUpdateObjectFromJson(FileUploading.class, new JSONObject().put(FileUploading.ID, uplId).put(FileUploading.SYNC_STATE, SyncState.SYNCING))).onSuccessTask(_task -> {
if (FileUploading.STORAGE_TYPE_GOOGLE.equals(storageType)) {
return methodCall.uploadGoogleRequest(filename, filesize, mimeType, roomId);
} else {
return methodCall.uploadS3Request(filename, filesize, mimeType, roomId);
}
}).onSuccessTask(task -> {
final JSONObject info = task.getResult();
final String uploadUrl = info.getString("upload");
final String downloadUrl = info.getString("download");
final JSONArray postDataList = info.getJSONArray("postData");
MultipartBody.Builder bodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM);
for (int i = 0; i < postDataList.length(); i++) {
JSONObject postData = postDataList.getJSONObject(i);
bodyBuilder.addFormDataPart(postData.getString("name"), postData.getString("value"));
}
bodyBuilder.addFormDataPart("file", filename, new RequestBody() {
private long numBytes = 0;
@Override
public MediaType contentType() {
return MediaType.parse(mimeType);
}
@Override
public long contentLength() throws IOException {
return filesize;
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
InputStream inputStream = context.getContentResolver().openInputStream(fileUri);
try (Source source = Okio.source(inputStream)) {
long readBytes;
while ((readBytes = source.read(sink.buffer(), 8192)) > 0) {
numBytes += readBytes;
realmHelper.executeTransaction(realm -> realm.createOrUpdateObjectFromJson(FileUploading.class, new JSONObject().put(FileUploading.ID, uplId).put(FileUploading.UPLOADED_SIZE, numBytes))).continueWith(new LogIfError());
}
}
}
});
Request request = new Request.Builder().url(uploadUrl).post(bodyBuilder.build()).build();
Response response = OkHttpHelper.getClientForUploadFile().newCall(request).execute();
if (response.isSuccessful()) {
return Task.forResult(downloadUrl);
} else {
return Task.forError(new Exception(response.message()));
}
}).onSuccessTask(task -> {
String downloadUrl = task.getResult();
String storage = FileUploading.STORAGE_TYPE_GOOGLE.equals(storageType) ? storageType : "s3";
return methodCall.sendFileMessage(roomId, storage, new JSONObject().put("_id", Uri.parse(downloadUrl).getLastPathSegment()).put("type", mimeType).put("size", filesize).put("name", filename).put("url", downloadUrl));
}).onSuccessTask(task -> realmHelper.executeTransaction(realm -> realm.createOrUpdateObjectFromJson(FileUploading.class, new JSONObject().put(FileUploading.ID, uplId).put(FileUploading.SYNC_STATE, SyncState.SYNCED).put(FileUploading.ERROR, JSONObject.NULL)))).continueWithTask(task -> {
if (task.isFaulted()) {
RCLog.w(task.getError());
return realmHelper.executeTransaction(realm -> realm.createOrUpdateObjectFromJson(FileUploading.class, new JSONObject().put(FileUploading.ID, uplId).put(FileUploading.SYNC_STATE, SyncState.FAILED).put(FileUploading.ERROR, task.getError().getMessage())));
} else {
return Task.forResult(null);
}
});
}
use of bolts.Task in project Rocket.Chat.Android by RocketChat.
the class GetUsersOfRoomsProcedureObserver method onUpdateResults.
@Override
public void onUpdateResults(List<GetUsersOfRoomsProcedure> results) {
if (results == null || results.isEmpty()) {
return;
}
GetUsersOfRoomsProcedure procedure = results.get(0);
final String roomId = procedure.getRoomId();
final boolean showAll = procedure.isShowAll();
realmHelper.executeTransaction(realm -> realm.createOrUpdateObjectFromJson(GetUsersOfRoomsProcedure.class, new JSONObject().put(GetUsersOfRoomsProcedure.ID, roomId).put(GetUsersOfRoomsProcedure.SYNC_STATE, SyncState.SYNCING))).onSuccessTask(task -> methodCall.getUsersOfRoom(roomId, showAll).onSuccessTask(_task -> {
JSONObject result = _task.getResult().put("roomId", roomId).put("syncstate", SyncState.SYNCED);
return realmHelper.executeTransaction(realm -> realm.createOrUpdateObjectFromJson(GetUsersOfRoomsProcedure.class, result));
})).continueWithTask(task -> {
if (task.isFaulted()) {
RCLog.w(task.getError());
return realmHelper.executeTransaction(realm -> realm.createOrUpdateObjectFromJson(GetUsersOfRoomsProcedure.class, new JSONObject().put(GetUsersOfRoomsProcedure.ID, roomId).put(GetUsersOfRoomsProcedure.SYNC_STATE, SyncState.FAILED)));
} else {
return Task.forResult(null);
}
});
}
Aggregations