diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt index 2de55d3413..4ee0e80de3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt @@ -4,6 +4,7 @@ import android.net.Uri import androidx.core.net.toUri import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.model.TrackSearch +import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.asObservableSuccess import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json @@ -18,9 +19,8 @@ import kotlinx.serialization.json.jsonPrimitive import kotlinx.serialization.json.long import kotlinx.serialization.json.put import kotlinx.serialization.json.putJsonObject -import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient -import okhttp3.Request import okhttp3.RequestBody.Companion.toRequestBody import rx.Observable import uy.kohesive.injekt.injectLazy @@ -30,7 +30,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { private val json: Json by injectLazy() - private val jsonMime = "application/json; charset=utf-8".toMediaTypeOrNull() + private val jsonMime = "application/json; charset=utf-8".toMediaType() private val authClient = client.newBuilder().addInterceptor(interceptor).build() fun addLibManga(track: Track): Observable { @@ -51,22 +51,18 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { put("status", track.toAnilistStatus()) } } - val body = payload.toString().toRequestBody(jsonMime) - val request = Request.Builder() - .url(apiUrl) - .post(body) - .build() - return authClient.newCall(request) + return authClient.newCall(POST(apiUrl, body = payload.toString().toRequestBody(jsonMime))) .asObservableSuccess() .map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() - netResponse.close() - if (responseBody.isEmpty()) { - throw Exception("Null Response") + netResponse.use { + val responseBody = it.body?.string().orEmpty() + if (responseBody.isEmpty()) { + throw Exception("Null Response") + } + val response = json.decodeFromString(responseBody) + track.library_id = response["data"]!!.jsonObject["SaveMediaListEntry"]!!.jsonObject["id"]!!.jsonPrimitive.long + track } - val response = json.decodeFromString(responseBody) - track.library_id = response["data"]!!.jsonObject["SaveMediaListEntry"]!!.jsonObject["id"]!!.jsonPrimitive.long - track } } @@ -90,12 +86,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { put("score", track.score.toInt()) } } - val body = payload.toString().toRequestBody(jsonMime) - val request = Request.Builder() - .url(apiUrl) - .post(body) - .build() - return authClient.newCall(request) + return authClient.newCall(POST(apiUrl, body = payload.toString().toRequestBody(jsonMime))) .asObservableSuccess() .map { track @@ -134,24 +125,21 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { put("query", search) } } - val body = payload.toString().toRequestBody(jsonMime) - val request = Request.Builder() - .url(apiUrl) - .post(body) - .build() - return authClient.newCall(request) + return authClient.newCall(POST(apiUrl, body = payload.toString().toRequestBody(jsonMime))) .asObservableSuccess() .map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() - if (responseBody.isEmpty()) { - throw Exception("Null Response") + netResponse.use { + val responseBody = it.body?.string().orEmpty() + if (responseBody.isEmpty()) { + throw Exception("Null Response") + } + val response = json.decodeFromString(responseBody) + val data = response["data"]!!.jsonObject + val page = data["Page"]!!.jsonObject + val media = page["media"]!!.jsonArray + val entries = media.map { jsonToALManga(it.jsonObject) } + entries.map { it.toTrack() } } - val response = json.decodeFromString(responseBody) - val data = response["data"]!!.jsonObject - val page = data["Page"]!!.jsonObject - val media = page["media"]!!.jsonArray - val entries = media.map { jsonToALManga(it.jsonObject) } - entries.map { it.toTrack() } } } @@ -194,24 +182,21 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { put("manga_id", track.media_id) } } - val body = payload.toString().toRequestBody(jsonMime) - val request = Request.Builder() - .url(apiUrl) - .post(body) - .build() - return authClient.newCall(request) + return authClient.newCall(POST(apiUrl, body = payload.toString().toRequestBody(jsonMime))) .asObservableSuccess() .map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() - if (responseBody.isEmpty()) { - throw Exception("Null Response") + netResponse.use { + val responseBody = it.body?.string().orEmpty() + if (responseBody.isEmpty()) { + throw Exception("Null Response") + } + val response = json.decodeFromString(responseBody) + val data = response["data"]!!.jsonObject + val page = data["Page"]!!.jsonObject + val media = page["mediaList"]!!.jsonArray + val entries = media.map { jsonToALUserManga(it.jsonObject) } + entries.firstOrNull()?.toTrack() } - val response = json.decodeFromString(responseBody) - val data = response["data"]!!.jsonObject - val page = data["Page"]!!.jsonObject - val media = page["mediaList"]!!.jsonArray - val entries = media.map { jsonToALUserManga(it.jsonObject) } - entries.firstOrNull()?.toTrack() } } @@ -239,22 +224,22 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { val payload = buildJsonObject { put("query", query) } - val body = payload.toString().toRequestBody(jsonMime) - val request = Request.Builder() - .url(apiUrl) - .post(body) - .build() - return authClient.newCall(request) + return authClient.newCall(POST(apiUrl, body = payload.toString().toRequestBody(jsonMime))) .asObservableSuccess() .map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() - if (responseBody.isEmpty()) { - throw Exception("Null Response") + netResponse.use { + val responseBody = it.body?.string().orEmpty() + if (responseBody.isEmpty()) { + throw Exception("Null Response") + } + val response = json.decodeFromString(responseBody) + val data = response["data"]!!.jsonObject + val viewer = data["Viewer"]!!.jsonObject + Pair( + viewer["id"]!!.jsonPrimitive.int, + viewer["mediaListOptions"]!!.jsonObject["scoreFormat"]!!.jsonPrimitive.content + ) } - val response = json.decodeFromString(responseBody) - val data = response["data"]!!.jsonObject - val viewer = data["Viewer"]!!.jsonObject - Pair(viewer["id"]!!.jsonPrimitive.int, viewer["mediaListOptions"]!!.jsonObject["scoreFormat"]!!.jsonPrimitive.content) } } @@ -298,7 +283,6 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { companion object { private const val clientId = "385" - private const val clientUrl = "tachiyomi://anilist-auth" private const val apiUrl = "https://graphql.anilist.co/" private const val baseUrl = "https://anilist.co/api/v2/" private const val baseMangaUrl = "https://anilist.co/manga/" diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt index ac20033204..8b4ac64e27 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt @@ -5,6 +5,7 @@ import androidx.core.net.toUri import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.data.track.model.TrackSearch +import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.asObservableSuccess import kotlinx.serialization.decodeFromString @@ -34,11 +35,7 @@ class BangumiApi(private val client: OkHttpClient, interceptor: BangumiIntercept .add("rating", track.score.toInt().toString()) .add("status", track.toBangumiStatus()) .build() - val request = Request.Builder() - .url("$apiUrl/collection/${track.media_id}/update") - .post(body) - .build() - return authClient.newCall(request) + return authClient.newCall(POST("$apiUrl/collection/${track.media_id}/update", body = body)) .asObservableSuccess() .map { track @@ -46,29 +43,20 @@ class BangumiApi(private val client: OkHttpClient, interceptor: BangumiIntercept } fun updateLibManga(track: Track): Observable { - // chapter update - val body = FormBody.Builder() - .add("watched_eps", track.last_chapter_read.toString()) - .build() - val request = Request.Builder() - .url("$apiUrl/subject/${track.media_id}/update/watched_eps") - .post(body) - .build() - // read status update val sbody = FormBody.Builder() .add("status", track.toBangumiStatus()) .build() - val srequest = Request.Builder() - .url("$apiUrl/collection/${track.media_id}/update") - .post(sbody) - .build() - return authClient.newCall(srequest) + return authClient.newCall(POST("$apiUrl/collection/${track.media_id}/update", body = sbody)) .asObservableSuccess() .map { track }.flatMap { - authClient.newCall(request) + // chapter update + val body = FormBody.Builder() + .add("watched_eps", track.last_chapter_read.toString()) + .build() + authClient.newCall(POST("$apiUrl/subject/${track.media_id}/update/watched_eps", body = body)) .asObservableSuccess() .map { track @@ -82,11 +70,7 @@ class BangumiApi(private val client: OkHttpClient, interceptor: BangumiIntercept .buildUpon() .appendQueryParameter("max_results", "20") .build() - val request = Request.Builder() - .url(url.toString()) - .get() - .build() - return authClient.newCall(request) + return authClient.newCall(GET(url.toString())) .asObservableSuccess() .map { netResponse -> var responseBody = netResponse.body?.string().orEmpty() @@ -126,13 +110,7 @@ class BangumiApi(private val client: OkHttpClient, interceptor: BangumiIntercept } fun findLibManga(track: Track): Observable { - val urlMangas = "$apiUrl/subject/${track.media_id}" - val requestMangas = Request.Builder() - .url(urlMangas) - .get() - .build() - - return authClient.newCall(requestMangas) + return authClient.newCall(GET("$apiUrl/subject/${track.media_id}")) .asObservableSuccess() .map { netResponse -> // get comic info @@ -162,13 +140,17 @@ class BangumiApi(private val client: OkHttpClient, interceptor: BangumiIntercept } fun accessToken(code: String): Observable { - return client.newCall(accessTokenRequest(code)).asObservableSuccess().map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() - if (responseBody.isEmpty()) { - throw Exception("Null Response") + return client.newCall(accessTokenRequest(code)) + .asObservableSuccess() + .map { netResponse -> + netResponse.use { + val responseBody = it.body?.string().orEmpty() + if (responseBody.isEmpty()) { + throw Exception("Null Response") + } + json.decodeFromString(responseBody) + } } - json.decodeFromString(responseBody) - } } private fun accessTokenRequest(code: String) = POST( diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt index ba3ce71813..125b973958 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt @@ -12,7 +12,7 @@ import eu.kanade.tachiyomi.util.lang.toCalendar import eu.kanade.tachiyomi.util.selectInt import eu.kanade.tachiyomi.util.selectText import okhttp3.FormBody -import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody @@ -282,7 +282,7 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI .put("score", track.score) .put("num_read_chapters", track.last_chapter_read) - return body.toString().toRequestBody("application/json; charset=utf-8".toMediaTypeOrNull()) + return body.toString().toRequestBody("application/json; charset=utf-8".toMediaType()) } private fun mangaEditPostBody(track: MyAnimeListEditData): RequestBody { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt index 54a85019fa..76954dab54 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt @@ -19,9 +19,8 @@ import kotlinx.serialization.json.jsonPrimitive import kotlinx.serialization.json.put import kotlinx.serialization.json.putJsonObject import okhttp3.FormBody -import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient -import okhttp3.Request import okhttp3.RequestBody.Companion.toRequestBody import rx.Observable import uy.kohesive.injekt.injectLazy @@ -30,7 +29,7 @@ class ShikimoriApi(private val client: OkHttpClient, interceptor: ShikimoriInter private val json: Json by injectLazy() - private val jsonime = "application/json; charset=utf-8".toMediaTypeOrNull() + private val jsonMime = "application/json; charset=utf-8".toMediaType() private val authClient = client.newBuilder().addInterceptor(interceptor).build() fun addLibManga(track: Track, user_id: String): Observable { @@ -44,12 +43,7 @@ class ShikimoriApi(private val client: OkHttpClient, interceptor: ShikimoriInter put("status", track.toShikimoriStatus()) } } - val body = payload.toString().toRequestBody(jsonime) - val request = Request.Builder() - .url("$apiUrl/v2/user_rates") - .post(body) - .build() - return authClient.newCall(request) + return authClient.newCall(POST("$apiUrl/v2/user_rates", body = payload.toString().toRequestBody(jsonMime))) .asObservableSuccess() .map { track @@ -64,11 +58,7 @@ class ShikimoriApi(private val client: OkHttpClient, interceptor: ShikimoriInter .appendQueryParameter("search", search) .appendQueryParameter("limit", "20") .build() - val request = Request.Builder() - .url(url.toString()) - .get() - .build() - return authClient.newCall(request) + return authClient.newCall(GET(url.toString())) .asObservableSuccess() .map { netResponse -> val responseBody = netResponse.body?.string().orEmpty() @@ -107,30 +97,21 @@ class ShikimoriApi(private val client: OkHttpClient, interceptor: ShikimoriInter } fun findLibManga(track: Track, user_id: String): Observable { - val url = "$apiUrl/v2/user_rates".toUri().buildUpon() - .appendQueryParameter("user_id", user_id) - .appendQueryParameter("target_id", track.media_id.toString()) - .appendQueryParameter("target_type", "Manga") - .build() - val request = Request.Builder() - .url(url.toString()) - .get() - .build() - val urlMangas = "$apiUrl/mangas".toUri().buildUpon() .appendPath(track.media_id.toString()) .build() - val requestMangas = Request.Builder() - .url(urlMangas.toString()) - .get() - .build() - return authClient.newCall(requestMangas) + return authClient.newCall(GET(urlMangas.toString())) .asObservableSuccess() .map { netResponse -> val responseBody = netResponse.body?.string().orEmpty() json.decodeFromString(responseBody) }.flatMap { mangas -> - authClient.newCall(request) + val url = "$apiUrl/v2/user_rates".toUri().buildUpon() + .appendQueryParameter("user_id", user_id) + .appendQueryParameter("target_id", track.media_id.toString()) + .appendQueryParameter("target_type", "Manga") + .build() + authClient.newCall(GET(url.toString())) .asObservableSuccess() .map { netResponse -> val responseBody = netResponse.body?.string().orEmpty() @@ -155,13 +136,17 @@ class ShikimoriApi(private val client: OkHttpClient, interceptor: ShikimoriInter } fun accessToken(code: String): Observable { - return client.newCall(accessTokenRequest(code)).asObservableSuccess().map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() - if (responseBody.isEmpty()) { - throw Exception("Null Response") + return client.newCall(accessTokenRequest(code)) + .asObservableSuccess() + .map { netResponse -> + netResponse.use { + val responseBody = it.body?.string().orEmpty() + if (responseBody.isEmpty()) { + throw Exception("Null Response") + } + json.decodeFromString(responseBody) + } } - json.decodeFromString(responseBody) - } } private fun accessTokenRequest(code: String) = POST( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/AnilistLoginActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/AnilistLoginActivity.kt index ba2448705c..9c9da7899c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/AnilistLoginActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/AnilistLoginActivity.kt @@ -1,30 +1,14 @@ package eu.kanade.tachiyomi.ui.setting.track -import android.content.Intent -import android.os.Bundle -import android.view.Gravity.CENTER -import android.view.ViewGroup.LayoutParams.WRAP_CONTENT -import android.widget.FrameLayout -import android.widget.ProgressBar -import androidx.appcompat.app.AppCompatActivity -import eu.kanade.tachiyomi.data.track.TrackManager -import eu.kanade.tachiyomi.ui.main.MainActivity +import android.net.Uri import rx.android.schedulers.AndroidSchedulers import rx.schedulers.Schedulers -import uy.kohesive.injekt.injectLazy -class AnilistLoginActivity : AppCompatActivity() { - - private val trackManager: TrackManager by injectLazy() - - override fun onCreate(savedState: Bundle?) { - super.onCreate(savedState) - - val view = ProgressBar(this) - setContentView(view, FrameLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT, CENTER)) +class AnilistLoginActivity : BaseOAuthLoginActivity() { + override fun handleResult(data: Uri?) { val regex = "(?:access_token=)(.*?)(?:&)".toRegex() - val matchResult = regex.find(intent.data?.fragment.toString()) + val matchResult = regex.find(data?.fragment.toString()) if (matchResult?.groups?.get(1) != null) { trackManager.aniList.login(matchResult.groups[1]!!.value) .subscribeOn(Schedulers.io()) @@ -42,12 +26,4 @@ class AnilistLoginActivity : AppCompatActivity() { returnToSettings() } } - - private fun returnToSettings() { - finish() - - val intent = Intent(this, MainActivity::class.java) - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) - startActivity(intent) - } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/BangumiLoginActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/BangumiLoginActivity.kt index 76e1ca3049..7523d2102d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/BangumiLoginActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/BangumiLoginActivity.kt @@ -1,29 +1,13 @@ package eu.kanade.tachiyomi.ui.setting.track -import android.content.Intent -import android.os.Bundle -import android.view.Gravity.CENTER -import android.view.ViewGroup.LayoutParams.WRAP_CONTENT -import android.widget.FrameLayout -import android.widget.ProgressBar -import androidx.appcompat.app.AppCompatActivity -import eu.kanade.tachiyomi.data.track.TrackManager -import eu.kanade.tachiyomi.ui.main.MainActivity +import android.net.Uri import rx.android.schedulers.AndroidSchedulers import rx.schedulers.Schedulers -import uy.kohesive.injekt.injectLazy -class BangumiLoginActivity : AppCompatActivity() { +class BangumiLoginActivity : BaseOAuthLoginActivity() { - private val trackManager: TrackManager by injectLazy() - - override fun onCreate(savedState: Bundle?) { - super.onCreate(savedState) - - val view = ProgressBar(this) - setContentView(view, FrameLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT, CENTER)) - - val code = intent.data?.getQueryParameter("code") + override fun handleResult(data: Uri?) { + val code = data?.getQueryParameter("code") if (code != null) { trackManager.bangumi.login(code) .subscribeOn(Schedulers.io()) @@ -41,12 +25,4 @@ class BangumiLoginActivity : AppCompatActivity() { returnToSettings() } } - - private fun returnToSettings() { - finish() - - val intent = Intent(this, MainActivity::class.java) - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) - startActivity(intent) - } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/BaseOAuthLoginActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/BaseOAuthLoginActivity.kt new file mode 100644 index 0000000000..eb5fdec53e --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/BaseOAuthLoginActivity.kt @@ -0,0 +1,44 @@ +package eu.kanade.tachiyomi.ui.setting.track + +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.view.Gravity +import android.view.ViewGroup +import android.widget.FrameLayout +import android.widget.ProgressBar +import androidx.appcompat.app.AppCompatActivity +import eu.kanade.tachiyomi.data.track.TrackManager +import eu.kanade.tachiyomi.ui.main.MainActivity +import uy.kohesive.injekt.injectLazy + +abstract class BaseOAuthLoginActivity : AppCompatActivity() { + + internal val trackManager: TrackManager by injectLazy() + + abstract fun handleResult(data: Uri?) + + override fun onCreate(savedState: Bundle?) { + super.onCreate(savedState) + + val view = ProgressBar(this) + setContentView( + view, + FrameLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + Gravity.CENTER + ) + ) + + handleResult(intent.data) + } + + internal fun returnToSettings() { + finish() + + val intent = Intent(this, MainActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) + startActivity(intent) + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/ShikimoriLoginActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/ShikimoriLoginActivity.kt index 4cb217d850..15b26848af 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/ShikimoriLoginActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/ShikimoriLoginActivity.kt @@ -1,29 +1,13 @@ package eu.kanade.tachiyomi.ui.setting.track -import android.content.Intent -import android.os.Bundle -import android.view.Gravity.CENTER -import android.view.ViewGroup.LayoutParams.WRAP_CONTENT -import android.widget.FrameLayout -import android.widget.ProgressBar -import androidx.appcompat.app.AppCompatActivity -import eu.kanade.tachiyomi.data.track.TrackManager -import eu.kanade.tachiyomi.ui.main.MainActivity +import android.net.Uri import rx.android.schedulers.AndroidSchedulers import rx.schedulers.Schedulers -import uy.kohesive.injekt.injectLazy -class ShikimoriLoginActivity : AppCompatActivity() { +class ShikimoriLoginActivity : BaseOAuthLoginActivity() { - private val trackManager: TrackManager by injectLazy() - - override fun onCreate(savedState: Bundle?) { - super.onCreate(savedState) - - val view = ProgressBar(this) - setContentView(view, FrameLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT, CENTER)) - - val code = intent.data?.getQueryParameter("code") + override fun handleResult(data: Uri?) { + val code = data?.getQueryParameter("code") if (code != null) { trackManager.shikimori.login(code) .subscribeOn(Schedulers.io()) @@ -41,12 +25,4 @@ class ShikimoriLoginActivity : AppCompatActivity() { returnToSettings() } } - - private fun returnToSettings() { - finish() - - val intent = Intent(this, MainActivity::class.java) - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) - startActivity(intent) - } }