package com.braunster.androidchatsdk.firebaseplugin.firebase; import android.support.annotation.NonNull; import com.braunster.chatsdk.Utils.Debug; import com.braunster.chatsdk.dao.core.DaoCore; import com.braunster.chatsdk.interfaces.BUploadHandler; import com.braunster.chatsdk.network.BDefines; import com.braunster.chatsdk.object.BError; import com.braunster.chatsdk.object.SaveImageProgress; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.StorageReference; import com.google.firebase.storage.UploadTask; import org.jdeferred.Deferred; import org.jdeferred.Promise; import org.jdeferred.impl.DeferredObject; import timber.log.Timber; /** * Created by Erk on 26.07.2016. */ public class BFirebaseUploadHandler implements BUploadHandler { private static final String TAG = BFirebaseUploadHandler.class.getSimpleName(); private static final boolean DEBUG = Debug.BFirebaseUploadHandler; @Override public Promise<String, BError, SaveImageProgress> uploadFile(byte[] data, String name, String mimeType) { final Deferred<String, BError, SaveImageProgress> deferred = new DeferredObject<>(); FirebaseStorage storage = FirebaseStorage.getInstance(); StorageReference storageRef = storage.getReferenceFromUrl(BDefines.FirebaseStoragePath); StorageReference filesRef = storageRef.child("files"); final String fullName = getUUID() + "_" + name; StorageReference fileRef = filesRef.child(fullName); UploadTask uploadTask = fileRef.putBytes(data); uploadTask.addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { if (DEBUG) Timber.e(e.getCause(), "Firebase storage exception while saving"); deferred.reject(new BError(BError.Code.FIREBASE_STORAGE_EXCEPTION, e)); } }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. deferred.resolve(taskSnapshot.getDownloadUrl().toString()); } }); return deferred.promise(); } private String getUUID() { return DaoCore.generateEntity(); } }