From fea4c5dd40638f72593a6323fdedb8c22ca6522d Mon Sep 17 00:00:00 2001 From: az4521 <18432684+az4521@users.noreply.github.com> Date: Fri, 15 Mar 2024 06:08:07 +0000 Subject: [PATCH] fix a LOT of warnings --- .../tachiyomi/data/cache/ChapterCache.kt | 4 +- .../tachiyomi/data/download/Downloader.kt | 4 +- .../data/library/LibraryUpdateService.kt | 8 +- .../data/track/anilist/AnilistApi.kt | 8 +- .../data/track/bangumi/BangumiApi.kt | 8 +- .../data/track/bangumi/BangumiInterceptor.kt | 2 +- .../data/track/kitsu/KitsuInterceptor.kt | 2 +- .../data/track/myanimelist/MyAnimeListApi.kt | 63 ++++++++++------ .../data/track/shikimori/ShikimoriApi.kt | 12 +-- .../track/shikimori/ShikimoriInterceptor.kt | 2 +- .../tachiyomi/data/updater/UpdaterService.kt | 2 +- .../eu/kanade/tachiyomi/source/LocalSource.kt | 5 +- .../tachiyomi/source/online/HttpSource.kt | 5 +- .../source/online/UrlImportableSource.kt | 3 +- .../tachiyomi/source/online/all/EHentai.kt | 31 ++++---- .../tachiyomi/source/online/all/NHentai.kt | 10 ++- .../source/online/english/HentaiCafe.kt | 4 +- .../source/online/english/Pururin.kt | 10 +-- .../source/online/english/Tsumino.kt | 2 +- .../ExtensionPreferencesController.kt | 2 +- .../tachiyomi/ui/library/LibraryGridHolder.kt | 2 +- .../tachiyomi/ui/library/LibraryItem.kt | 8 +- .../kanade/tachiyomi/ui/main/MainActivity.kt | 5 +- .../ui/manga/info/MangaInfoController.kt | 2 +- .../ui/manga/track/TrackSearchAdapter.kt | 15 ++-- .../ui/migration/MigrationPresenter.kt | 3 +- .../manga/design/MigrationSourceHolder.kt | 4 +- .../manga/design/PreMigrationController.kt | 5 +- .../ui/reader/loader/DirectoryPageLoader.kt | 6 +- .../ui/setting/SettingsAdvancedController.kt | 5 +- .../ui/source/browse/RecommendsPager.kt | 6 +- .../ui/webview/BaseWebViewActivity.kt | 2 +- .../tachiyomi/ui/webview/WebViewActivity.kt | 2 +- .../kanade/tachiyomi/util/JsoupExtensions.kt | 2 +- .../util/chapter/ChapterRecognition.kt | 6 +- .../kanade/tachiyomi/util/storage/DiskUtil.kt | 2 +- .../tachiyomi/util/storage/OkioExtensions.kt | 2 +- .../tachiyomi/util/system/LocaleHelper.kt | 2 +- .../widget/preference/TrackLoginDialog.kt | 12 +-- app/src/main/java/exh/debug/DebugFunctions.kt | 8 +- app/src/main/java/exh/debug/DebugToggles.kt | 2 +- .../java/exh/debug/SettingsDebugController.kt | 6 +- app/src/main/java/exh/search/SearchEngine.kt | 2 +- .../java/exh/smartsearch/SmartSearchEngine.kt | 2 +- .../main/java/exh/uconfig/EHConfigurator.kt | 2 +- .../main/java/exh/uconfig/EhUConfigBuilder.kt | 2 +- .../exh/ui/captcha/BrowserActionActivity.kt | 8 +- .../main/java/exh/ui/lock/LockController.kt | 2 +- .../main/java/exh/ui/lock/LockPreference.kt | 46 ++++++------ app/src/main/java/exh/ui/lock/LockUtils.kt | 73 +------------------ .../main/java/exh/ui/login/LoginController.kt | 2 +- .../main/java/exh/util/LewdMangaChecker.kt | 2 +- app/src/main/java/exh/util/MangaType.kt | 2 +- app/src/main/java/exh/util/NakedTrie.kt | 10 +-- app/src/main/java/exh/util/OkHttpUtil.kt | 6 +- 55 files changed, 203 insertions(+), 250 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/cache/ChapterCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/cache/ChapterCache.kt index a5f35aa2e60f..d83a73b3dcfb 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/cache/ChapterCache.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/cache/ChapterCache.kt @@ -217,12 +217,12 @@ class ChapterCache(private val context: Context) { editor = diskCache.edit(key) ?: throw IOException("Unable to edit key") // Get OutputStream and write image with Okio. - response.body!!.source().saveTo(editor.newOutputStream(0)) + response.body.source().saveTo(editor.newOutputStream(0)) diskCache.flush() editor.commit() } finally { - response.body?.close() + response.body.close() editor?.abortUnlessCommitted() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt index 7442107efe11..d73b75daf11e 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt @@ -402,7 +402,7 @@ class Downloader( .map { response -> val file = tmpDir.createFile("$filename.tmp") try { - response.body!!.source().saveTo(file.openOutputStream()) + response.body.source().saveTo(file.openOutputStream()) val extension = getImageExtension(response, file) file.renameTo("$filename.$extension") } catch (e: Exception) { @@ -450,7 +450,7 @@ class Downloader( */ private fun getImageExtension(response: Response, file: UniFile): String { // Read content type if available. - val mime = response.body?.contentType()?.let { ct -> "${ct.type}/${ct.subtype}" } + val mime = response.body.contentType()?.let { ct -> "${ct.type}/${ct.subtype}" } // Else guess from the uri. ?: context.contentResolver.getType(file.uri) // Else read magic numbers. diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt index c7372af77609..273d21d6a3fc 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt @@ -393,15 +393,15 @@ class LibraryUpdateService( // Update manga details metadata in the background runAsObservable({ source?.getMangaDetails(manga.toMangaInfo())?.toSManga() }) - ?.map { updatedManga -> + .map { updatedManga -> // Avoid "losing" existing cover if (!updatedManga!!.thumbnail_url.isNullOrEmpty()) { - manga.prepUpdateCover(coverCache, updatedManga!!, false) + manga.prepUpdateCover(coverCache, updatedManga, false) } else { - updatedManga!!.thumbnail_url = manga.thumbnail_url + updatedManga.thumbnail_url = manga.thumbnail_url } - manga.copyFrom(updatedManga!!) + manga.copyFrom(updatedManga) db.insertManga(manga).executeAsBlocking() manga } 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 4c189a77efa2..e38117883c6e 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 @@ -51,7 +51,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { return authClient.newCall(request) .asObservableSuccess() .map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() + val responseBody = netResponse.body.string().orEmpty() netResponse.close() if (responseBody.isEmpty()) { throw Exception("Null Response") @@ -136,7 +136,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { return authClient.newCall(request) .asObservableSuccess() .map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() + val responseBody = netResponse.body.string().orEmpty() if (responseBody.isEmpty()) { throw Exception("Null Response") } @@ -197,7 +197,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { return authClient.newCall(request) .asObservableSuccess() .map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() + val responseBody = netResponse.body.string().orEmpty() if (responseBody.isEmpty()) { throw Exception("Null Response") } @@ -242,7 +242,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { return authClient.newCall(request) .asObservableSuccess() .map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() + val responseBody = netResponse.body.string().orEmpty() if (responseBody.isEmpty()) { throw Exception("Null Response") } 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 a5c44106b77a..e6a2d522e0aa 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 @@ -84,7 +84,7 @@ class BangumiApi(private val client: OkHttpClient, interceptor: BangumiIntercept return authClient.newCall(request) .asObservableSuccess() .map { netResponse -> - var responseBody = netResponse.body?.string().orEmpty() + var responseBody = netResponse.body.string().orEmpty() if (responseBody.isEmpty()) { throw Exception("Null Response") } @@ -135,7 +135,7 @@ class BangumiApi(private val client: OkHttpClient, interceptor: BangumiIntercept .asObservableSuccess() .map { netResponse -> // get comic info - val responseBody = netResponse.body?.string().orEmpty() + val responseBody = netResponse.body.string().orEmpty() jsonToTrack(JsonParser.parseString(responseBody).obj) } } @@ -152,7 +152,7 @@ class BangumiApi(private val client: OkHttpClient, interceptor: BangumiIntercept return authClient.newCall(requestUserRead) .asObservableSuccess() .map { netResponse -> - val resp = netResponse.body?.string() + val resp = netResponse.body.string() val coll = gson.fromJson(resp, Collection::class.java) track.status = coll.status?.id!! track.last_chapter_read = coll.ep_status!! @@ -162,7 +162,7 @@ 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() + val responseBody = netResponse.body.string().orEmpty() if (responseBody.isEmpty()) { throw Exception("Null Response") } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt index 2ffa9ad0e126..ff5584643187 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt @@ -29,7 +29,7 @@ class BangumiInterceptor(val bangumi: Bangumi, val gson: Gson) : Interceptor { if (currAuth.isExpired()) { val response = chain.proceed(BangumiApi.refreshTokenRequest(currAuth.refresh_token!!)) if (response.isSuccessful) { - newAuth(gson.fromJson(response.body!!.string(), OAuth::class.java)) + newAuth(gson.fromJson(response.body.string(), OAuth::class.java)) } else { response.close() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuInterceptor.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuInterceptor.kt index 0e4dc070cbbb..6439ad0cc562 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuInterceptor.kt @@ -22,7 +22,7 @@ class KitsuInterceptor(val kitsu: Kitsu, val gson: Gson) : Interceptor { if (currAuth.isExpired()) { val response = chain.proceed(KitsuApi.refreshTokenRequest(refreshToken)) if (response.isSuccessful) { - newAuth(gson.fromJson(response.body!!.string(), OAuth::class.java)) + newAuth(gson.fromJson(response.body.string(), OAuth::class.java)) } else { response.close() } 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 e23be9390ed7..25cca12c006f 100755 --- 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 @@ -48,10 +48,12 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI .asObservable() .flatMap { response -> Observable.from( - Jsoup.parse(response.consumeBody()) - .select("div.js-categories-seasonal.js-block-list.list") - .select("table").select("tbody") - .select("tr").drop(1) + response.consumeBody().let { + Jsoup.parse(it) + .select("div.js-categories-seasonal.js-block-list.list") + .select("table").select("tbody") + .select("tr").drop(1) + } ) } .filter { row -> @@ -87,7 +89,7 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI // Get track data val response = authClient.newCall(GET(url = editPageUrl(track.media_id))).execute() val editData = response.use { - val page = Jsoup.parse(it.consumeBody()) + val page = it.consumeBody().let { it1 -> Jsoup.parse(it1) } // Extract track data from MAL page extractDataFromEditPage(page).apply { @@ -112,16 +114,23 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI var libTrack: Track? = null response.use { if (it.priorResponse?.isRedirect != true) { - val trackForm = Jsoup.parse(it.consumeBody()) + val trackForm = it.consumeBody().let { it1 -> Jsoup.parse(it1) } libTrack = Track.create(TrackManager.MYANIMELIST).apply { - last_chapter_read = trackForm.select("#add_manga_num_read_chapters").`val`().toInt() + last_chapter_read = + trackForm.select("#add_manga_num_read_chapters").`val`().toInt() total_chapters = trackForm.select("#totalChap").text().toInt() - status = trackForm.select("#add_manga_status > option[selected]").`val`().toInt() - score = trackForm.select("#add_manga_score > option[selected]").`val`().toFloatOrNull() + status = + trackForm.select("#add_manga_status > option[selected]").`val`() + .toInt() + score = + trackForm.select("#add_manga_score > option[selected]").`val`() + .toFloatOrNull() ?: 0f - started_reading_date = trackForm.searchDatePicker("#add_manga_start_date") - finished_reading_date = trackForm.searchDatePicker("#add_manga_finish_date") + started_reading_date = + trackForm.searchDatePicker("#add_manga_start_date") + finished_reading_date = + trackForm.searchDatePicker("#add_manga_finish_date") } } } @@ -162,10 +171,12 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI return authClient.newCall(POST(url = exportListUrl(), body = exportPostBody())) .asObservable() .map { response -> - baseUrl + Jsoup.parse(response.consumeBody()) - .select("div.goodresult") - .select("a") - .attr("href") + baseUrl + response.consumeBody().let { + Jsoup.parse(it) + .select("div.goodresult") + .select("a") + .attr("href") + } } } @@ -177,17 +188,23 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI } } - private fun Response.consumeBody(): String? { + private fun Response.consumeBody(): String { use { if (it.code != 200) throw Exception("HTTP error ${it.code}") - return it.body?.string() + return it.body.string() } } - private fun Response.consumeXmlBody(): String? { + private fun Response.consumeXmlBody(): String { use { res -> if (res.code != 200) throw Exception("Export list error") - BufferedReader(InputStreamReader(GZIPInputStream(res.body?.source()?.inputStream()))).use { reader -> + BufferedReader( + InputStreamReader( + GZIPInputStream( + res.body.source().inputStream() + ) + ) + ).use { reader -> val sb = StringBuilder() reader.forEachLine { line -> sb.append(line) @@ -335,7 +352,7 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI return GregorianCalendar(year, month - 1, day).timeInMillis } - private fun Element.searchTitle() = select("strong").text()!! + private fun Element.searchTitle() = select("strong").text() private fun Element.searchTotalChapters() = if (select(TD)[4].text() == "-") 0 else select(TD)[4].text().toInt() @@ -351,13 +368,13 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI private fun Element.searchSummary() = select("div.pt4") .first()!! - .ownText()!! + .ownText() private fun Element.searchPublishingStatus() = if (select(TD).last()!!.text() == "-") "Publishing" else "Finished" - private fun Element.searchPublishingType() = select(TD)[2].text()!! + private fun Element.searchPublishingType() = select(TD)[2].text() - private fun Element.searchStartDate() = select(TD)[6].text()!! + private fun Element.searchStartDate() = select(TD)[6].text() private fun getStatus(status: String) = when (status) { "Reading" -> 1 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 069786a0a55d..8467f6209d97 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 @@ -66,7 +66,7 @@ class ShikimoriApi(private val client: OkHttpClient, interceptor: ShikimoriInter return authClient.newCall(request) .asObservableSuccess() .map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() + val responseBody = netResponse.body.string() if (responseBody.isEmpty()) { throw Exception("Null Response") } @@ -122,13 +122,13 @@ class ShikimoriApi(private val client: OkHttpClient, interceptor: ShikimoriInter return authClient.newCall(requestMangas) .asObservableSuccess() .map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() + val responseBody = netResponse.body.string() JsonParser.parseString(responseBody).obj }.flatMap { mangas -> authClient.newCall(request) .asObservableSuccess() .map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() + val responseBody = netResponse.body.string() if (responseBody.isEmpty()) { throw Exception("Null Response") } @@ -145,13 +145,13 @@ class ShikimoriApi(private val client: OkHttpClient, interceptor: ShikimoriInter } fun getCurrentUser(): Int { - val user = authClient.newCall(GET("$apiUrl/users/whoami")).execute().body?.string() + val user = authClient.newCall(GET("$apiUrl/users/whoami")).execute().body.string() return JsonParser.parseString(user).obj["id"].asInt } fun accessToken(code: String): Observable { return client.newCall(accessTokenRequest(code)).asObservableSuccess().map { netResponse -> - val responseBody = netResponse.body?.string().orEmpty() + val responseBody = netResponse.body.string() if (responseBody.isEmpty()) { throw Exception("Null Response") } @@ -186,7 +186,7 @@ class ShikimoriApi(private val client: OkHttpClient, interceptor: ShikimoriInter return "$baseMangaUrl/$remoteId" } - fun authUrl() = + fun authUrl(): Uri = Uri.parse(loginUrl).buildUpon() .appendQueryParameter("client_id", clientId) .appendQueryParameter("redirect_uri", redirectUrl) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriInterceptor.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriInterceptor.kt index 0a2688d70fcc..619d69a3628f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriInterceptor.kt @@ -22,7 +22,7 @@ class ShikimoriInterceptor(val shikimori: Shikimori, val gson: Gson) : Intercept if (currAuth.isExpired()) { val response = chain.proceed(ShikimoriApi.refreshTokenRequest(refreshToken)) if (response.isSuccessful) { - newAuth(gson.fromJson(response.body!!.string(), OAuth::class.java)) + newAuth(gson.fromJson(response.body.string(), OAuth::class.java)) } else { response.close() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/UpdaterService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/UpdaterService.kt index b54844f4715b..bfc831e2f55e 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/UpdaterService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/UpdaterService.kt @@ -114,7 +114,7 @@ class UpdaterService : Service() { val apkFile = File(externalCacheDir, "update.apk") if (response.isSuccessful) { - response.body!!.source().saveTo(apkFile) + response.body.source().saveTo(apkFile) } else { response.close() throw Exception("Unsuccessful response") diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt index 126d73c65400..ca79bfb51191 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt @@ -28,6 +28,7 @@ import java.io.InputStream import java.util.Locale import java.util.concurrent.TimeUnit import java.util.zip.ZipFile as ZipFileCompat +import kotlin.Comparator import org.apache.commons.compress.archivers.zip.ZipFile import rx.Observable import timber.log.Timber @@ -90,9 +91,9 @@ class LocalSource(private val context: Context) : CatalogueSource { when (state?.index) { 0 -> { mangaDirs = if (state.ascending) { - mangaDirs.sortedBy { it.name.toLowerCase(Locale.ENGLISH) } + mangaDirs.sortedBy { it.name.lowercase(Locale.ENGLISH) } } else { - mangaDirs.sortedByDescending { it.name.toLowerCase(Locale.ENGLISH) } + mangaDirs.sortedByDescending { it.name.lowercase(Locale.ENGLISH) } } } 1 -> { diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSource.kt index 95e9836030d3..5b6f5d3d9754 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSource.kt @@ -19,6 +19,7 @@ import exh.source.DelegatedHttpSource import java.net.URI import java.net.URISyntaxException import java.security.MessageDigest +import java.util.Locale import okhttp3.Headers import okhttp3.OkHttpClient import okhttp3.Request @@ -81,7 +82,7 @@ abstract class HttpSource : CatalogueSource { * Note the generated id sets the sign bit to 0. */ override val id by lazy { - val key = "${name.toLowerCase()}/$lang/$versionId" + val key = "${name.lowercase()}/$lang/$versionId" val bytes = MessageDigest.getInstance("MD5").digest(key.toByteArray()) (0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }.reduce(Long::or) and Long.MAX_VALUE } @@ -107,7 +108,7 @@ abstract class HttpSource : CatalogueSource { /** * Visible name of the source. */ - override fun toString() = "$name (${lang.toUpperCase()})" + override fun toString() = "$name (${lang.uppercase(Locale.ENGLISH)})" /** * Returns an observable containing a page with a list of manga. Normally it's not needed to diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/UrlImportableSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/UrlImportableSource.kt index 1f022a1fb606..958c3f09acc2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/UrlImportableSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/UrlImportableSource.kt @@ -4,12 +4,11 @@ import android.net.Uri import eu.kanade.tachiyomi.source.Source import java.net.URI import java.net.URISyntaxException - interface UrlImportableSource : Source { val matchingHosts: List fun matchesUri(uri: Uri): Boolean { - return (uri.host ?: "").toLowerCase() in matchingHosts + return (uri.host ?: "").lowercase() in matchingHosts } // This method is allowed to block for IO if necessary diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt index b3225e79f6bb..5102dcec769b 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt @@ -46,7 +46,6 @@ import exh.util.UriGroup import exh.util.ignore import exh.util.urlImportFetchSearchManga import java.net.URLEncoder -import java.util.ArrayList import kotlinx.coroutines.runBlocking import okhttp3.CacheControl import okhttp3.CookieJar @@ -54,7 +53,7 @@ import okhttp3.Headers import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request -import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element @@ -181,7 +180,7 @@ class EHentai( doc = resp.asJsoup() val parentLink = doc!!.select("#gdd .gdt1").find { el -> - el.text().toLowerCase() == "parent:" + el.text().lowercase() == "parent:" }!!.nextElementSibling()!!.selectFirst("a")?.attr("href") if (parentLink != null) { @@ -214,9 +213,9 @@ class EHentai( chapter_number = 1f date_upload = EX_DATE_FORMAT.parse( d.select("#gdd .gdt1").find { el -> - el.text().toLowerCase() == "posted:" + el.text().lowercase() == "posted:" }!!.nextElementSibling()!!.text() - ).time + )!!.time } // Build and append the rest of the galleries if (DebugToggles.INCLUDE_ONLY_ROOT_WHEN_LOADING_EXH_VERSIONS.enabled) listOf(self) @@ -229,7 +228,7 @@ class EHentai( this.url = EHentaiSearchMetadata.normalizeUrl(link) this.name = "v${index + 2}: $name" this.chapter_number = index + 2f - this.date_upload = EX_DATE_FORMAT.parse(posted).time + this.date_upload = EX_DATE_FORMAT.parse(posted)!!.time } }.reversed() + self } @@ -438,14 +437,14 @@ class EHentai( ignore { when ( left.removeSuffix(":") - .toLowerCase() + .lowercase() ) { - "posted" -> datePosted = EX_DATE_FORMAT.parse(right).time + "posted" -> datePosted = EX_DATE_FORMAT.parse(right)!!.time // Example gallery with parent: https://e-hentai.org/g/1390451/7f181c2426/ // Example JP gallery: https://exhentai.org/g/1375385/03519d541b/ // Parent is older variation of the gallery "parent" -> parent = if (!right.equals("None", true)) { - rightElement!!.child(0).attr("href") + rightElement.child(0).attr("href") } else null "visible" -> visible = right.nullIfBlank() "language" -> { @@ -579,9 +578,9 @@ class EHentai( fun rawCookies(sp: Int): Map { val cookies: MutableMap = mutableMapOf() if (prefs.enableExhentai().get()) { - cookies[LoginController.MEMBER_ID_COOKIE] = prefs.memberIdVal().get()!! - cookies[LoginController.PASS_HASH_COOKIE] = prefs.passHashVal().get()!! - cookies[LoginController.IGNEOUS_COOKIE] = prefs.igneousVal().get()!! + cookies[LoginController.MEMBER_ID_COOKIE] = prefs.memberIdVal().get() + cookies[LoginController.PASS_HASH_COOKIE] = prefs.passHashVal().get() + cookies[LoginController.IGNEOUS_COOKIE] = prefs.igneousVal().get() cookies["sp"] = sp.toString() val sessionKey = prefs.eh_settingsKey().get() @@ -612,7 +611,7 @@ class EHentai( fun cookiesHeader(sp: Int = spPref().get()) = buildCookies(rawCookies(sp)) // Headers - override fun headersBuilder() = super.headersBuilder().add("Cookie", cookiesHeader())!! + override fun headersBuilder() = super.headersBuilder().add("Cookie", cookiesHeader()) fun addParam(url: String, param: String, value: String) = Uri.parse(url) .buildUpon() @@ -630,7 +629,7 @@ class EHentai( .build() chain.proceed(newReq) - }.build()!! + }.build() // Filters override fun getFilterList() = FilterList( @@ -797,9 +796,9 @@ class EHentai( client.newCall( Request.Builder() .url(EH_API_BASE) - .post(RequestBody.create(JSON, json.toString())) + .post(json.toString().toRequestBody(JSON)) .build() - ).execute().body!!.string() + ).execute().body.string() ).obj val obj = outJson["tokenlist"].array.first() diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/NHentai.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/NHentai.kt index bb8f69447a93..32e9b264bc4c 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/NHentai.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/NHentai.kt @@ -58,7 +58,7 @@ class NHentai(context: Context) : HttpSource(), LewdSource { val trimmedIdQuery = query.trim().removePrefix("id:") - val newQuery = if (trimmedIdQuery.toIntOrNull() ?: -1 >= 0) { + val newQuery = if ((trimmedIdQuery.toIntOrNull() ?: -1) >= 0) { "$baseUrl/g/$trimmedIdQuery/" } else query @@ -183,7 +183,11 @@ class NHentai(context: Context) : HttpSource(), LewdSource { val trimmedIdQuery = query.trim().removePrefix("id:") - val newQuery = if (trimmedIdQuery.toIntOrNull() ?: -1 >= 0) { + val newQuery = if ((trimmedIdQuery.toIntOrNull() ?: -1) >= 0) { "$baseUrl/gallery/$trimmedIdQuery/-" } else query @@ -62,13 +62,13 @@ class Pururin(delegate: HttpSource) : val contentWrapper = input.selectFirst(".content-wrapper") title = contentWrapper!!.selectFirst(".title h1")!!.text() - altTitle = contentWrapper!!.selectFirst(".alt-title")?.text() + altTitle = contentWrapper.selectFirst(".alt-title")?.text() thumbnailUrl = "https:" + input.selectFirst(".cover-wrapper v-lazy-image")!!.attr("src") tags.clear() - contentWrapper!!.select(".table-gallery-info > tbody > tr").forEach { ele -> - val key = ele.child(0).text().toLowerCase() + contentWrapper.select(".table-gallery-info > tbody > tr").forEach { ele -> + val key = ele.child(0).text().lowercase() val value = ele.child(1) when (key) { "pages" -> { @@ -105,7 +105,7 @@ class Pururin(delegate: HttpSource) : "www.pururin.io" ) - override fun mapUrlToMangaUrl(uri: Uri): String? { + override fun mapUrlToMangaUrl(uri: Uri): String { return "${PururinSearchMetadata.BASE_URL}/gallery/${uri.pathSegments[1]}/${uri.lastPathSegment}" } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Tsumino.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Tsumino.kt index 0690775a887b..7635ca28175b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Tsumino.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Tsumino.kt @@ -33,7 +33,7 @@ class Tsumino(delegate: HttpSource) : } override fun mapUrlToMangaUrl(uri: Uri): String? { - val lcFirstPathSegment = uri.pathSegments.firstOrNull()?.toLowerCase() ?: return null + val lcFirstPathSegment = uri.pathSegments.firstOrNull()?.lowercase() ?: return null if (lcFirstPathSegment != "read" && lcFirstPathSegment != "book" && lcFirstPathSegment != "entry") { return null } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionPreferencesController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionPreferencesController.kt index 3abd007130ea..54a397fff251 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionPreferencesController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionPreferencesController.kt @@ -55,7 +55,7 @@ class ExtensionPreferencesController(bundle: Bundle? = null) : } override fun createPresenter(): ExtensionPreferencesPresenter { - return ExtensionPreferencesPresenter(args.getLong(SOURCE_KEY)!!) + return ExtensionPreferencesPresenter(args.getLong(SOURCE_KEY)) } override fun getTitle(): String? { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt index 795972a3f9da..5b4a3197e39c 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt @@ -57,7 +57,7 @@ open class LibraryGridHolder( * @param item the manga item to bind. */ override fun onSetValues(item: LibraryItem) { - val binding = binding as SourceCompactGridItemBinding + val binding = binding // SY --> manga = item.manga diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt index 85610bbf77b3..7005ba254852 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt @@ -137,7 +137,7 @@ class LibraryItem(val manga: LibraryManga, private val libraryDisplayMode: Prefe return if (constraint.contains(" ") || constraint.contains("\"")) { var cleanConstraint = "" var ignoreSpace = false - for (i in constraint.trim().toLowerCase()) { + for (i in constraint.trim().lowercase()) { when (i) { ' ' -> { cleanConstraint = if (!ignoreSpace) { @@ -168,7 +168,7 @@ class LibraryItem(val manga: LibraryManga, private val libraryDisplayMode: Prefe private fun containsRaisedGenre(tag: RaisedTag, genres: List): Boolean { val genre = genres.find { - (it.namespace?.toLowerCase() == tag.namespace?.toLowerCase() && it.name.toLowerCase() == tag.name.toLowerCase()) + (it.namespace?.lowercase() == tag.namespace?.lowercase() && it.name.lowercase() == tag.name.lowercase()) } return if (tag.type == TAG_TYPE_EXCLUDE) { genre == null @@ -181,11 +181,11 @@ class LibraryItem(val manga: LibraryManga, private val libraryDisplayMode: Prefe private fun containsGenre(tag: String, genres: List?): Boolean { return if (tag.startsWith("-")) { genres?.find { - it.trim().toLowerCase() == tag.substringAfter("-").toLowerCase() + it.trim().lowercase() == tag.substringAfter("-").lowercase() } == null } else { genres?.find { - it.trim().toLowerCase() == tag.toLowerCase() + it.trim().lowercase() == tag.lowercase() } != null } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 5a5983806463..54676902b5da 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -44,7 +44,6 @@ import eu.kanade.tachiyomi.ui.source.SourceController import eu.kanade.tachiyomi.ui.source.globalsearch.GlobalSearchController import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.launchUI -import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.vibrate import eu.kanade.tachiyomi.util.view.gone import eu.kanade.tachiyomi.util.view.visible @@ -384,8 +383,8 @@ class MainActivity : BaseActivity() { override fun onDestroy() { super.onDestroy() // Binding sometimes isn't actually instantiated yet somehow - binding?.navView?.setNavigationItemSelectedListener(null) - binding?.toolbar?.setNavigationOnClickListener(null) + binding.navView.setNavigationItemSelectedListener(null) + binding.toolbar.setNavigationOnClickListener(null) } override fun onBackPressed() { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt index bcb3559f42cc..ae4156ac8d69 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt @@ -407,7 +407,7 @@ class MangaInfoController(private val fromSource: Boolean = false) : .centerCrop() .into(binding.mangaCover) - binding.backdrop?.let { + binding.backdrop.let { GlideApp.with(view.context) .load(mangaThumbnail) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchAdapter.kt index 7df67c3c705c..aaa55723ddaf 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchAdapter.kt @@ -11,10 +11,9 @@ import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.databinding.TrackSearchItemBinding import eu.kanade.tachiyomi.util.view.gone import eu.kanade.tachiyomi.util.view.inflate -import java.util.ArrayList class TrackSearchAdapter(context: Context) : - ArrayAdapter(context, R.layout.track_search_item, ArrayList()) { + ArrayAdapter(context, R.layout.track_search_item, ArrayList()) { override fun getView(position: Int, view: View?, parent: ViewGroup): View { var v = view @@ -29,7 +28,7 @@ class TrackSearchAdapter(context: Context) : } else { holder = v.tag as TrackSearchHolder } - holder.onSetValues(track!!) + holder.onSetValues(track) return v } @@ -46,7 +45,7 @@ class TrackSearchAdapter(context: Context) : binding.trackSearchTitle.text = track.title binding.trackSearchSummary.text = track.summary GlideApp.with(view.context).clear(binding.trackSearchCover) - if (!track.cover_url.isEmpty()) { + if (track.cover_url.isNotEmpty()) { GlideApp.with(view.context) .load(track.cover_url) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) @@ -58,14 +57,18 @@ class TrackSearchAdapter(context: Context) : binding.trackSearchStatus.gone() binding.trackSearchStatusResult.gone() } else { - binding.trackSearchStatusResult.text = track.publishing_status.capitalize() + binding.trackSearchStatusResult.text = track.publishing_status.replaceFirstChar { + if (it.isLowerCase()) it.titlecase() else it.toString() + } } if (track.publishing_type.isBlank()) { binding.trackSearchType.gone() binding.trackSearchTypeResult.gone() } else { - binding.trackSearchTypeResult.text = track.publishing_type.capitalize() + binding.trackSearchTypeResult.text = track.publishing_type.replaceFirstChar { + if (it.isLowerCase()) it.titlecase() else it.toString() + } } if (track.start_date.isBlank()) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MigrationPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MigrationPresenter.kt index 966aee87318d..b0191eee4ab5 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MigrationPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MigrationPresenter.kt @@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource import eu.kanade.tachiyomi.util.lang.combineLatest import eu.kanade.tachiyomi.util.lang.runAsObservable -import java.util.Locale import rx.Observable import rx.android.schedulers.AndroidSchedulers import rx.schedulers.Schedulers @@ -73,7 +72,7 @@ class MigrationPresenter( val header = SelectionHeader() return library.map { it.source }.toSet() .mapNotNull { if (it != LocalSource.ID) sourceManager.getOrStub(it) else null } - .sortedBy { it.name.toLowerCase(Locale.ROOT) } + .sortedBy { it.name.lowercase() } .map { SourceItem(it, header) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceHolder.kt index 78f618973077..3b61edd31a86 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceHolder.kt @@ -20,7 +20,9 @@ class MigrationSourceHolder(view: View, val adapter: MigrationSourceAdapter) : val preferences by injectLazy() val isMultiLanguage = preferences.enabledLanguages().get().size > 1 // Set capitalized title. - val sourceName = if (isMultiLanguage) source.toString() else source.name.capitalize() + val sourceName = if (isMultiLanguage) source.toString() else source.name.replaceFirstChar { + if (it.isLowerCase()) it.titlecase() else it.toString() + } binding.title.text = sourceName // Update circle letter image. itemView.post { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/PreMigrationController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/PreMigrationController.kt index 0b676998f8fd..e961a74783e9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/PreMigrationController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/PreMigrationController.kt @@ -74,10 +74,7 @@ class PreMigrationController(bundle: Bundle? = null) : v.post { // offset the recycler by the fab's inset + some inset on top v.updatePaddingRelative( - bottom = insets.systemWindowInsetBottom + ( - binding.fab.marginBottom - ?: 0 - ) + (binding.fab.height ?: 0) + bottom = insets.systemWindowInsetBottom + binding.fab.marginBottom + binding.fab.height ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DirectoryPageLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DirectoryPageLoader.kt index 95e7c6e5ea4e..015ad9d57227 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DirectoryPageLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DirectoryPageLoader.kt @@ -19,9 +19,9 @@ class DirectoryPageLoader(val file: File) : PageLoader() { */ override fun getPages(): Observable> { return file.listFiles() - .filter { !it.isDirectory && ImageUtil.isImage(it.name) { FileInputStream(it) } } - .sortedWith(Comparator { f1, f2 -> f1.name.compareToCaseInsensitiveNaturalOrder(f2.name) }) - .mapIndexed { i, file -> + ?.filter { !it.isDirectory && ImageUtil.isImage(it.name) { FileInputStream(it) } } + ?.sortedWith(Comparator { f1, f2 -> f1.name.compareToCaseInsensitiveNaturalOrder(f2.name) }) + ?.mapIndexed { i, file -> val streamFn = { FileInputStream(file) } ReaderPage(i).apply { stream = streamFn 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 81aeebae63bd..d0f1c57d04f0 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt @@ -279,8 +279,9 @@ class SettingsAdvancedController : SettingsController() { key = Keys.eh_logLevel title = "Log level" - entries = EHLogLevel.values().map { - "${it.name.toLowerCase().capitalize()} (${it.description})" + entries = EHLogLevel.values().map { ehLogLevel -> + "${ehLogLevel.name.lowercase() + .replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() }} (${ehLogLevel.description})" }.toTypedArray() entryValues = EHLogLevel.values().mapIndexed { index, _ -> "$index" }.toTypedArray() defaultValue = "0" diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/RecommendsPager.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/RecommendsPager.kt index 422ce9628dad..4a407d615368 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/RecommendsPager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/RecommendsPager.kt @@ -68,7 +68,7 @@ class MyAnimeList() : API("https://api.jikan.moe/v3/") { scope.launch(handler) { val response = client.newCall(request).await() - val body = response.body?.string().orEmpty() + val body = response.body.string() if (body.isEmpty()) { throw Exception("Null Response") } @@ -116,7 +116,7 @@ class MyAnimeList() : API("https://api.jikan.moe/v3/") { scope.launch(handler) { val response = client.newCall(request).await() - val body = response.body?.string().orEmpty() + val body = response.body.string() if (body.isEmpty()) { throw Exception("Null Response") } @@ -206,7 +206,7 @@ class Anilist() : API("https://graphql.anilist.co/") { scope.launch(handler) { val response = client.newCall(request).await() - val body = response.body?.string().orEmpty() + val body = response.body.string() if (body.isEmpty()) { throw Exception("Null Response") } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/BaseWebViewActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/BaseWebViewActivity.kt index aa77bf7f5271..0c295e301803 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/BaseWebViewActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/BaseWebViewActivity.kt @@ -81,7 +81,7 @@ open class BaseWebViewActivity : BaseActivity() { } override fun onDestroy() { - binding.webview?.destroy() + binding.webview.destroy() super.onDestroy() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt index 0ac9ca2a18e8..ec66f8e16dbe 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt @@ -102,7 +102,7 @@ class WebViewActivity : BaseWebViewActivity() { super.onDestroy() // Binding sometimes isn't actually instantiated yet somehow - binding?.webview?.destroy() + binding.webview.destroy() } override fun onCreateOptionsMenu(menu: Menu): Boolean { diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/JsoupExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/JsoupExtensions.kt index 2dc39e109447..6c166448a5a0 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/util/JsoupExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/JsoupExtensions.kt @@ -22,5 +22,5 @@ fun Element.attrOrText(css: String): String { * @param html the body of the response. Use only if the body was read before calling this method. */ fun Response.asJsoup(html: String? = null): Document { - return Jsoup.parse(html ?: body!!.string(), request.url.toString()) + return Jsoup.parse(html ?: body.string(), request.url.toString()) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterRecognition.kt b/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterRecognition.kt index bb1524f0b06e..dd44f42be8e6 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterRecognition.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterRecognition.kt @@ -44,7 +44,7 @@ object ChapterRecognition { } // Get chapter title with lower case - var name = chapter.name.toLowerCase() + var name = chapter.name.lowercase() // Remove comma's from chapter. name = name.replace(',', '.') @@ -77,7 +77,7 @@ object ChapterRecognition { } // Remove manga title from chapter title. - val nameWithoutManga = name.replace(manga.title.toLowerCase(), "").trim() + val nameWithoutManga = name.replace(manga.title.lowercase(), "").trim() // Check if first value is number after title remove. if (updateChapter(withoutManga.find(nameWithoutManga), chapter)) { @@ -147,6 +147,6 @@ object ChapterRecognition { * x.a -> x.1, x.b -> x.2, etc */ private fun parseAlphaPostFix(alpha: Char): Float { - return ("0." + (alpha.toInt() - 96).toString()).toFloat() + return ("0." + (alpha.code - 96).toString()).toFloat() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/storage/DiskUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/storage/DiskUtil.kt index e19d5c0c3622..c582d87a6f1a 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/util/storage/DiskUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/storage/DiskUtil.kt @@ -20,7 +20,7 @@ object DiskUtil { fun getDirectorySize(f: File): Long { var size: Long = 0 if (f.isDirectory) { - for (file in f.listFiles()) { + for (file in f.listFiles()!!) { size += getDirectorySize(file) } } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/storage/OkioExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/storage/OkioExtensions.kt index 0eac12d48219..b3fd6193a08a 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/util/storage/OkioExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/storage/OkioExtensions.kt @@ -14,7 +14,7 @@ import okio.sink fun BufferedSource.saveTo(file: File) { try { // Create parent dirs if needed - file.parentFile.mkdirs() + file.parentFile?.mkdirs() // Copy to destination saveTo(file.outputStream()) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt index 6f28bfa1d741..26e921afa108 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt @@ -64,7 +64,7 @@ object LocaleHelper { return when (lang) { null -> "" "" -> { - systemLocale!!.getDisplayName(systemLocale).capitalize() + systemLocale!!.getDisplayName(systemLocale!!).capitalize() } else -> { val locale = getLocale(lang) diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/preference/TrackLoginDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/preference/TrackLoginDialog.kt index 2c388e7fecfe..2878498411bf 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/preference/TrackLoginDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/widget/preference/TrackLoginDialog.kt @@ -27,21 +27,21 @@ class TrackLoginDialog( this(R.string.login_title, service.name, usernameLabelRes, Bundle().apply { putInt("key", service.id) }) override fun setCredentialsOnView(view: View) { - binding?.username?.setText(service.getUsername()) - binding?.password?.setText(service.getPassword()) + binding.username.setText(service.getUsername()) + binding.password.setText(service.getPassword()) } override fun checkLogin() { requestSubscription?.unsubscribe() v?.apply { - if (binding!!.username.text.isNullOrEmpty() || binding!!.password.text.isNullOrEmpty()) { + if (binding.username.text.isNullOrEmpty() || binding.password.text.isNullOrEmpty()) { return } - binding!!.login.progress = 1 - val user = binding!!.username.text.toString() - val pass = binding!!.password.text.toString() + binding.login.progress = 1 + val user = binding.username.text.toString() + val pass = binding.password.text.toString() requestSubscription = service.login(user, pass) .subscribeOn(Schedulers.io()) diff --git a/app/src/main/java/exh/debug/DebugFunctions.kt b/app/src/main/java/exh/debug/DebugFunctions.kt index 5bb132370054..d503ec239515 100644 --- a/app/src/main/java/exh/debug/DebugFunctions.kt +++ b/app/src/main/java/exh/debug/DebugFunctions.kt @@ -174,18 +174,18 @@ object DebugFunctions { fun clearSavedSearches() = prefs.eh_savedSearches().set(emptySet()) fun listAllSources() = sourceManager.getCatalogueSources().joinToString("\n") { - "${it.id}: ${it.name} (${it.lang.toUpperCase()})" + "${it.id}: ${it.name} (${it.lang.uppercase()})" } fun listFilteredSources() = sourceManager.getVisibleCatalogueSources().joinToString("\n") { - "${it.id}: ${it.name} (${it.lang.toUpperCase()})" + "${it.id}: ${it.name} (${it.lang.uppercase()})" } fun listAllHttpSources() = sourceManager.getOnlineSources().joinToString("\n") { - "${it.id}: ${it.name} (${it.lang.toUpperCase()})" + "${it.id}: ${it.name} (${it.lang.uppercase()})" } fun listFilteredHttpSources() = sourceManager.getVisibleOnlineSources().joinToString("\n") { - "${it.id}: ${it.name} (${it.lang.toUpperCase()})" + "${it.id}: ${it.name} (${it.lang.uppercase()})" } fun convertAllEhentaiGalleriesToExhentai() = convertSources(EH_SOURCE_ID, EXH_SOURCE_ID) diff --git a/app/src/main/java/exh/debug/DebugToggles.kt b/app/src/main/java/exh/debug/DebugToggles.kt index 4672fa71fad2..842419fa7784 100644 --- a/app/src/main/java/exh/debug/DebugToggles.kt +++ b/app/src/main/java/exh/debug/DebugToggles.kt @@ -15,7 +15,7 @@ enum class DebugToggles(val default: Boolean) { // Pretend that all galleries only have a single version INCLUDE_ONLY_ROOT_WHEN_LOADING_EXH_VERSIONS(false); - val prefKey = "eh_debug_toggle_${name.toLowerCase()}" + val prefKey = "eh_debug_toggle_${name.lowercase()}" var enabled: Boolean get() = prefs.flowPrefs.getBoolean(prefKey, default).get() diff --git a/app/src/main/java/exh/debug/SettingsDebugController.kt b/app/src/main/java/exh/debug/SettingsDebugController.kt index 4cdd5eb39ec6..9ae71f57c79a 100644 --- a/app/src/main/java/exh/debug/SettingsDebugController.kt +++ b/app/src/main/java/exh/debug/SettingsDebugController.kt @@ -30,7 +30,8 @@ class SettingsDebugController : SettingsController() { it.visibility == KVisibility.PUBLIC }.forEach { preference { - title = it.name.replace(Regex("(.)(\\p{Upper})"), "$1 $2").toLowerCase().capitalize() + title = it.name.replace(Regex("(.)(\\p{Upper})"), "$1 $2").lowercase() + .replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() } isPersistent = false onClick { @@ -61,7 +62,8 @@ class SettingsDebugController : SettingsController() { DebugToggles.values().forEach { switchPreference { - title = it.name.replace('_', ' ').toLowerCase().capitalize() + title = it.name.replace('_', ' ').lowercase() + .replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() } key = it.prefKey defaultValue = it.default summaryOn = if (it.default) "" else MODIFIED_TEXT diff --git a/app/src/main/java/exh/search/SearchEngine.kt b/app/src/main/java/exh/search/SearchEngine.kt index 161af88068d9..7999b96a3c49 100755 --- a/app/src/main/java/exh/search/SearchEngine.kt +++ b/app/src/main/java/exh/search/SearchEngine.kt @@ -162,7 +162,7 @@ class SearchEngine { } } - query.toLowerCase().forEach { char -> + query.lowercase().forEach { char -> if (char == '"') { inQuotes = !inQuotes } else if (enableWildcard && (char == '?' || char == '_')) { diff --git a/app/src/main/java/exh/smartsearch/SmartSearchEngine.kt b/app/src/main/java/exh/smartsearch/SmartSearchEngine.kt index 96249fec851e..aa7af314684c 100755 --- a/app/src/main/java/exh/smartsearch/SmartSearchEngine.kt +++ b/app/src/main/java/exh/smartsearch/SmartSearchEngine.kt @@ -105,7 +105,7 @@ class SmartSearchEngine( } private fun cleanSmartSearchTitle(title: String): String { - val preTitle = title.toLowerCase() + val preTitle = title.lowercase() // Remove text in brackets var cleanedTitle = removeTextInBrackets(preTitle, true) diff --git a/app/src/main/java/exh/uconfig/EHConfigurator.kt b/app/src/main/java/exh/uconfig/EHConfigurator.kt index c5ec98e25327..efad31b2067c 100644 --- a/app/src/main/java/exh/uconfig/EHConfigurator.kt +++ b/app/src/main/java/exh/uconfig/EHConfigurator.kt @@ -61,7 +61,7 @@ class EHConfigurator { val hathPerks = EHHathPerksResponse() perksPage.select(".stuffbox tr").forEach { - val name = it.child(0).text().toLowerCase() + val name = it.child(0).text().lowercase() val purchased = it.child(2).getElementsByTag("form").isEmpty() when (name) { diff --git a/app/src/main/java/exh/uconfig/EhUConfigBuilder.kt b/app/src/main/java/exh/uconfig/EhUConfigBuilder.kt index b69cc3ebac74..f8f08a734be6 100644 --- a/app/src/main/java/exh/uconfig/EhUConfigBuilder.kt +++ b/app/src/main/java/exh/uconfig/EhUConfigBuilder.kt @@ -13,7 +13,7 @@ class EhUConfigBuilder { configItems += when ( prefs.imageQuality() .get() - .toLowerCase() + .lowercase() ) { "ovrs_2400" -> Entry.ImageSize.`2400` "ovrs_1600" -> Entry.ImageSize.`1600` diff --git a/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt b/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt index 71ccaead56e6..059ba70ad389 100644 --- a/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt +++ b/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt @@ -1,5 +1,6 @@ package exh.ui.captcha +import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.os.Bundle @@ -52,6 +53,7 @@ class BrowserActionActivity : AppCompatActivity() { lateinit var credentialsObservable: Observable private lateinit var binding: EhActivityCaptchaBinding + @SuppressLint("SetJavaScriptEnabled") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -152,7 +154,7 @@ class BrowserActionActivity : AppCompatActivity() { .asObservableSuccess() .subscribeOn(Schedulers.io()) .map { - val json = JsonParser.parseString(it.body!!.string()) + val json = JsonParser.parseString(it.body.string()) it.close() json["token"].string }.melt() @@ -288,7 +290,7 @@ class BrowserActionActivity : AppCompatActivity() { token to it } }.flatMap { (token, response) -> - val audioFile = response.body!!.bytes() + val audioFile = response.body.bytes() httpClient.newCall( Request.Builder() @@ -312,7 +314,7 @@ class BrowserActionActivity : AppCompatActivity() { .build() ).asObservableSuccess() }.map { response -> - JsonParser.parseString(response.body!!.string())["results"][0]["alternatives"][0]["transcript"].string.trim() + JsonParser.parseString(response.body.string())["results"][0]["alternatives"][0]["transcript"].string.trim() }.toSingle() } diff --git a/app/src/main/java/exh/ui/lock/LockController.kt b/app/src/main/java/exh/ui/lock/LockController.kt index 81c90d254200..7c0765667e4a 100755 --- a/app/src/main/java/exh/ui/lock/LockController.kt +++ b/app/src/main/java/exh/ui/lock/LockController.kt @@ -46,7 +46,7 @@ class LockController : NucleusController() { override fun onEmpty() {} override fun onComplete(pin: String) { - if (sha512(pin, prefs.eh_lockSalt().get()!!) == prefs.eh_lockHash().get()) { + if (sha512(pin, prefs.eh_lockSalt().get()) == prefs.eh_lockHash().get()) { // Yay! closeLock() } else { diff --git a/app/src/main/java/exh/ui/lock/LockPreference.kt b/app/src/main/java/exh/ui/lock/LockPreference.kt index 5bc308e53cd3..454c2020508a 100755 --- a/app/src/main/java/exh/ui/lock/LockPreference.kt +++ b/app/src/main/java/exh/ui/lock/LockPreference.kt @@ -44,31 +44,27 @@ class LockPreference @JvmOverloads constructor(context: Context, attrs: Attribut } fun tryChange() { - if (!notifyLockSecurity(context)) { - MaterialDialog(context) - .title(text = "Lock application") - .message(text = "Enter a pin to lock the application. Enter nothing to disable the pin lock.") - // .inputRangeRes(0, 10, R.color.material_red_500) - // .inputType(InputType.TYPE_CLASS_NUMBER) - .input(maxLength = 10, inputType = InputType.TYPE_CLASS_NUMBER, allowEmpty = true) { _, c -> - val progressDialog = MaterialDialog(context) - .title(text = "Saving password") - .cancelable(false) - progressDialog.show() - Observable.fromCallable { - savePassword(c.toString()) - }.subscribeOn(Schedulers.computation()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { - progressDialog.dismiss() - updateSummary() - } - } - .negativeButton(R.string.action_cancel) - .cancelable(true) - .cancelOnTouchOutside(true) - .show() - } + MaterialDialog(context) + .title(text = "Lock application") + .message(text = "Enter a pin to lock the application. Enter nothing to disable the pin lock.") + .input(maxLength = 10, inputType = InputType.TYPE_CLASS_NUMBER, allowEmpty = true) { _, c -> + val progressDialog = MaterialDialog(context) + .title(text = "Saving password") + .cancelable(false) + progressDialog.show() + Observable.fromCallable { + savePassword(c.toString()) + }.subscribeOn(Schedulers.computation()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { + progressDialog.dismiss() + updateSummary() + } + } + .negativeButton(R.string.action_cancel) + .cancelable(true) + .cancelOnTouchOutside(true) + .show() } private fun savePassword(password: String) { diff --git a/app/src/main/java/exh/ui/lock/LockUtils.kt b/app/src/main/java/exh/ui/lock/LockUtils.kt index 6b80f4c25a05..802f108efb5c 100755 --- a/app/src/main/java/exh/ui/lock/LockUtils.kt +++ b/app/src/main/java/exh/ui/lock/LockUtils.kt @@ -1,14 +1,5 @@ package exh.ui.lock -import android.app.AppOpsManager -import android.content.ActivityNotFoundException -import android.content.Context -import android.content.Intent -import android.content.pm.PackageManager -import android.provider.Settings -import com.afollestad.materialdialogs.MaterialDialog -import com.elvishew.xlog.XLog -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.preference.PreferencesHelper import java.security.MessageDigest import kotlin.experimental.and @@ -28,7 +19,7 @@ fun sha512(passwordToHash: String, salt: String): String { val bytes = md.digest(passwordToHash.toByteArray(charset("UTF-8"))) val sb = StringBuilder() for (i in bytes.indices) { - sb.append(Integer.toString((bytes[i] and 0xff.toByte()) + 0x100, 16).substring(1)) + sb.append(((bytes[i] and 0xff.toByte()) + 0x100).toString(16).substring(1)) } return sb.toString() } @@ -37,64 +28,4 @@ fun sha512(passwordToHash: String, salt: String): String { * Check if lock is enabled */ fun lockEnabled(prefs: PreferencesHelper = Injekt.get()) = - prefs.eh_lockHash().get() != null && - prefs.eh_lockSalt().get() != null && - prefs.eh_lockLength().get() != -1 - -/** - * Check if the lock will function properly - * - * @return true if action is required, false if lock is working properly - */ -fun notifyLockSecurity( - context: Context, - prefs: PreferencesHelper = Injekt.get() -): Boolean { - return false - if (!prefs.eh_lockManually().get() && - !hasAccessToUsageStats(context) - ) { - MaterialDialog(context) - .title(text = "Permission required") - .message( - text = "${context.getString(R.string.app_name)} requires the usage stats permission to detect when you leave the app. " + - "This is required for the application lock to function properly. " + - "Press OK to grant this permission now." - ) - .negativeButton(R.string.action_cancel) - .positiveButton(android.R.string.ok) { - try { - context.startActivity(Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)) - } catch (e: ActivityNotFoundException) { - XLog.e("Device does not support USAGE_ACCESS_SETTINGS shortcut!") - MaterialDialog(context) - .title(text = "Grant permission manually") - .message( - text = "Failed to launch the window used to grant the usage stats permission. " + - "You can still grant this permission manually: go to your phone's settings and search for 'usage access'." - ) - .positiveButton(android.R.string.ok) { it.dismiss() } - .cancelable(true) - .cancelOnTouchOutside(false) - .show() - } - } - .cancelable(false) - .show() - return true - } else { - return false - } -} - -fun hasAccessToUsageStats(context: Context): Boolean { - return try { - val packageManager = context.packageManager - val applicationInfo = packageManager.getApplicationInfo(context.packageName, 0) - val appOpsManager = context.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager - val mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, applicationInfo.uid, applicationInfo.packageName) - (mode == AppOpsManager.MODE_ALLOWED) - } catch (e: PackageManager.NameNotFoundException) { - false - } -} + prefs.eh_lockLength().get() != -1 diff --git a/app/src/main/java/exh/ui/login/LoginController.kt b/app/src/main/java/exh/ui/login/LoginController.kt index 96b80bd6d07d..73dd82fc1355 100755 --- a/app/src/main/java/exh/ui/login/LoginController.kt +++ b/app/src/main/java/exh/ui/login/LoginController.kt @@ -177,7 +177,7 @@ class LoginController : NucleusController memberId = it.value PASS_HASH_COOKIE -> passHash = it.value IGNEOUS_COOKIE -> igneous = this.igneous ?: it.value diff --git a/app/src/main/java/exh/util/LewdMangaChecker.kt b/app/src/main/java/exh/util/LewdMangaChecker.kt index f22d89d0d704..176af447d774 100644 --- a/app/src/main/java/exh/util/LewdMangaChecker.kt +++ b/app/src/main/java/exh/util/LewdMangaChecker.kt @@ -14,7 +14,7 @@ import uy.kohesive.injekt.api.get fun Manga.isLewd(): Boolean { val sourceName = Injekt.get().getOrStub(source).name val currentTags = - genre?.split(",")?.map { it.trim().toLowerCase(Locale.US) } ?: emptyList() + genre?.split(",")?.map { it.trim().lowercase(Locale.US) } ?: emptyList() val meta = Log.d("Lewd", currentTags.joinToString(separator = "\n")) diff --git a/app/src/main/java/exh/util/MangaType.kt b/app/src/main/java/exh/util/MangaType.kt index 24c50f2b7a57..6f14b123cf80 100644 --- a/app/src/main/java/exh/util/MangaType.kt +++ b/app/src/main/java/exh/util/MangaType.kt @@ -19,7 +19,7 @@ fun Manga.mangaType(context: Context): String { MangaType.TYPE_COMIC -> R.string.comic else -> R.string.manga } - ).toLowerCase(Locale.getDefault()) + ).lowercase(Locale.getDefault()) } /** diff --git a/app/src/main/java/exh/util/NakedTrie.kt b/app/src/main/java/exh/util/NakedTrie.kt index 8313da6e6f0d..5988b0d66e8a 100644 --- a/app/src/main/java/exh/util/NakedTrie.kt +++ b/app/src/main/java/exh/util/NakedTrie.kt @@ -35,7 +35,7 @@ class NakedTrieNode(val key: Int, var parent: NakedTrieNode?) { fun getAsNode(key: String): NakedTrieNode? { var current = this for (c in key) { - current = current.children.get(c.toInt()) ?: return null + current = current.children.get(c.code) ?: return null if (!current.hasData) return null } return current @@ -74,7 +74,7 @@ class NakedTrie : MutableMap { // Traverse to node location in tree, making parent nodes if required var current = root for (c in key) { - val castedC = c.toInt() + val castedC = c.code var node = current.children.get(castedC) if (node == null) { node = NakedTrieNode(castedC, current) @@ -110,7 +110,7 @@ class NakedTrie : MutableMap { override fun containsKey(key: String): Boolean { var current = root for (c in key) { - current = current.children.get(c.toInt()) ?: return false + current = current.children.get(c.code) ?: return false if (!current.hasData) return false } return current.hasData @@ -126,7 +126,7 @@ class NakedTrie : MutableMap { val nodeStack = LinkedList>() for (c in key) { val bottomOfStack = nodeStack.last - val current = bottomOfStack.children.get(c.toInt()) ?: return null + val current = bottomOfStack.children.get(c.code) ?: return null if (!current.hasData) return null nodeStack.add(bottomOfStack) } @@ -178,7 +178,7 @@ class NakedTrie : MutableMap { // Traverse to node location in tree, making parent nodes if required var current = root for (c in key) { - val castedC = c.toInt() + val castedC = c.code var node = current.children.get(castedC) if (node == null) { node = NakedTrieNode(castedC, current) diff --git a/app/src/main/java/exh/util/OkHttpUtil.kt b/app/src/main/java/exh/util/OkHttpUtil.kt index 714caf743780..cad425cf0d20 100644 --- a/app/src/main/java/exh/util/OkHttpUtil.kt +++ b/app/src/main/java/exh/util/OkHttpUtil.kt @@ -3,17 +3,17 @@ package exh.util import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.util.asJsoup import okhttp3.Response -import okhttp3.ResponseBody +import okhttp3.ResponseBody.Companion.toResponseBody import org.jsoup.nodes.Document fun Response.interceptAsHtml(block: (Document) -> Unit): Response { val body = body - if (body?.contentType()?.type == "text" && + if (body.contentType()?.type == "text" && body.contentType()?.subtype == "html" ) { val bodyString = body.string() val rebuiltResponse = newBuilder() - .body(ResponseBody.create(body.contentType(), bodyString)) + .body(bodyString.toResponseBody(body.contentType())) .build() try { // Search for captcha