Update module download pipeline

This commit is contained in:
topjohnwu 2019-07-26 02:26:02 -07:00
parent 2b1b970e78
commit cdaff5b39c
4 changed files with 18 additions and 27 deletions

View File

@ -37,6 +37,10 @@ interface GithubRawApiServices {
@Streaming
fun fetchBootctl(@Path(REVISION) revision: String = Const.BOOTCTL_REVISION): Single<ResponseBody>
@GET("$MAGISK_MASTER/scripts/module_installer.sh")
@Streaming
fun fetchInstaller(): Single<ResponseBody>
//endregion
/**

View File

@ -8,4 +8,6 @@ class FileRepository(
fun downloadFile(url: String) = api.fetchFile(url)
fun downloadInstaller() = api.fetchInstaller()
}

View File

@ -8,8 +8,6 @@ import com.topjohnwu.magisk.data.network.GithubRawApiServices
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import org.koin.dsl.module
import retrofit2.CallAdapter
import retrofit2.Converter
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.converter.moshi.MoshiConverterFactory
@ -17,9 +15,8 @@ import se.ansman.kotshi.KotshiJsonAdapterFactory
val networkingModule = module {
single { createOkHttpClient() }
single { createConverterFactory() }
single { createCallAdapterFactory() }
single { createRetrofit(get(), get(), get()) }
single { createMoshiConverterFactory() }
single { createRetrofit(get(), get()) }
single { createApiService<GithubRawApiServices>(get(), Const.Url.GITHUB_RAW_API_URL) }
}
@ -36,34 +33,25 @@ fun createOkHttpClient(): OkHttpClient {
return builder.build()
}
fun createConverterFactory(): Converter.Factory {
fun createMoshiConverterFactory(): MoshiConverterFactory {
val moshi = Moshi.Builder()
.add(JsonAdapterFactory.INSTANCE)
.add(KotshiJsonAdapterFactory)
.build()
return MoshiConverterFactory.create(moshi)
}
fun createCallAdapterFactory(): CallAdapter.Factory {
return RxJava2CallAdapterFactory.create()
}
fun createRetrofit(
okHttpClient: OkHttpClient,
converterFactory: Converter.Factory,
callAdapterFactory: CallAdapter.Factory
converterFactory: MoshiConverterFactory
): Retrofit.Builder {
return Retrofit.Builder()
.addConverterFactory(converterFactory)
.addCallAdapterFactory(callAdapterFactory)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
}
@KotshiJsonAdapterFactory
abstract class JsonAdapterFactory : JsonAdapter.Factory {
companion object {
val INSTANCE: JsonAdapterFactory = KotshiJsonAdapterFactory
}
}
abstract class JsonAdapterFactory : JsonAdapter.Factory
inline fun <reified T> createApiService(retrofitBuilder: Retrofit.Builder, baseUrl: String): T {
return retrofitBuilder

View File

@ -4,7 +4,6 @@ import android.content.Intent
import androidx.core.app.NotificationCompat
import com.skoumal.teanity.extensions.subscribeK
import com.topjohnwu.magisk.Config
import com.topjohnwu.magisk.Const
import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.data.repository.FileRepository
import com.topjohnwu.magisk.model.entity.internal.DownloadSubject
@ -71,13 +70,11 @@ abstract class RemoteFileService : NotificationService() {
private fun download(subject: DownloadSubject) = repo.downloadFile(subject.url)
.map { it.toStream(subject.hashCode()) }
.map {
subject.file.apply {
when (subject) {
is Module -> it.toModule(this,
repo.downloadFile(Const.Url.MODULE_INSTALLER).blockingGet().byteStream())
else -> it.writeTo(this)
}
.flatMap { stream ->
when (subject) {
is Module -> repo.downloadInstaller()
.map { stream.toModule(subject.file, it.byteStream()); subject.file }
else -> Single.fromCallable { stream.writeTo(subject.file); subject.file }
}
}