У меня есть функция, которая загружает список аудиофайлов в базу данных Firebase Realtime.Каждая успешная загрузка файла возвращает downloadUrl
, и я сохранял это в list
до тех пор, пока рекурсия не прекратится.Можно ли обернуть эту функцию вокруг RxJava, чтобы вернуть Single<List<String>>
?
fun uploadAudioList(list: MutableList<Audio>, userId: String){
val audio = list[index]
//userid/audio/filename
val fileRef = storageReference.child(String.format(FirebaseUtil.ADD_FIREBASE_AUDIO,
userId, "audio", audio.filename))
val metadata = StorageMetadata.Builder()
.setContentType(audio.mimeType).build()
fileRef.putFile(audio.uri, metadata)
.continueWithTask { task: Task<UploadTask.TaskSnapshot> ->
if (!task.isSuccessful) {
Log.e(TAG, "Audio upload task error ${task.exception!!}")
}
return@continueWithTask fileRef.downloadUrl
}.addOnCompleteListener { uri ->
urlList.add(uri.result.toString()) //Return this as Single<List<String>>
if (index < list.lastIndex) {
index++
uploadAudioList(list, userId) //Recursive until all Audio are uploaded
}
}.addOnFailureListener {
Log.e(TAG, "Uploading audio failed ${it.message}")
}
}