mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Bump dependencies + linting
This commit is contained in:
		@@ -13,11 +13,13 @@ class SetMigrateSorting(
 | 
			
		||||
 | 
			
		||||
    enum class Mode {
 | 
			
		||||
        ALPHABETICAL,
 | 
			
		||||
        TOTAL;
 | 
			
		||||
        TOTAL,
 | 
			
		||||
        ;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    enum class Direction {
 | 
			
		||||
        ASCENDING,
 | 
			
		||||
        DESCENDING;
 | 
			
		||||
        DESCENDING,
 | 
			
		||||
        ;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -338,7 +338,9 @@ private fun InfoText(
 | 
			
		||||
 | 
			
		||||
    val clickableModifier = if (onClick != null) {
 | 
			
		||||
        Modifier.clickable(interactionSource, indication = null) { onClick() }
 | 
			
		||||
    } else Modifier
 | 
			
		||||
    } else {
 | 
			
		||||
        Modifier
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Column(
 | 
			
		||||
        modifier = modifier.then(clickableModifier),
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,8 @@ import eu.kanade.tachiyomi.R
 | 
			
		||||
 | 
			
		||||
enum class MangaCover(val ratio: Float) {
 | 
			
		||||
    Square(1f / 1f),
 | 
			
		||||
    Book(2f / 3f);
 | 
			
		||||
    Book(2f / 3f),
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
    @Composable
 | 
			
		||||
    operator fun invoke(
 | 
			
		||||
@@ -42,7 +43,9 @@ enum class MangaCover(val ratio: Float) {
 | 
			
		||||
                            role = Role.Button,
 | 
			
		||||
                            onClick = onClick,
 | 
			
		||||
                        )
 | 
			
		||||
                    } else Modifier,
 | 
			
		||||
                    } else {
 | 
			
		||||
                        Modifier
 | 
			
		||||
                    },
 | 
			
		||||
                ),
 | 
			
		||||
            contentScale = ContentScale.Crop,
 | 
			
		||||
        )
 | 
			
		||||
 
 | 
			
		||||
@@ -220,12 +220,18 @@ private fun ScaffoldLayout(
 | 
			
		||||
                    .asPaddingValues(this@SubcomposeLayout)
 | 
			
		||||
                val innerPadding = PaddingValues(
 | 
			
		||||
                    top =
 | 
			
		||||
                    if (topBarHeight == 0) insets.calculateTopPadding()
 | 
			
		||||
                    else topBarHeight.toDp(),
 | 
			
		||||
                    if (topBarHeight == 0) {
 | 
			
		||||
                        insets.calculateTopPadding()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        topBarHeight.toDp()
 | 
			
		||||
                    },
 | 
			
		||||
                    bottom =
 | 
			
		||||
                    (
 | 
			
		||||
                        if (bottomBarHeight == 0) insets.calculateBottomPadding()
 | 
			
		||||
                        else bottomBarHeight.toDp()
 | 
			
		||||
                        if (bottomBarHeight == 0) {
 | 
			
		||||
                            insets.calculateBottomPadding()
 | 
			
		||||
                        } else {
 | 
			
		||||
                            bottomBarHeight.toDp()
 | 
			
		||||
                        }
 | 
			
		||||
                        ) + fabHeight.toDp(),
 | 
			
		||||
                    start = insets.calculateLeftPadding((this@SubcomposeLayout).layoutDirection),
 | 
			
		||||
                    end = insets.calculateRightPadding((this@SubcomposeLayout).layoutDirection),
 | 
			
		||||
 
 | 
			
		||||
@@ -145,13 +145,17 @@ fun VerticalFastScroller(
 | 
			
		||||
                                    )
 | 
			
		||||
                                },
 | 
			
		||||
                            )
 | 
			
		||||
                        } else Modifier,
 | 
			
		||||
                        } else {
 | 
			
		||||
                            Modifier
 | 
			
		||||
                        },
 | 
			
		||||
                    )
 | 
			
		||||
                    .then(
 | 
			
		||||
                        // Exclude thumb from gesture area only when needed
 | 
			
		||||
                        if (isThumbVisible && !isThumbDragged && !listState.isScrollInProgress) {
 | 
			
		||||
                            Modifier.systemGestureExclusion()
 | 
			
		||||
                        } else Modifier,
 | 
			
		||||
                        } else {
 | 
			
		||||
                            Modifier
 | 
			
		||||
                        },
 | 
			
		||||
                    )
 | 
			
		||||
                    .height(ThumbLength)
 | 
			
		||||
                    .padding(horizontal = 8.dp)
 | 
			
		||||
@@ -321,13 +325,17 @@ fun VerticalGridFastScroller(
 | 
			
		||||
                                    )
 | 
			
		||||
                                },
 | 
			
		||||
                            )
 | 
			
		||||
                        } else Modifier,
 | 
			
		||||
                        } else {
 | 
			
		||||
                            Modifier
 | 
			
		||||
                        },
 | 
			
		||||
                    )
 | 
			
		||||
                    .then(
 | 
			
		||||
                        // Exclude thumb from gesture area only when needed
 | 
			
		||||
                        if (isThumbVisible && !isThumbDragged && !state.isScrollInProgress) {
 | 
			
		||||
                            Modifier.systemGestureExclusion()
 | 
			
		||||
                        } else Modifier,
 | 
			
		||||
                        } else {
 | 
			
		||||
                            Modifier
 | 
			
		||||
                        },
 | 
			
		||||
                    )
 | 
			
		||||
                    .height(ThumbLength)
 | 
			
		||||
                    .padding(horizontal = 8.dp)
 | 
			
		||||
 
 | 
			
		||||
@@ -673,7 +673,9 @@ private fun LazyListScope.sharedChapterItems(
 | 
			
		||||
            },
 | 
			
		||||
            onDownloadClick = if (onDownloadChapter != null) {
 | 
			
		||||
                { onDownloadChapter(listOf(chapterItem), it) }
 | 
			
		||||
            } else null,
 | 
			
		||||
            } else {
 | 
			
		||||
                null
 | 
			
		||||
            },
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ enum class DownloadAction {
 | 
			
		||||
    NEXT_10_CHAPTERS,
 | 
			
		||||
    CUSTOM,
 | 
			
		||||
    UNREAD_CHAPTERS,
 | 
			
		||||
    ALL_CHAPTERS
 | 
			
		||||
    ALL_CHAPTERS,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
enum class EditCoverAction {
 | 
			
		||||
 
 | 
			
		||||
@@ -316,10 +316,12 @@ private fun MangaAndSourceTitlesLarge(
 | 
			
		||||
                .padding(top = 2.dp)
 | 
			
		||||
                .clickableNoIndication(
 | 
			
		||||
                    onLongClick = {
 | 
			
		||||
                        if (!author.isNullOrBlank()) context.copyToClipboard(
 | 
			
		||||
                            author,
 | 
			
		||||
                            author,
 | 
			
		||||
                        )
 | 
			
		||||
                        if (!author.isNullOrBlank()) {
 | 
			
		||||
                            context.copyToClipboard(
 | 
			
		||||
                                author,
 | 
			
		||||
                                author,
 | 
			
		||||
                            )
 | 
			
		||||
                        }
 | 
			
		||||
                    },
 | 
			
		||||
                    onClick = { if (!author.isNullOrBlank()) doSearch(author, true) },
 | 
			
		||||
                ),
 | 
			
		||||
@@ -428,10 +430,12 @@ private fun MangaAndSourceTitlesSmall(
 | 
			
		||||
                style = MaterialTheme.typography.titleLarge,
 | 
			
		||||
                modifier = Modifier.clickableNoIndication(
 | 
			
		||||
                    onLongClick = {
 | 
			
		||||
                        if (title.isNotBlank()) context.copyToClipboard(
 | 
			
		||||
                            title,
 | 
			
		||||
                            title,
 | 
			
		||||
                        )
 | 
			
		||||
                        if (title.isNotBlank()) {
 | 
			
		||||
                            context.copyToClipboard(
 | 
			
		||||
                                title,
 | 
			
		||||
                                title,
 | 
			
		||||
                            )
 | 
			
		||||
                        }
 | 
			
		||||
                    },
 | 
			
		||||
                    onClick = { if (title.isNotBlank()) doSearch(title, true) },
 | 
			
		||||
                ),
 | 
			
		||||
@@ -446,10 +450,12 @@ private fun MangaAndSourceTitlesSmall(
 | 
			
		||||
                    .padding(top = 2.dp)
 | 
			
		||||
                    .clickableNoIndication(
 | 
			
		||||
                        onLongClick = {
 | 
			
		||||
                            if (!author.isNullOrBlank()) context.copyToClipboard(
 | 
			
		||||
                                author,
 | 
			
		||||
                                author,
 | 
			
		||||
                            )
 | 
			
		||||
                            if (!author.isNullOrBlank()) {
 | 
			
		||||
                                context.copyToClipboard(
 | 
			
		||||
                                    author,
 | 
			
		||||
                                    author,
 | 
			
		||||
                                )
 | 
			
		||||
                            }
 | 
			
		||||
                        },
 | 
			
		||||
                        onClick = { if (!author.isNullOrBlank()) doSearch(author, true) },
 | 
			
		||||
                    ),
 | 
			
		||||
 
 | 
			
		||||
@@ -103,12 +103,16 @@ private fun Modifier.drawScrollbar(
 | 
			
		||||
    val estimatedItemSize = if (items.isEmpty()) 0f else itemsSize.toFloat() / items.size
 | 
			
		||||
    val totalSize = estimatedItemSize * layoutInfo.totalItemsCount
 | 
			
		||||
    val thumbSize = viewportSize / totalSize * viewportSize
 | 
			
		||||
    val startOffset = if (items.isEmpty()) 0f else items
 | 
			
		||||
        .first()
 | 
			
		||||
        .run {
 | 
			
		||||
            val startPadding = if (reverseDirection) layoutInfo.afterContentPadding else layoutInfo.beforeContentPadding
 | 
			
		||||
            startPadding + ((estimatedItemSize * index - offset) / totalSize * viewportSize)
 | 
			
		||||
        }
 | 
			
		||||
    val startOffset = if (items.isEmpty()) {
 | 
			
		||||
        0f
 | 
			
		||||
    } else {
 | 
			
		||||
        items
 | 
			
		||||
            .first()
 | 
			
		||||
            .run {
 | 
			
		||||
                val startPadding = if (reverseDirection) layoutInfo.afterContentPadding else layoutInfo.beforeContentPadding
 | 
			
		||||
                startPadding + ((estimatedItemSize * index - offset) / totalSize * viewportSize)
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
    val drawScrollbar = onDrawScrollbar(
 | 
			
		||||
        orientation, reverseDirection, atEnd, showScrollbar,
 | 
			
		||||
        thickness, color, alpha, thumbSize, startOffset, positionOffset,
 | 
			
		||||
@@ -202,7 +206,9 @@ private fun Modifier.drawScrollbar(
 | 
			
		||||
    val isLtr = LocalLayoutDirection.current == LayoutDirection.Ltr
 | 
			
		||||
    val reverseDirection = if (orientation == Orientation.Horizontal) {
 | 
			
		||||
        if (isLtr) reverseScrolling else !reverseScrolling
 | 
			
		||||
    } else reverseScrolling
 | 
			
		||||
    } else {
 | 
			
		||||
        reverseScrolling
 | 
			
		||||
    }
 | 
			
		||||
    val atEnd = if (orientation == Orientation.Vertical) isLtr else true
 | 
			
		||||
 | 
			
		||||
    val context = LocalContext.current
 | 
			
		||||
 
 | 
			
		||||
@@ -111,8 +111,11 @@ object Migrations {
 | 
			
		||||
                // Migrate library filters to tri-state versions
 | 
			
		||||
                fun convertBooleanPrefToTriState(key: String): Int {
 | 
			
		||||
                    val oldPrefValue = prefs.getBoolean(key, false)
 | 
			
		||||
                    return if (oldPrefValue) ExtendedNavigationView.Item.TriStateGroup.State.INCLUDE.value
 | 
			
		||||
                    else ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value
 | 
			
		||||
                    return if (oldPrefValue) {
 | 
			
		||||
                        ExtendedNavigationView.Item.TriStateGroup.State.INCLUDE.value
 | 
			
		||||
                    } else {
 | 
			
		||||
                        ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                prefs.edit {
 | 
			
		||||
                    putInt(PreferenceKeys.filterDownloaded, convertBooleanPrefToTriState("pref_filter_downloaded_key"))
 | 
			
		||||
 
 | 
			
		||||
@@ -44,8 +44,11 @@ class BackupFileValidator(
 | 
			
		||||
            .filter { sourceManager.get(it.key) == null }
 | 
			
		||||
            .values.map {
 | 
			
		||||
                val id = it.toLongOrNull()
 | 
			
		||||
                if (id == null) it
 | 
			
		||||
                else sourceManager.getOrStub(id).toString()
 | 
			
		||||
                if (id == null) {
 | 
			
		||||
                    it
 | 
			
		||||
                } else {
 | 
			
		||||
                    sourceManager.getOrStub(id).toString()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            .distinct()
 | 
			
		||||
            .sorted()
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,8 @@ data class BackupTracking(
 | 
			
		||||
    @ProtoNumber(1) var syncId: Int,
 | 
			
		||||
    // LibraryId is not null in 1.x
 | 
			
		||||
    @ProtoNumber(2) var libraryId: Long,
 | 
			
		||||
    @Deprecated("Use mediaId instead", level = DeprecationLevel.WARNING) @ProtoNumber(3)
 | 
			
		||||
    @Deprecated("Use mediaId instead", level = DeprecationLevel.WARNING)
 | 
			
		||||
    @ProtoNumber(3)
 | 
			
		||||
    var mediaIdInt: Int = 0,
 | 
			
		||||
    // trackingUrl is called mediaUrl in 1.x
 | 
			
		||||
    @ProtoNumber(4) var trackingUrl: String = "",
 | 
			
		||||
 
 | 
			
		||||
@@ -30,29 +30,37 @@ class BangumiInterceptor(val bangumi: Bangumi) : Interceptor {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val authRequest = if (originalRequest.method == "GET") originalRequest.newBuilder()
 | 
			
		||||
            .header("User-Agent", "Tachiyomi")
 | 
			
		||||
            .url(
 | 
			
		||||
                originalRequest.url.newBuilder()
 | 
			
		||||
                    .addQueryParameter("access_token", currAuth.access_token).build(),
 | 
			
		||||
            )
 | 
			
		||||
            .build() else originalRequest.newBuilder()
 | 
			
		||||
            .post(addToken(currAuth.access_token, originalRequest.body as FormBody))
 | 
			
		||||
            .header("User-Agent", "Tachiyomi")
 | 
			
		||||
            .build()
 | 
			
		||||
        val authRequest = if (originalRequest.method == "GET") {
 | 
			
		||||
            originalRequest.newBuilder()
 | 
			
		||||
                .header("User-Agent", "Tachiyomi")
 | 
			
		||||
                .url(
 | 
			
		||||
                    originalRequest.url.newBuilder()
 | 
			
		||||
                        .addQueryParameter("access_token", currAuth.access_token).build(),
 | 
			
		||||
                )
 | 
			
		||||
                .build()
 | 
			
		||||
        } else {
 | 
			
		||||
            originalRequest.newBuilder()
 | 
			
		||||
                .post(addToken(currAuth.access_token, originalRequest.body as FormBody))
 | 
			
		||||
                .header("User-Agent", "Tachiyomi")
 | 
			
		||||
                .build()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return chain.proceed(authRequest)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun newAuth(oauth: OAuth?) {
 | 
			
		||||
        this.oauth = if (oauth == null) null else OAuth(
 | 
			
		||||
            oauth.access_token,
 | 
			
		||||
            oauth.token_type,
 | 
			
		||||
            System.currentTimeMillis() / 1000,
 | 
			
		||||
            oauth.expires_in,
 | 
			
		||||
            oauth.refresh_token,
 | 
			
		||||
            this.oauth?.user_id,
 | 
			
		||||
        )
 | 
			
		||||
        this.oauth = if (oauth == null) {
 | 
			
		||||
            null
 | 
			
		||||
        } else {
 | 
			
		||||
            OAuth(
 | 
			
		||||
                oauth.access_token,
 | 
			
		||||
                oauth.token_type,
 | 
			
		||||
                System.currentTimeMillis() / 1000,
 | 
			
		||||
                oauth.expires_in,
 | 
			
		||||
                oauth.refresh_token,
 | 
			
		||||
                this.oauth?.user_id,
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        bangumi.saveToken(oauth)
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -41,8 +41,11 @@ class KomgaApi(private val client: OkHttpClient) {
 | 
			
		||||
                val progress = client
 | 
			
		||||
                    .newCall(GET("${url.replace("/api/v1/series/", "/api/v2/series/")}/read-progress/tachiyomi"))
 | 
			
		||||
                    .await().let {
 | 
			
		||||
                        if (url.contains("/api/v1/series/")) it.parseAs<ReadProgressV2Dto>()
 | 
			
		||||
                        else it.parseAs<ReadProgressDto>().toV2()
 | 
			
		||||
                        if (url.contains("/api/v1/series/")) {
 | 
			
		||||
                            it.parseAs<ReadProgressV2Dto>()
 | 
			
		||||
                        } else {
 | 
			
		||||
                            it.parseAs<ReadProgressDto>().toV2()
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                track.apply {
 | 
			
		||||
 
 | 
			
		||||
@@ -29,14 +29,18 @@ internal class ExtensionGithubApi {
 | 
			
		||||
 | 
			
		||||
    suspend fun findExtensions(): List<Extension.Available> {
 | 
			
		||||
        return withIOContext {
 | 
			
		||||
            val githubResponse = if (requiresFallbackSource) null else try {
 | 
			
		||||
                networkService.client
 | 
			
		||||
                    .newCall(GET("${REPO_URL_PREFIX}index.min.json"))
 | 
			
		||||
                    .await()
 | 
			
		||||
            } catch (e: Throwable) {
 | 
			
		||||
                logcat(LogPriority.ERROR, e) { "Failed to get extensions from GitHub" }
 | 
			
		||||
                requiresFallbackSource = true
 | 
			
		||||
            val githubResponse = if (requiresFallbackSource) {
 | 
			
		||||
                null
 | 
			
		||||
            } else {
 | 
			
		||||
                try {
 | 
			
		||||
                    networkService.client
 | 
			
		||||
                        .newCall(GET("${REPO_URL_PREFIX}index.min.json"))
 | 
			
		||||
                        .await()
 | 
			
		||||
                } catch (e: Throwable) {
 | 
			
		||||
                    logcat(LogPriority.ERROR, e) { "Failed to get extensions from GitHub" }
 | 
			
		||||
                    requiresFallbackSource = true
 | 
			
		||||
                    null
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            val response = githubResponse ?: run {
 | 
			
		||||
 
 | 
			
		||||
@@ -50,11 +50,13 @@ internal class ExtensionInstallReceiver(private val listener: Listener) :
 | 
			
		||||
 | 
			
		||||
        when (intent.action) {
 | 
			
		||||
            Intent.ACTION_PACKAGE_ADDED -> {
 | 
			
		||||
                if (!isReplacing(intent)) launchNow {
 | 
			
		||||
                    when (val result = getExtensionFromIntent(context, intent)) {
 | 
			
		||||
                        is LoadResult.Success -> listener.onExtensionInstalled(result.extension)
 | 
			
		||||
                        is LoadResult.Untrusted -> listener.onExtensionUntrusted(result.extension)
 | 
			
		||||
                        else -> {}
 | 
			
		||||
                if (!isReplacing(intent)) {
 | 
			
		||||
                    launchNow {
 | 
			
		||||
                        when (val result = getExtensionFromIntent(context, intent)) {
 | 
			
		||||
                            is LoadResult.Success -> listener.onExtensionInstalled(result.extension)
 | 
			
		||||
                            is LoadResult.Untrusted -> listener.onExtensionUntrusted(result.extension)
 | 
			
		||||
                            else -> {}
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -238,7 +238,9 @@ class UpdatesGridGlanceWidget : GlanceAppWidget() {
 | 
			
		||||
                    .let {
 | 
			
		||||
                        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
 | 
			
		||||
                            it.transformations(RoundedCornersTransformation(roundPx))
 | 
			
		||||
                        } else it // Handled by system
 | 
			
		||||
                        } else {
 | 
			
		||||
                            it // Handled by system
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    .build()
 | 
			
		||||
                Pair(updatesView.mangaId, app.imageLoader.executeBlocking(request).drawable?.toBitmap())
 | 
			
		||||
 
 | 
			
		||||
@@ -74,10 +74,12 @@ internal class RateLimitInterceptor(
 | 
			
		||||
                        throw IOException("Canceled")
 | 
			
		||||
                    } else if (hasRemovedExpired) {
 | 
			
		||||
                        break
 | 
			
		||||
                    } else try { // wait for the first entry to expire, or notified by cached response
 | 
			
		||||
                        (requestQueue as Object).wait(requestQueue.first - periodStart)
 | 
			
		||||
                    } catch (_: InterruptedException) {
 | 
			
		||||
                        continue
 | 
			
		||||
                    } else {
 | 
			
		||||
                        try { // wait for the first entry to expire, or notified by cached response
 | 
			
		||||
                            (requestQueue as Object).wait(requestQueue.first - periodStart)
 | 
			
		||||
                        } catch (_: InterruptedException) {
 | 
			
		||||
                            continue
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,7 @@ private var lockState = LockState.INACTIVE
 | 
			
		||||
private enum class LockState {
 | 
			
		||||
    INACTIVE,
 | 
			
		||||
    PENDING,
 | 
			
		||||
    ACTIVE
 | 
			
		||||
    ACTIVE,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class SecureActivityDelegateImpl : SecureActivityDelegate, DefaultLifecycleObserver {
 | 
			
		||||
 
 | 
			
		||||
@@ -167,8 +167,11 @@ class SearchPresenter(
 | 
			
		||||
                val service = enhancedServices
 | 
			
		||||
                    .firstOrNull { it.isTrackFrom(updatedTrack, prevManga, prevSource) }
 | 
			
		||||
 | 
			
		||||
                if (service != null) service.migrateTrack(updatedTrack, manga, source)
 | 
			
		||||
                else updatedTrack
 | 
			
		||||
                if (service != null) {
 | 
			
		||||
                    service.migrateTrack(updatedTrack, manga, source)
 | 
			
		||||
                } else {
 | 
			
		||||
                    updatedTrack
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            insertTrack.awaitAll(tracks)
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -190,32 +190,44 @@ class LibraryPresenter(
 | 
			
		||||
                else -> downloadManager.getDownloadCount(item.manga.toDomainManga()!!) > 0
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return@downloaded if (downloadedOnly || filterDownloaded == State.INCLUDE.value) isDownloaded
 | 
			
		||||
            else !isDownloaded
 | 
			
		||||
            return@downloaded if (downloadedOnly || filterDownloaded == State.INCLUDE.value) {
 | 
			
		||||
                isDownloaded
 | 
			
		||||
            } else {
 | 
			
		||||
                !isDownloaded
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val filterFnUnread: (LibraryItem) -> Boolean = unread@{ item ->
 | 
			
		||||
            if (filterUnread == State.IGNORE.value) return@unread true
 | 
			
		||||
            val isUnread = item.manga.unreadCount != 0
 | 
			
		||||
 | 
			
		||||
            return@unread if (filterUnread == State.INCLUDE.value) isUnread
 | 
			
		||||
            else !isUnread
 | 
			
		||||
            return@unread if (filterUnread == State.INCLUDE.value) {
 | 
			
		||||
                isUnread
 | 
			
		||||
            } else {
 | 
			
		||||
                !isUnread
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val filterFnStarted: (LibraryItem) -> Boolean = started@{ item ->
 | 
			
		||||
            if (filterStarted == State.IGNORE.value) return@started true
 | 
			
		||||
            val hasStarted = item.manga.hasStarted
 | 
			
		||||
 | 
			
		||||
            return@started if (filterStarted == State.INCLUDE.value) hasStarted
 | 
			
		||||
            else !hasStarted
 | 
			
		||||
            return@started if (filterStarted == State.INCLUDE.value) {
 | 
			
		||||
                hasStarted
 | 
			
		||||
            } else {
 | 
			
		||||
                !hasStarted
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val filterFnCompleted: (LibraryItem) -> Boolean = completed@{ item ->
 | 
			
		||||
            if (filterCompleted == State.IGNORE.value) return@completed true
 | 
			
		||||
            val isCompleted = item.manga.status == SManga.COMPLETED
 | 
			
		||||
 | 
			
		||||
            return@completed if (filterCompleted == State.INCLUDE.value) isCompleted
 | 
			
		||||
            else !isCompleted
 | 
			
		||||
            return@completed if (filterCompleted == State.INCLUDE.value) {
 | 
			
		||||
                isCompleted
 | 
			
		||||
            } else {
 | 
			
		||||
                !isCompleted
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val filterFnTracking: (LibraryItem) -> Boolean = tracking@{ item ->
 | 
			
		||||
 
 | 
			
		||||
@@ -305,7 +305,8 @@ class MangaController : FullComposeController<MangaPresenter> {
 | 
			
		||||
                previousController.search(query)
 | 
			
		||||
            }
 | 
			
		||||
            is UpdatesController,
 | 
			
		||||
            is HistoryController, -> {
 | 
			
		||||
            is HistoryController,
 | 
			
		||||
            -> {
 | 
			
		||||
                // Manually navigate to LibraryController
 | 
			
		||||
                router.handleBack()
 | 
			
		||||
                (router.activity as MainActivity).setSelectedNavItem(R.id.nav_library)
 | 
			
		||||
 
 | 
			
		||||
@@ -151,7 +151,9 @@ class HttpPageLoader(
 | 
			
		||||
            .mapNotNull {
 | 
			
		||||
                if (it.status == Page.QUEUE) {
 | 
			
		||||
                    PriorityPage(it, 0).apply { queue.offer(this) }
 | 
			
		||||
                } else null
 | 
			
		||||
                } else {
 | 
			
		||||
                    null
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,8 @@ enum class OrientationType(val prefValue: Int, val flag: Int, @StringRes val str
 | 
			
		||||
    REVERSE_PORTRAIT(6, ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT, R.string.rotation_reverse_portrait, R.drawable.ic_stay_current_portrait_24dp, 0x00000030),
 | 
			
		||||
    LANDSCAPE(3, ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE, R.string.rotation_landscape, R.drawable.ic_stay_current_landscape_24dp, 0x00000018),
 | 
			
		||||
    LOCKED_PORTRAIT(4, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT, R.string.rotation_force_portrait, R.drawable.ic_screen_lock_portrait_24dp, 0x00000020),
 | 
			
		||||
    LOCKED_LANDSCAPE(5, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, R.string.rotation_force_landscape, R.drawable.ic_screen_lock_landscape_24dp, 0x00000028);
 | 
			
		||||
    LOCKED_LANDSCAPE(5, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, R.string.rotation_force_landscape, R.drawable.ic_screen_lock_landscape_24dp, 0x00000028),
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        const val MASK = 0x00000038
 | 
			
		||||
 
 | 
			
		||||
@@ -171,7 +171,8 @@ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() {
 | 
			
		||||
 | 
			
		||||
        val placeAtIndex = when (viewer) {
 | 
			
		||||
            is L2RPagerViewer,
 | 
			
		||||
            is VerticalPagerViewer, -> currentIndex + 1
 | 
			
		||||
            is VerticalPagerViewer,
 | 
			
		||||
            -> currentIndex + 1
 | 
			
		||||
            else -> currentIndex
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -33,11 +33,13 @@ private suspend fun <T> Observable<T>.awaitOne(): T = suspendCancellableCoroutin
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onCompleted() {
 | 
			
		||||
                    if (cont.isActive) cont.resumeWithException(
 | 
			
		||||
                        IllegalStateException(
 | 
			
		||||
                            "Should have invoked onNext",
 | 
			
		||||
                        ),
 | 
			
		||||
                    )
 | 
			
		||||
                    if (cont.isActive) {
 | 
			
		||||
                        cont.resumeWithException(
 | 
			
		||||
                            IllegalStateException(
 | 
			
		||||
                                "Should have invoked onNext",
 | 
			
		||||
                            ),
 | 
			
		||||
                        )
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onError(e: Throwable) {
 | 
			
		||||
 
 | 
			
		||||
@@ -117,7 +117,7 @@ open class ExtendedNavigationView @JvmOverloads constructor(
 | 
			
		||||
            enum class State(val value: Int) {
 | 
			
		||||
                IGNORE(0),
 | 
			
		||||
                INCLUDE(1),
 | 
			
		||||
                EXCLUDE(2)
 | 
			
		||||
                EXCLUDE(2),
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            override fun getStateDrawable(context: Context): Drawable? {
 | 
			
		||||
 
 | 
			
		||||
@@ -46,7 +46,9 @@ class MaterialFastScroll @JvmOverloads constructor(context: Context, attrs: Attr
 | 
			
		||||
                    } else {
 | 
			
		||||
                        event.x > handle.width + ViewCompat.getPaddingStart(handle)
 | 
			
		||||
                    }
 | 
			
		||||
                ) return false
 | 
			
		||||
                ) {
 | 
			
		||||
                    return false
 | 
			
		||||
                }
 | 
			
		||||
                // end
 | 
			
		||||
 | 
			
		||||
                if (ignoreTouchesOutsideHandle &&
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,9 @@ class TachiyomiChangeHandlerFrameLayout(
 | 
			
		||||
            behavior.apply {
 | 
			
		||||
                shouldHeaderOverlap = overlapHeader
 | 
			
		||||
            }
 | 
			
		||||
        } else null
 | 
			
		||||
        } else {
 | 
			
		||||
            null
 | 
			
		||||
        }
 | 
			
		||||
        if (!enable) {
 | 
			
		||||
            // The behavior doesn't reset translationY when shouldHeaderOverlap is false
 | 
			
		||||
            translationY = 0F
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,9 @@ class TachiyomiSearchView @JvmOverloads constructor(
 | 
			
		||||
                clearFocus()
 | 
			
		||||
                listener?.onQueryTextSubmit(query.toString())
 | 
			
		||||
                true
 | 
			
		||||
            } else false
 | 
			
		||||
            } else {
 | 
			
		||||
                false
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user