increase thread count limit (#372)

This commit is contained in:
AmirHossein Abdolmotallebi 2025-01-17 01:22:57 +03:30 committed by GitHub
parent 3db6306177
commit 4fe7740fb3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 34 additions and 19 deletions

View File

@ -8,6 +8,7 @@ import com.abdownloadmanager.desktop.pages.settings.configurable.StringConfigura
import com.abdownloadmanager.desktop.repository.AppRepository import com.abdownloadmanager.desktop.repository.AppRepository
import com.abdownloadmanager.desktop.utils.* import com.abdownloadmanager.desktop.utils.*
import androidx.compose.runtime.* import androidx.compose.runtime.*
import com.abdownloadmanager.desktop.pages.settings.ThreadCountLimitation
import com.abdownloadmanager.desktop.pages.settings.configurable.FileChecksumConfigurable import com.abdownloadmanager.desktop.pages.settings.configurable.FileChecksumConfigurable
import com.abdownloadmanager.desktop.pages.settings.configurable.widgets.RenderFileChecksumConfig import com.abdownloadmanager.desktop.pages.settings.configurable.widgets.RenderFileChecksumConfig
import com.abdownloadmanager.shared.utils.mvi.ContainsEffects import com.abdownloadmanager.shared.utils.mvi.ContainsEffects
@ -285,7 +286,7 @@ class AddSingleDownloadComponent(
it.takeIf { it > 1 } it.takeIf { it > 1 }
} }
), ),
range = 0..32, range = 0..ThreadCountLimitation.MAX_ALLOWED_THREAD_COUNT,
describe = { describe = {
if (it == 0) Res.string.use_global_settings.asStringSource() if (it == 0) Res.string.use_global_settings.asStringSource()
else Res.string.download_item_settings_thread_count_describe else Res.string.download_item_settings_thread_count_describe

View File

@ -1,5 +1,6 @@
package com.abdownloadmanager.desktop.pages.editdownload package com.abdownloadmanager.desktop.pages.editdownload
import com.abdownloadmanager.desktop.pages.settings.ThreadCountLimitation
import com.abdownloadmanager.desktop.pages.settings.configurable.FileChecksumConfigurable import com.abdownloadmanager.desktop.pages.settings.configurable.FileChecksumConfigurable
import com.abdownloadmanager.desktop.pages.settings.configurable.IntConfigurable import com.abdownloadmanager.desktop.pages.settings.configurable.IntConfigurable
import com.abdownloadmanager.desktop.pages.settings.configurable.SpeedLimitConfigurable import com.abdownloadmanager.desktop.pages.settings.configurable.SpeedLimitConfigurable
@ -199,7 +200,7 @@ class EditDownloadState(
) )
} }
), ),
range = 0..32, range = 0..ThreadCountLimitation.MAX_ALLOWED_THREAD_COUNT,
describe = { describe = {
if (it == 0) Res.string.use_global_settings.asStringSource() if (it == 0) Res.string.use_global_settings.asStringSource()
else Res.string.download_item_settings_thread_count_describe else Res.string.download_item_settings_thread_count_describe

View File

@ -4,7 +4,6 @@ import com.abdownloadmanager.desktop.pages.settings.SettingSections.*
import com.abdownloadmanager.desktop.pages.settings.configurable.* import com.abdownloadmanager.desktop.pages.settings.configurable.*
import com.abdownloadmanager.desktop.repository.AppRepository import com.abdownloadmanager.desktop.repository.AppRepository
import com.abdownloadmanager.desktop.storage.AppSettingsStorage import com.abdownloadmanager.desktop.storage.AppSettingsStorage
import ir.amirab.util.compose.IconSource
import com.abdownloadmanager.shared.utils.ui.icon.MyIcons import com.abdownloadmanager.shared.utils.ui.icon.MyIcons
import com.abdownloadmanager.shared.utils.BaseComponent import com.abdownloadmanager.shared.utils.BaseComponent
import com.abdownloadmanager.shared.utils.convertPositiveSpeedToHumanReadable import com.abdownloadmanager.shared.utils.convertPositiveSpeedToHumanReadable
@ -15,9 +14,7 @@ import com.abdownloadmanager.resources.Res
import com.abdownloadmanager.shared.utils.proxy.ProxyManager import com.abdownloadmanager.shared.utils.proxy.ProxyManager
import com.abdownloadmanager.shared.utils.proxy.ProxyMode import com.abdownloadmanager.shared.utils.proxy.ProxyMode
import com.arkivanov.decompose.ComponentContext import com.arkivanov.decompose.ComponentContext
import ir.amirab.util.compose.StringSource import ir.amirab.util.compose.*
import ir.amirab.util.compose.asStringSource
import ir.amirab.util.compose.asStringSourceWithARgs
import ir.amirab.util.compose.localizationmanager.LanguageInfo import ir.amirab.util.compose.localizationmanager.LanguageInfo
import ir.amirab.util.compose.localizationmanager.LanguageManager import ir.amirab.util.compose.localizationmanager.LanguageManager
import ir.amirab.util.datasize.CommonSizeConvertConfigs import ir.amirab.util.datasize.CommonSizeConvertConfigs
@ -45,20 +42,34 @@ interface SettingSectionGetter {
operator fun get(key: SettingSections): List<Configurable<*>> operator fun get(key: SettingSections): List<Configurable<*>>
} }
object ThreadCountLimitation {
const val MAX_ALLOWED_THREAD_COUNT = 256
const val MAX_NORMAL_VALUE = 32
}
fun threadCountConfig(appRepository: AppRepository): IntConfigurable { fun threadCountConfig(appRepository: AppRepository): IntConfigurable {
return IntConfigurable( return IntConfigurable(
title = Res.string.settings_download_thread_count.asStringSource(), title = Res.string.settings_download_thread_count.asStringSource(),
description = Res.string.settings_download_thread_count_description.asStringSource(), description = Res.string.settings_download_thread_count_description.asStringSource(),
backedBy = appRepository.threadCount, backedBy = appRepository.threadCount,
range = 1..32, range = 1..ThreadCountLimitation.MAX_ALLOWED_THREAD_COUNT,
renderMode = IntConfigurable.RenderMode.TextField, renderMode = IntConfigurable.RenderMode.TextField,
describe = { describe = {
Res.string.settings_download_thread_count_describe buildList {
.asStringSourceWithARgs( add(
Res.string.settings_download_thread_count_describe_createArgs( Res.string.settings_download_thread_count_describe
count = it.toString() .asStringSourceWithARgs(
) Res.string.settings_download_thread_count_describe_createArgs(
count = it.toString()
)
)
) )
if (it > ThreadCountLimitation.MAX_NORMAL_VALUE) {
add(
Res.string.settings_download_thread_count_with_large_value_describe.asStringSource()
)
}
}.combineStringSources("\n")
}, },
) )
} }

View File

@ -6,6 +6,7 @@ import com.abdownloadmanager.desktop.pages.settings.configurable.SpeedLimitConfi
import com.abdownloadmanager.shared.utils.mvi.ContainsEffects import com.abdownloadmanager.shared.utils.mvi.ContainsEffects
import com.abdownloadmanager.shared.utils.mvi.supportEffects import com.abdownloadmanager.shared.utils.mvi.supportEffects
import arrow.optics.copy import arrow.optics.copy
import com.abdownloadmanager.desktop.pages.settings.ThreadCountLimitation
import com.abdownloadmanager.desktop.pages.settings.configurable.BooleanConfigurable import com.abdownloadmanager.desktop.pages.settings.configurable.BooleanConfigurable
import com.abdownloadmanager.desktop.repository.AppRepository import com.abdownloadmanager.desktop.repository.AppRepository
import com.abdownloadmanager.desktop.storage.AppSettingsStorage import com.abdownloadmanager.desktop.storage.AppSettingsStorage
@ -321,7 +322,7 @@ class SingleDownloadComponent(
) )
} }
}, },
range = 0..32, range = 0..ThreadCountLimitation.MAX_ALLOWED_THREAD_COUNT,
renderMode = IntConfigurable.RenderMode.TextField, renderMode = IntConfigurable.RenderMode.TextField,
), ),
SpeedLimitConfigurable( SpeedLimitConfigurable(
@ -342,4 +343,4 @@ class SingleDownloadComponent(
data class Config( data class Config(
val id: Long, val id: Long,
) )
} }

View File

@ -100,26 +100,26 @@ sealed interface StringSource {
override fun rememberString(): String { override fun rememberString(): String {
return values.map { return values.map {
it.rememberString() it.rememberString()
}.joinToString() }.joinToString(separator)
} }
@Composable @Composable
override fun rememberString(args: Map<String, String>): String { override fun rememberString(args: Map<String, String>): String {
return values.map { return values.map {
it.rememberString(args) it.rememberString(args)
}.joinToString() }.joinToString(separator)
} }
override fun getString(): String { override fun getString(): String {
return values.map { return values.map {
it.getString() it.getString()
}.joinToString() }.joinToString(separator)
} }
override fun getString(args: Map<String, String>): String { override fun getString(args: Map<String, String>): String {
return values.map { return values.map {
it.getString(args) it.getString(args)
}.joinToString() }.joinToString(separator)
} }
} }
} }
@ -138,4 +138,4 @@ fun String.asStringSource(): StringSource {
fun List<StringSource>.combineStringSources(separator: String = ""): StringSource { fun List<StringSource>.combineStringSources(separator: String = ""): StringSource {
return StringSource.CombinedStringSource(this, separator) return StringSource.CombinedStringSource(this, separator)
} }

View File

@ -179,6 +179,7 @@ browser_integration=Browser Integration
settings_download_thread_count=Thread Count settings_download_thread_count=Thread Count
settings_download_thread_count_description=Maximum download thread per download item settings_download_thread_count_description=Maximum download thread per download item
settings_download_thread_count_describe=A download can have up to {{count}} threads settings_download_thread_count_describe=A download can have up to {{count}} threads
settings_download_thread_count_with_large_value_describe=Warning: Setting a high thread count may increase system resource usage, reduce performance, or cause connection issues with servers. Use higher values only if you understand the potential impact on your system and network.
settings_use_server_last_modified_time=Use Server's Last-Modified Time settings_use_server_last_modified_time=Use Server's Last-Modified Time
settings_use_server_last_modified_time_description=When downloading a file, use server's last modified time for the local file settings_use_server_last_modified_time_description=When downloading a file, use server's last modified time for the local file
settings_use_sparse_file_allocation=Sparse File Allocation settings_use_sparse_file_allocation=Sparse File Allocation