Hello everyone, I’m new to Android development and...
# getting-started
t
Hello everyone, I’m new to Android development and working on an ebook reader project. I have a few questions regarding the design of my remote data source and data handling i have single
RemoteDataSource
which takes two api one for fetching books another is google books api for additional metadata questions 1. I am currently using Retrofit to download ebooks and save them into the
filesDir
of my app should remoteDataSource handle saving files locally. Here’s a snippet of the code I use to save the file
Copy code
private fun ResponseBody.saveFile(fileName: String): Flow<InternalDownloadState> {
    return flow{
        emit(InternalDownloadState.Downloading(0))
        val destinationFile = File(context.filesDir,fileName)

        try {
            byteStream().use { inputStream->
                destinationFile.outputStream().use { outputStream->
                    val totalBytes = contentLength()
                    val buffer = ByteArray(DEFAULT_BUFFER_SIZE)
                    var progressBytes = 0L
                    var bytes = inputStream.read(buffer)
                    while (bytes >= 0) {
                        outputStream.write(buffer, 0, bytes)
                        progressBytes += bytes
                        bytes = inputStream.read(buffer)
                        emit(InternalDownloadState.Downloading(((progressBytes * 100) / totalBytes).toInt()))
                    }
                }
            }
            emit(InternalDownloadState.Finished("file://${destinationFile.absolutePath}"))
        } catch (e: Exception) {
            emit(InternalDownloadState.Failed(e))
        }
    }
        .flowOn(<http://Dispatchers.IO|Dispatchers.IO>).distinctUntilChanged()
}
2. Currently in my
datasource
class i am fetching the list of books from my first api and calling google books api for every book to get additional metadata is it the right way to let
datasource
handle this merging operation? moreover using repositories for merging seems counter-intuitive as calling the different function of same
datasource
again to get the complete data when this could be handled internally by
datasource
itself (edited)