Luigi Scarminio
07/20/2022, 12:23 PMfun listFilesFromFTP(ftpConnection : Connection) : Pair<Connection, List<Files>>
connectionObservable.flapMap(::listFilesFromFTP).flapMap(::filterLocalFiles) ... and so on...
Arkadii Ivanov
07/20/2022, 1:21 PMfun downloadFiles(): Completable =
connect().flatMapCompletable { connection ->
listFiles(connection = connection)
.flatMap(::filterFiles)
.flatMapCompletable { files -> downloadFiles(connection = connection, files = files) }
}
private fun connect(): Single<Connection> = TODO()
private fun listFiles(connection: Connection): Single<List<File>> = TODO()
private fun filterFiles(files: List<File>): Single<List<File>> = TODO()
private fun downloadFiles(connection: Connection, files: List<File>): Completable = TODO()
Arkadii Ivanov
07/20/2022, 1:42 PMfun <S> completableUsing(
create: () -> S,
dispose: (S) -> Unit,
use: (S) -> Completable,
): Completable =
completableDefer {
val res = create()
use(res).doOnAfterFinally {
dispose(res)
}
}
Then you can use it as follows:
fun downloadFiles(): Completable =
completableUsing(create = ::connect, dispose = Connection::disconnect) { connection ->
listFiles(connection = connection)
.flatMap(::filterFiles)
.flatMapCompletable { files -> downloadFiles(connection = connection, files = files) }
}
private fun connect(): Connection = TODO()
private fun listFiles(connection: Connection): Single<List<File>> = TODO()
private fun filterFiles(files: List<File>): Single<List<File>> = TODO()
private fun downloadFiles(connection: Connection, files: List<File>): Completable = TODO()
Luigi Scarminio
07/20/2022, 1:50 PM