diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index ff897c009..e90e76bc4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -843,10 +843,11 @@ class ReaderActivity : BaseRxActivity() !preferences.forceHorizontalSeekbar().get() && ( ( - resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE && preferences.landscapeVerticalSeekbar().get()) || + resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE && preferences.landscapeVerticalSeekbar().get() + ) || resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT - ) - && (viewer is WebtoonViewer || viewer is VerticalPagerViewer) + ) && + (viewer is WebtoonViewer || viewer is VerticalPagerViewer) ) { binding.readerNavVert.isVisible = true binding.readerNavHorz.isVisible = false diff --git a/app/src/main/java/exh/eh/EHentaiUpdateWorker.kt b/app/src/main/java/exh/eh/EHentaiUpdateWorker.kt index 53b5db284..f97df9d17 100644 --- a/app/src/main/java/exh/eh/EHentaiUpdateWorker.kt +++ b/app/src/main/java/exh/eh/EHentaiUpdateWorker.kt @@ -232,7 +232,7 @@ class EHentaiUpdateWorker : JobService() { if ((new.isNotEmpty() && manga.id == acceptedRoot.manga.id) || (hasNew && updatedManga.none { it.first.id == acceptedRoot.manga.id }) ) { - updatedManga += Pair(acceptedRoot.manga, new.toTypedArray()) + updatedManga += acceptedRoot.manga to new.toTypedArray() } modifiedThisIteration += acceptedRoot.manga.id!! diff --git a/app/src/main/java/exh/util/RxUtil.kt b/app/src/main/java/exh/util/RxUtil.kt index f64d49646..e6face8ad 100644 --- a/app/src/main/java/exh/util/RxUtil.kt +++ b/app/src/main/java/exh/util/RxUtil.kt @@ -25,196 +25,3 @@ fun Observable.melt(): Observable { subscribe(rs) return rs } -/* -suspend fun Single.await(subscribeOn: Scheduler? = null): T { - return suspendCancellableCoroutine { continuation -> - val self = if (subscribeOn != null) subscribeOn(subscribeOn) else this - lateinit var sub: Subscription - sub = self.subscribe( - { - continuation.resume(it) { - sub.unsubscribe() - } - }, - { - if (!continuation.isCancelled) { - continuation.resumeWithException(it) - } - } - ) - - continuation.invokeOnCancellation { - sub.unsubscribe() - } - } -} - -suspend fun PreparedOperation.await(): T = asRxSingle().await() -suspend fun PreparedGetObject.await(): T? = asRxSingle().await() - -suspend fun Completable.awaitSuspending(subscribeOn: Scheduler? = null) { - return suspendCancellableCoroutine { continuation -> - val self = if (subscribeOn != null) subscribeOn(subscribeOn) else this - lateinit var sub: Subscription - sub = self.subscribe( - { - continuation.resume(Unit) { - sub.unsubscribe() - } - }, - { - if (!continuation.isCancelled) { - continuation.resumeWithException(it) - } - } - ) - - continuation.invokeOnCancellation { - sub.unsubscribe() - } - } -} - -suspend fun Completable.awaitCompleted(): Unit = suspendCancellableCoroutine { cont -> - subscribe( - object : CompletableSubscriber { - override fun onSubscribe(s: Subscription) { - cont.unsubscribeOnCancellation(s) - } - - override fun onCompleted() { - cont.resume(Unit) - } - - override fun onError(e: Throwable) { - cont.resumeWithException(e) - } - } - ) -} - -suspend fun Single.await(): T = suspendCancellableCoroutine { cont -> - cont.unsubscribeOnCancellation( - subscribe( - object : SingleSubscriber() { - override fun onSuccess(t: T) { - cont.resume(t) - } - - override fun onError(error: Throwable) { - cont.resumeWithException(error) - } - } - ) - ) -} - -@OptIn(InternalCoroutinesApi::class) -suspend fun Observable.awaitFirst(): T = first().awaitOne() - -@OptIn(InternalCoroutinesApi::class) -suspend fun Observable.awaitFirstOrDefault(default: T): T = firstOrDefault(default).awaitOne() - -@OptIn(InternalCoroutinesApi::class) -suspend fun Observable.awaitFirstOrNull(): T? = firstOrDefault(null).awaitOne() - -@OptIn(InternalCoroutinesApi::class) -suspend fun Observable.awaitFirstOrElse(defaultValue: () -> T): T = switchIfEmpty( - Observable.fromCallable( - defaultValue - ) -).first().awaitOne() - -@OptIn(InternalCoroutinesApi::class) -suspend fun Observable.awaitLast(): T = last().awaitOne() - -@OptIn(InternalCoroutinesApi::class) -suspend fun Observable.awaitSingle(): T = single().awaitOne() - -suspend fun Observable.awaitSingleOrDefault(default: T): T = singleOrDefault(default).awaitOne() - -suspend fun Observable.awaitSingleOrNull(): T? = singleOrDefault(null).awaitOne() - -@OptIn(InternalCoroutinesApi::class) -private suspend fun Observable.awaitOne(): T = suspendCancellableCoroutine { cont -> - cont.unsubscribeOnCancellation( - subscribe( - object : Subscriber() { - override fun onStart() { - request(1) - } - - override fun onNext(t: T) { - cont.resume(t) - } - - override fun onCompleted() { - if (cont.isActive) cont.resumeWithException( - IllegalStateException( - "Should have invoked onNext" - ) - ) - } - - override fun onError(e: Throwable) { - *//* - * Rx1 observable throws NoSuchElementException if cancellation happened before - * element emission. To mitigate this we try to atomically resume continuation with exception: - * if resume failed, then we know that continuation successfully cancelled itself - *//* - val token = cont.tryResumeWithException(e) - if (token != null) { - cont.completeResume(token) - } - } - } - ) - ) -} - -internal fun CancellableContinuation.unsubscribeOnCancellation(sub: Subscription) = - invokeOnCancellation { sub.unsubscribe() } - -fun Observable.asFlow(): Flow = callbackFlow { - val observer = object : Observer { - override fun onNext(t: T) { - offer(t) - } - - override fun onError(e: Throwable) { - close(e) - } - - override fun onCompleted() { - close() - } - } - val subscription = subscribe(observer) - awaitClose { subscription.unsubscribe() } -} - -fun Flow.asObservable(backpressureMode: Emitter.BackpressureMode = Emitter.BackpressureMode.NONE): Observable { - return Observable.create( - { emitter -> - *//* - * ATOMIC is used here to provide stable behaviour of subscribe+dispose pair even if - * asObservable is already invoked from unconfined - *//* - val job = GlobalScope.launch(Dispatchers.Unconfined, start = CoroutineStart.ATOMIC) { - try { - collect { emitter.onNext(it) } - emitter.onCompleted() - } catch (e: Throwable) { - // Ignore `CancellationException` as error, since it indicates "normal cancellation" - if (e !is CancellationException) { - emitter.onError(e) - } else { - emitter.onCompleted() - } - } - } - emitter.setCancellation { job.cancel() } - }, - backpressureMode - ) -}*/ diff --git a/app/src/main/java/exh/util/StringUtil.kt b/app/src/main/java/exh/util/StringUtil.kt index 35f0b4ac5..32c2ab5ec 100644 --- a/app/src/main/java/exh/util/StringUtil.kt +++ b/app/src/main/java/exh/util/StringUtil.kt @@ -7,7 +7,7 @@ fun List.dropEmpty() = filter { it.isNotEmpty() } private val articleRegex by lazy { "^(an|a|the) ".toRegex(RegexOption.IGNORE_CASE) } fun String.removeArticles(): String { - return this.replace(articleRegex, "") + return replace(articleRegex, "") } fun String.trimOrNull(): String? {