Skip to content

Commit

Permalink
Revert "Add monitoring and management to uploads (flutter#531)"
Browse files Browse the repository at this point in the history
This reverts commit 995967c.
  • Loading branch information
andreidiaconu authored Feb 17, 2019
1 parent b7f25d0 commit 4604010
Show file tree
Hide file tree
Showing 13 changed files with 118 additions and 602 deletions.
1 change: 0 additions & 1 deletion AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ Hayden Flinner <[email protected]>
Stefano Rodriguez <[email protected]>
Salvatore Giordano <[email protected]>
Brian Armstrong <[email protected]>
Paul DeMarco <[email protected]>
Fabricio Nogueira <[email protected]>
Simon Lightfoot <[email protected]>
Ashton Thomas <[email protected]>
Expand Down
5 changes: 0 additions & 5 deletions packages/firebase_storage/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
## 1.0.3

* Added monitoring of StorageUploadTask via `events` stream.
* Added support for StorageUploadTask functions: `pause`, `resume`, `cancel`.

## 1.0.2

* Added missing http package dependency.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,13 @@

import android.net.Uri;
import android.support.annotation.NonNull;
import android.util.SparseArray;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Continuation;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseApp;
import com.google.firebase.storage.FileDownloadTask;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnPausedListener;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageException;
import com.google.firebase.storage.StorageMetadata;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
Expand All @@ -32,19 +28,14 @@
/** FirebaseStoragePlugin */
public class FirebaseStoragePlugin implements MethodCallHandler {
private FirebaseStorage firebaseStorage;
private final MethodChannel channel;

private int nextUploadHandle = 0;
private final SparseArray<UploadTask> uploadTasks = new SparseArray<>();

public static void registerWith(Registrar registrar) {
final MethodChannel channel =
new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_storage");
channel.setMethodCallHandler(new FirebaseStoragePlugin(channel, registrar));
channel.setMethodCallHandler(new FirebaseStoragePlugin(registrar));
}

private FirebaseStoragePlugin(MethodChannel channel, Registrar registrar) {
this.channel = channel;
private FirebaseStoragePlugin(Registrar registrar) {
FirebaseApp.initializeApp(registrar.context());
}

Expand Down Expand Up @@ -114,15 +105,6 @@ public void onMethodCall(MethodCall call, final Result result) {
case "StorageReference#writeToFile":
writeToFile(call, result);
break;
case "UploadTask#pause":
pauseUploadTask(call, result);
break;
case "UploadTask#resume":
resumeUploadTask(call, result);
break;
case "UploadTask#cancel":
cancelUploadTask(call, result);
break;
default:
result.notImplemented();
break;
Expand Down Expand Up @@ -258,8 +240,7 @@ private void putFile(MethodCall call, Result result) {
} else {
uploadTask = ref.putFile(Uri.fromFile(file), buildMetadataFromMap(metadata));
}
final int handle = addUploadListeners(uploadTask);
result.success(handle);
addResultListeners(uploadTask, result);
}

private void putData(MethodCall call, Result result) {
Expand All @@ -273,8 +254,32 @@ private void putData(MethodCall call, Result result) {
} else {
uploadTask = ref.putBytes(bytes, buildMetadataFromMap(metadata));
}
final int handle = addUploadListeners(uploadTask);
result.success(handle);
addResultListeners(uploadTask, result);
}

private void addResultListeners(UploadTask uploadTask, final Result result) {
uploadTask
.continueWithTask(
new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
return task.getResult().getMetadata().getReference().getDownloadUrl();
}
})
.addOnSuccessListener(
new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
result.success(uri.toString());
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
result.error("upload_error", e.getMessage(), null);
}
});
}

private StorageMetadata buildMetadataFromMap(Map<String, Object> map) {
Expand Down Expand Up @@ -361,120 +366,4 @@ public void onFailure(@NonNull Exception e) {
}
});
}

private void pauseUploadTask(MethodCall call, final Result result) {
int handle = call.argument("handle");
UploadTask task = uploadTasks.get(handle);
if (task != null) {
task.pause();
result.success(null);
} else {
result.error("pause_error", "task == null", null);
}
}

private void cancelUploadTask(MethodCall call, final Result result) {
int handle = call.argument("handle");
UploadTask task = uploadTasks.get(handle);
if (task != null) {
task.cancel();
result.success(null);
} else {
result.error("cancel_error", "task == null", null);
}
}

private void resumeUploadTask(MethodCall call, final Result result) {
int handle = call.argument("handle");
UploadTask task = uploadTasks.get(handle);
if (task != null) {
task.resume();
result.success(null);
} else {
result.error("resume_error", "task == null", null);
}
}

private int addUploadListeners(final UploadTask uploadTask) {
final int handle = ++nextUploadHandle;
uploadTask
.addOnProgressListener(
new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot snapshot) {
invokeStorageTaskEvent(handle, StorageTaskEventType.progress, snapshot, null);
}
})
.addOnPausedListener(
new OnPausedListener<UploadTask.TaskSnapshot>() {
@Override
public void onPaused(UploadTask.TaskSnapshot snapshot) {
invokeStorageTaskEvent(handle, StorageTaskEventType.pause, snapshot, null);
}
})
.addOnCompleteListener(
new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (!task.isSuccessful()) {
invokeStorageTaskEvent(
handle,
StorageTaskEventType.failure,
uploadTask.getSnapshot(),
(StorageException) task.getException());
} else {
invokeStorageTaskEvent(
handle, StorageTaskEventType.success, task.getResult(), null);
}
uploadTasks.remove(handle);
}
});
uploadTasks.put(handle, uploadTask);
return handle;
}

private enum StorageTaskEventType {
resume,
progress,
pause,
success,
failure
}

private void invokeStorageTaskEvent(
int handle,
StorageTaskEventType type,
UploadTask.TaskSnapshot snapshot,
StorageException error) {
channel.invokeMethod("StorageTaskEvent", buildMapFromTaskEvent(handle, type, snapshot, error));
}

private Map<String, Object> buildMapFromTaskEvent(
int handle,
StorageTaskEventType type,
UploadTask.TaskSnapshot snapshot,
StorageException error) {
Map<String, Object> map = new HashMap<>();
map.put("handle", handle);
map.put("type", type.ordinal());
map.put("snapshot", buildMapFromTaskSnapshot(snapshot, error));
return map;
}

private Map<String, Object> buildMapFromTaskSnapshot(
UploadTask.TaskSnapshot snapshot, StorageException error) {
Map<String, Object> map = new HashMap<>();
map.put("bytesTransferred", snapshot.getBytesTransferred());
map.put("totalByteCount", snapshot.getTotalByteCount());
if (snapshot.getUploadSessionUri() != null) {
map.put("uploadSessionUri", snapshot.getUploadSessionUri().toString());
}
if (error != null) {
map.put("error", error.getErrorCode());
}
if (snapshot.getMetadata() != null) {
map.put("storageMetadata", buildMapFromMetadata(snapshot.getMetadata()));
}
return map;
}
}
Loading

0 comments on commit 4604010

Please sign in to comment.