From b769043f364b3e3de201c20d18ab8cbcd955c4b3 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Thu, 22 Jul 2021 19:28:59 -0400 Subject: [PATCH] Fix logout of mangadex --- .../tachiyomi/source/online/all/MangaDex.kt | 18 ++++-------- .../ui/setting/SettingsAdvancedController.kt | 5 +--- .../exh/md/network/MangaDexLoginHelper.kt | 8 ++++++ .../widget/preference/MangadexLoginDialog.kt | 3 +- .../widget/preference/MangadexLogoutDialog.kt | 28 ++++++++----------- 5 files changed, 27 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MangaDex.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MangaDex.kt index ae1c35320..0cefa74a6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MangaDex.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MangaDex.kt @@ -45,6 +45,7 @@ import exh.md.utils.MdUtil import exh.metadata.metadata.MangaDexSearchMetadata import exh.source.DelegatedHttpSource import exh.ui.metadata.adapters.MangaDexDescriptionAdapter +import kotlinx.coroutines.CancellationException import okhttp3.OkHttpClient import okhttp3.Response import rx.Observable @@ -209,19 +210,10 @@ class MangaDex(delegate: HttpSource, val context: Context) : } override suspend fun logout(): Boolean { - val result = try { - loginHelper.logout() - true - } catch (e: NoSessionException) { - true - } catch (e: Exception) { - e.message?.equals("HTTP error 405") ?: false - } - - return if (result) { - mdList.logout() - true - } else false + val e = runCatching { loginHelper.logout() }.exceptionOrNull() + if (e is CancellationException) throw e + mdList.logout() + return true } override suspend fun fetchAllFollows(): List> { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt index 881e6cdc2..b1b85bcf8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt @@ -416,10 +416,6 @@ class SettingsAdvancedController : SettingsController() { } class ClearDatabaseDialogController : DialogController() { - // SY --> - var keepReadManga = false - // SY <-- - override fun onCreateDialog(savedViewState: Bundle?): Dialog { val item = arrayOf( activity!!.getString(R.string.clear_db_exclude_read) @@ -427,6 +423,7 @@ class SettingsAdvancedController : SettingsController() { val selected = booleanArrayOf(true) return MaterialAlertDialogBuilder(activity!!) .setMessage(R.string.clear_database_confirmation) + // SY --> .setMultiChoiceItems(item, selected) { _, _, isChecked -> selected[0] = isChecked } diff --git a/app/src/main/java/exh/md/network/MangaDexLoginHelper.kt b/app/src/main/java/exh/md/network/MangaDexLoginHelper.kt index bc7bc4966..940e949c7 100644 --- a/app/src/main/java/exh/md/network/MangaDexLoginHelper.kt +++ b/app/src/main/java/exh/md/network/MangaDexLoginHelper.kt @@ -9,6 +9,7 @@ import exh.md.dto.LoginRequestDto import exh.md.dto.RefreshTokenDto import exh.md.service.MangaDexAuthService import exh.md.utils.MdUtil +import kotlinx.coroutines.CancellationException import kotlinx.serialization.encodeToString class MangaDexLoginHelper(val authServiceLazy: Lazy, val preferences: PreferencesHelper, val mdList: MdList) { @@ -30,6 +31,10 @@ class MangaDexLoginHelper(val authServiceLazy: Lazy, val pr val jsonResponse = authService.refreshToken(RefreshTokenDto(refreshToken)) preferences.trackToken(mdList).set(MdUtil.jsonParser.encodeToString(jsonResponse.token)) } + + val e = refresh.exceptionOrNull() + if (e is CancellationException) throw e + return refresh.isSuccess } @@ -41,6 +46,9 @@ class MangaDexLoginHelper(val authServiceLazy: Lazy, val pr val loginRequest = LoginRequestDto(username, password) val loginResult = runCatching { authService.login(loginRequest) } + val e = loginResult.exceptionOrNull() + if (e is CancellationException) throw e + val loginResponseDto = loginResult.getOrNull() MdUtil.updateLoginToken( loginResponseDto?.token, diff --git a/app/src/main/java/exh/widget/preference/MangadexLoginDialog.kt b/app/src/main/java/exh/widget/preference/MangadexLoginDialog.kt index 036de4bc6..ade773f54 100644 --- a/app/src/main/java/exh/widget/preference/MangadexLoginDialog.kt +++ b/app/src/main/java/exh/widget/preference/MangadexLoginDialog.kt @@ -17,6 +17,7 @@ import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.online.LoginSource import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.lang.withUIContext import eu.kanade.tachiyomi.util.system.toast import exh.log.xLogW import exh.source.getMainSource @@ -107,7 +108,7 @@ class MangadexLoginDialog(bundle: Bundle? = null) : DialogController(bundle) { ) if (result) { dialog?.dismiss() - launchUI { + withUIContext { binding.root.context.toast(R.string.login_success) } } else { diff --git a/app/src/main/java/exh/widget/preference/MangadexLogoutDialog.kt b/app/src/main/java/exh/widget/preference/MangadexLogoutDialog.kt index d3312bc38..91d1b6d6b 100644 --- a/app/src/main/java/exh/widget/preference/MangadexLogoutDialog.kt +++ b/app/src/main/java/exh/widget/preference/MangadexLogoutDialog.kt @@ -8,11 +8,13 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager +import eu.kanade.tachiyomi.source.online.LoginSource import eu.kanade.tachiyomi.source.online.all.MangaDex import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.util.lang.launchNow import eu.kanade.tachiyomi.util.lang.launchUI import eu.kanade.tachiyomi.util.lang.withIOContext +import eu.kanade.tachiyomi.util.lang.withUIContext import eu.kanade.tachiyomi.util.system.toast import exh.source.getMainSource import kotlinx.coroutines.CancellationException @@ -23,7 +25,7 @@ import uy.kohesive.injekt.injectLazy class MangadexLogoutDialog(bundle: Bundle? = null) : DialogController(bundle) { - val source = Injekt.get().get(args.getLong("key", 0))?.getMainSource() as? MangaDex + val source = Injekt.get().get(args.getLong("key", 0))?.getMainSource() as? LoginSource val trackManager: TrackManager by injectLazy() @@ -40,29 +42,21 @@ class MangadexLogoutDialog(bundle: Bundle? = null) : DialogController(bundle) { launchNow { supervisorScope { if (source != null) { - var exception: Exception? = null - val loggedOut = try { - withIOContext { source.logout() } - } catch (e: Exception) { - if (e is CancellationException) throw e - exception = e - false + val loggedOut = withIOContext { + source.logout() } if (loggedOut) { - trackManager.mdList.logout() - activity?.toast(R.string.logout_success) + withUIContext { + activity?.toast(R.string.logout_success) + } (targetController as? Listener)?.siteLogoutDialogClosed(source) } else { - launchUI { - if (exception != null) { - activity?.toast(exception.message) - } else { - activity?.toast(R.string.unknown_error) - } + withUIContext { + activity?.toast(R.string.unknown_error) } } - } else launchUI { activity?.toast("Mangadex not enabled") } + } else withUIContext { activity?.toast("Mangadex not enabled") } } } }