@@ -2,69 +2,64 @@ package eu.kanade.tachiyomi.ui.setting.track
22
33import android.net.Uri
44import androidx.lifecycle.lifecycleScope
5- import tachiyomi.core.common.util.lang.launchIO
5+ import kotlinx.coroutines.launch
66
77class TrackLoginActivity : BaseOAuthLoginActivity () {
88
9- override fun handleResult (data : Uri ? ) {
10- when (data?.host) {
11- " anilist-auth" -> handleAnilist(data)
12- " bangumi-auth" -> handleBangumi(data)
13- " myanimelist-auth" -> handleMyAnimeList(data)
14- " shikimori-auth" -> handleShikimori(data)
9+ override fun handleResult (uri : Uri ) {
10+ val data = when {
11+ ! uri.encodedQuery.isNullOrBlank() -> uri.encodedQuery
12+ ! uri.encodedFragment.isNullOrBlank() -> uri.encodedFragment
13+ else -> null
1514 }
16- }
15+ ?.split(" &" )
16+ ?.filter { it.isNotBlank() }
17+ ?.associate {
18+ val parts = it.split(" =" , limit = 2 ).map<String , String >(Uri ::decode)
19+ parts[0 ] to parts.getOrNull(1 )
20+ }
21+ .orEmpty()
1722
18- private fun handleAnilist (data : Uri ) {
19- val regex = " (?:access_token=)(.*?)(?:&)" .toRegex()
20- val matchResult = regex.find(data.fragment.toString())
21- if (matchResult?.groups?.get(1 ) != null ) {
22- lifecycleScope.launchIO {
23- trackerManager.aniList.login(matchResult.groups[1 ]!! .value)
24- returnToSettings()
23+ lifecycleScope.launch {
24+ when (uri.host) {
25+ " anilist-auth" -> handleAniList(data[" access_token" ])
26+ " bangumi-auth" -> handleBangumi(data[" code" ])
27+ " myanimelist-auth" -> handleMyAnimeList(data[" code" ])
28+ " shikimori-auth" -> handleShikimori(data[" code" ])
2529 }
30+ returnToSettings()
31+ }
32+ }
33+
34+ private suspend fun handleAniList (accessToken : String? ) {
35+ if (accessToken != null ) {
36+ trackerManager.aniList.login(accessToken)
2637 } else {
2738 trackerManager.aniList.logout()
28- returnToSettings()
2939 }
3040 }
3141
32- private fun handleBangumi (data : Uri ) {
33- val code = data.getQueryParameter(" code" )
42+ private suspend fun handleBangumi (code : String? ) {
3443 if (code != null ) {
35- lifecycleScope.launchIO {
36- trackerManager.bangumi.login(code)
37- returnToSettings()
38- }
44+ trackerManager.bangumi.login(code)
3945 } else {
4046 trackerManager.bangumi.logout()
41- returnToSettings()
4247 }
4348 }
4449
45- private fun handleMyAnimeList (data : Uri ) {
46- val code = data.getQueryParameter(" code" )
50+ private suspend fun handleMyAnimeList (code : String? ) {
4751 if (code != null ) {
48- lifecycleScope.launchIO {
49- trackerManager.myAnimeList.login(code)
50- returnToSettings()
51- }
52+ trackerManager.myAnimeList.login(code)
5253 } else {
5354 trackerManager.myAnimeList.logout()
54- returnToSettings()
5555 }
5656 }
5757
58- private fun handleShikimori (data : Uri ) {
59- val code = data.getQueryParameter(" code" )
58+ private suspend fun handleShikimori (code : String? ) {
6059 if (code != null ) {
61- lifecycleScope.launchIO {
62- trackerManager.shikimori.login(code)
63- returnToSettings()
64- }
60+ trackerManager.shikimori.login(code)
6561 } else {
6662 trackerManager.shikimori.logout()
67- returnToSettings()
6863 }
6964 }
7065}
0 commit comments