BlindlyTeam/Blindly

View on GitHub
app/src/main/java/ch/epfl/sdp/blindly/audio/FirebaseRecordingsImpl.kt

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
package ch.epfl.sdp.blindly.audio

import android.net.Uri
import ch.epfl.sdp.blindly.audio.FirebaseRecordings.*
import com.google.firebase.storage.FirebaseStorage
import java.io.File

class FirebaseRecordingsImpl(private val storage: FirebaseStorage) : FirebaseRecordings {
    private fun getPathRef(recordingPath: String) = storage.reference.child(recordingPath)

    /**
     * Put [file] with key [recordingPath] in storage
     *
     * @param recordingPath the key
     * @param file the file to store
     * @param callback callback fired on completion
     */
    override fun putFile(
        recordingPath: String,
        file: File,
        callback: RecordingOperationCallback
    ) {
        getPathRef(recordingPath).putFile(Uri.fromFile(file)).addOnCompleteListener {
            if (it.isSuccessful)
                callback.onSuccess()
            else
                callback.onError()
        }.addOnFailureListener {
            callback.onError()
        }.addOnCanceledListener { callback.onError() }
    }

    /**
     * Retrieve a file with key [recordingPath] to [file]
     *
     * @param recordingPath the key of the file
     * @param file the destination file
     * @param callback callback fired on completion
     */
    override fun getFile(
        recordingPath: String,
        file: File,
        callback: RecordingOperationCallback
    ) {
        getPathRef(recordingPath).getFile(file).addOnCompleteListener {
            if (it.isSuccessful)
                callback.onSuccess()
            else
                callback.onError()
        }.addOnFailureListener {
            callback.onError()
        }.addOnCanceledListener { callback.onError() }
    }

    override fun deleteFile(
        recordingPath: String,
        callback: RecordingOperationCallback
    ) {
        getPathRef(recordingPath).delete().addOnCompleteListener {
            if (it.isSuccessful)
                callback.onSuccess()
            else
                callback.onError()
        }.addOnFailureListener {
            callback.onError()
        }.addOnCanceledListener { callback.onError() }
    }

}