manager: hide reboot button if ksuversion not found (KSU_NEXT v2 signature not found)

manager: add module migration, backup and restore
manager: update translation for zh-CN (authored by @xiangxiangxiong9)
docs: devies: add more unofficial supported devices
This commit is contained in:
Rifat Azad
2025-01-11 14:43:51 +06:00
parent 6a65d44f3f
commit 587fca9f1f
10 changed files with 318 additions and 101 deletions

5
.github/FUNDING.yml vendored
View File

@@ -1,5 +0,0 @@
# These are supported funding model platforms
github: tiann
patreon: weishu
custom: https://vxposed.com/donate.html

View File

@@ -208,7 +208,7 @@
<tr>
<td>
<a href="https://github.com/AlirezaParsi" target="_blank">
<img src="https://avatars.githubusercontent.com/AlirezaParsi?v=4" alt="Ksawlii" class="rounded-circle" width="30" height="30" style="margin-right: 10px;">
<img src="https://avatars.githubusercontent.com/AlirezaParsi?v=4" alt="AlirezaParsi" class="rounded-circle" width="30" height="30" style="margin-right: 10px;">
AlirezaParsi
</a>
</td>
@@ -216,6 +216,72 @@
<td>Poco F3 (alioth)</td>
</tr>
<tr>
<td>
<a href="https://github.com/sidex15" target="_blank">
<img src="https://avatars.githubusercontent.com/sidex15?v=4" alt="sidex15" class="rounded-circle" width="30" height="30" style="margin-right: 10px;">
sidex15
</a>
</td>
<td><a href="https://github.com/sidex15/android_kernel_lge_sm8150" target="_blank">android_kernel_lge_sm8150</a></td>
<td>LG V50, V50s, G8, G8s, G8x</td>
</tr>
<tr>
<td>
<a href="https://github.com/itejo443" target="_blank">
<img src="https://avatars.githubusercontent.com/itejo443?v=4" alt="itejo443" class="rounded-circle" width="30" height="30" style="margin-right: 10px;">
itejo443
</a>
</td>
<td><a href="https://github.com/itejo443/android_kernel_samsung_sm7225" target="_blank">android_kernel_samsung_sm7225</a></td>
<td>Samsung Galaxy F23 and M23 (m23xq)</td>
</tr>
<tr>
<td>
<a href="https://github.com/pys36" target="_blank">
<img src="https://avatars.githubusercontent.com/pys36?v=4" alt="pys36" class="rounded-circle" width="30" height="30" style="margin-right: 10px;">
pys36
</a>
</td>
<td><a href="https://github.com/pys36/android_kernel_xiaomi_earth" target="_blank">android_kernel_xiaomi_earth</a></td>
<td>Redmi 12C (earth), Poco C55 (aether)</td>
</tr>
<tr>
<td>
<a href="https://github.com/riarumoda" target="_blank">
<img src="https://avatars.githubusercontent.com/pys36?v=4" alt="riarumoda" class="rounded-circle" width="30" height="30" style="margin-right: 10px;">
riarumoda
</a>
</td>
<td><a href="https://github.com/riarumoda/kernel_samsung_a9y18qlte" target="_blank">kernel_samsung_a9y18qlte</a></td>
<td>Samsung Galaxy A9 (2018) [a9y18qlte]</td>
</tr>
<tr>
<td>
<a href="https://github.com/sajadasadollahi83" target="_blank">
<img src="https://avatars.githubusercontent.com/sajadasadollahi83?v=4" alt="riarumoda" class="rounded-circle" width="30" height="30" style="margin-right: 10px;">
sajadasadollahi83
</a>
</td>
<td><a href="https://github.com/sajadasadollahi83/android_kernel_xiaomi_sm6150" target="_blank">android_kernel_xiaomi_sm6150</a></td>
<td>Xiaomi Redmi Note 10 Pro</td>
</tr>
<tr>
<td>
<a href="https://github.com/hxsyzl" target="_blank">
<img src="https://avatars.githubusercontent.com/hxsyzl?v=4" alt="riarumoda" class="rounded-circle" width="30" height="30" style="margin-right: 10px;">
hxsyzl
</a>
</td>
<td><a href="https://github.com/hxsyzl/kernel_lge_sm8150" target="_blank">kernel_lge_sm8150</a></td>
<td>LG V50, V50s, G8, G8s, G8x</td>
</tr>
<!-- <tr>
<td>Example Maintainer</td>
<td><a href="https://github.com/example/example" target="_blank">example repo name</a></td>

View File

@@ -52,10 +52,14 @@ fun HomeScreen(navigator: DestinationsNavigator) {
val kernelVersion = getKernelVersion()
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
val isManager = Natives.becomeManager(ksuApp.packageName)
val ksuVersion = if (isManager) Natives.version else null
Scaffold(
topBar = {
TopBar(
kernelVersion,
ksuVersion,
onInstallClick = {
navigator.navigate(InstallScreenDestination)
},
@@ -72,8 +76,6 @@ fun HomeScreen(navigator: DestinationsNavigator) {
.padding(horizontal = 16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp)
) {
val isManager = Natives.becomeManager(ksuApp.packageName)
val ksuVersion = if (isManager) Natives.version else null
val lkmMode = ksuVersion?.let {
if (it >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && kernelVersion.isGKI()) Natives.isLkmMode else null
}
@@ -164,6 +166,7 @@ fun RebootDropdownItem(@StringRes id: Int, reason: String = "") {
@Composable
private fun TopBar(
kernelVersion: KernelVersion,
ksuVersion: Int?,
onInstallClick: () -> Unit,
scrollBehavior: TopAppBarScrollBehavior? = null
) {
@@ -179,30 +182,31 @@ private fun TopBar(
}
}
var showDropdown by remember { mutableStateOf(false) }
IconButton(onClick = {
showDropdown = true
}) {
Icon(
imageVector = Icons.Filled.Refresh,
contentDescription = stringResource(id = R.string.reboot)
)
DropdownMenu(expanded = showDropdown, onDismissRequest = {
showDropdown = false
if (ksuVersion != null) {
var showDropdown by remember { mutableStateOf(false) }
IconButton(onClick = {
showDropdown = true
}) {
Icon(
imageVector = Icons.Filled.Refresh,
contentDescription = stringResource(id = R.string.reboot)
)
RebootDropdownItem(id = R.string.reboot)
DropdownMenu(expanded = showDropdown, onDismissRequest = {
showDropdown = false
}) {
RebootDropdownItem(id = R.string.reboot)
val pm = LocalContext.current.getSystemService(Context.POWER_SERVICE) as PowerManager?
@Suppress("DEPRECATION")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && pm?.isRebootingUserspaceSupported == true) {
RebootDropdownItem(id = R.string.reboot_userspace, reason = "userspace")
val pm = LocalContext.current.getSystemService(Context.POWER_SERVICE) as PowerManager?
@Suppress("DEPRECATION")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && pm?.isRebootingUserspaceSupported == true) {
RebootDropdownItem(id = R.string.reboot_userspace, reason = "userspace")
}
RebootDropdownItem(id = R.string.reboot_recovery, reason = "recovery")
RebootDropdownItem(id = R.string.reboot_bootloader, reason = "bootloader")
RebootDropdownItem(id = R.string.reboot_download, reason = "download")
RebootDropdownItem(id = R.string.reboot_edl, reason = "edl")
}
RebootDropdownItem(id = R.string.reboot_recovery, reason = "recovery")
RebootDropdownItem(id = R.string.reboot_bootloader, reason = "bootloader")
RebootDropdownItem(id = R.string.reboot_download, reason = "download")
RebootDropdownItem(id = R.string.reboot_edl, reason = "edl")
}
}
},
@@ -354,6 +358,9 @@ private fun InfoCard() {
mutableStateOf(prefs.getBoolean("use_overlay_fs", false))
}
val isManager = Natives.becomeManager(ksuApp.packageName)
val ksuVersion = if (isManager) Natives.version else null
LaunchedEffect(Unit) {
useOverlayFs = prefs.getBoolean("use_overlay_fs", false)
}
@@ -432,10 +439,10 @@ private fun InfoCard() {
Spacer(Modifier.height(16.dp))
InfoCardItem(
label = stringResource(R.string.home_module_mount),
content = if (useOverlayFs) {
stringResource(R.string.home_overlayfs_mount)
} else {
stringResource(R.string.home_magic_mount)
content = when {
ksuVersion == null -> stringResource(R.string.unavailable)
useOverlayFs -> stringResource(R.string.home_overlayfs_mount)
else -> stringResource(R.string.home_magic_mount)
},
icon = Icons.Filled.SettingsSuggest,
)

View File

@@ -96,6 +96,9 @@ fun SettingScreen(navigator: DestinationsNavigator) {
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
val snackBarHost = LocalSnackbarHost.current
val isManager = Natives.becomeManager(ksuApp.packageName)
val ksuVersion = if (isManager) Natives.version else null
Scaffold(
topBar = {
TopBar(
@@ -110,6 +113,8 @@ fun SettingScreen(navigator: DestinationsNavigator) {
}
val loadingDialog = rememberLoadingDialog()
val shrinkDialog = rememberConfirmDialog()
val restoreDialog = rememberConfirmDialog()
val backupDialog = rememberConfirmDialog()
Column(
modifier = Modifier
@@ -138,26 +143,30 @@ fun SettingScreen(navigator: DestinationsNavigator) {
}
val profileTemplate = stringResource(id = R.string.settings_profile_template)
ListItem(
leadingContent = { Icon(Icons.Filled.Fence, profileTemplate) },
headlineContent = { Text(profileTemplate) },
supportingContent = { Text(stringResource(id = R.string.settings_profile_template_summary)) },
modifier = Modifier.clickable {
navigator.navigate(AppProfileTemplateScreenDestination)
}
)
if (ksuVersion != null) {
ListItem(
leadingContent = { Icon(Icons.Filled.Fence, profileTemplate) },
headlineContent = { Text(profileTemplate) },
supportingContent = { Text(stringResource(id = R.string.settings_profile_template_summary)) },
modifier = Modifier.clickable {
navigator.navigate(AppProfileTemplateScreenDestination)
}
)
}
var umountChecked by rememberSaveable {
mutableStateOf(Natives.isDefaultUmountModules())
}
SwitchItem(
icon = Icons.Filled.RemoveModerator,
title = stringResource(id = R.string.settings_umount_modules_default),
summary = stringResource(id = R.string.settings_umount_modules_default_summary),
checked = umountChecked
) {
if (Natives.setDefaultUmountModules(it)) {
umountChecked = it
if (ksuVersion != null) {
SwitchItem(
icon = Icons.Filled.RemoveModerator,
title = stringResource(id = R.string.settings_umount_modules_default),
summary = stringResource(id = R.string.settings_umount_modules_default_summary),
checked = umountChecked
) {
if (Natives.setDefaultUmountModules(it)) {
umountChecked = it
}
}
}
@@ -177,14 +186,16 @@ fun SettingScreen(navigator: DestinationsNavigator) {
var showWarningDialog by remember { mutableStateOf(false) }
SwitchItem(
icon = Icons.Filled.Build,
title = stringResource(id = R.string.use_overlay_fs),
summary = stringResource(id = R.string.use_overlay_fs_summary),
checked = useOverlayFs
) {
if (!hasShownWarning.value) {
showWarningDialog = true
if (ksuVersion != null) {
SwitchItem(
icon = Icons.Filled.Build,
title = stringResource(id = R.string.use_overlay_fs),
summary = stringResource(id = R.string.use_overlay_fs_summary),
checked = useOverlayFs
) {
if (!hasShownWarning.value) {
showWarningDialog = true
}
}
}
@@ -198,6 +209,11 @@ fun SettingScreen(navigator: DestinationsNavigator) {
showWarningDialog = false
prefs.edit().putBoolean("use_overlay_fs", !useOverlayFs).apply()
useOverlayFs = !useOverlayFs
if (useOverlayFs) {
moduleBackup()
} else {
moduleMigration()
}
if (isManager) install()
showRebootDialog = true
}) {
@@ -373,6 +389,54 @@ fun SettingScreen(navigator: DestinationsNavigator) {
)
}
if (ksuVersion != null) {
val moduleBackup = stringResource(id = R.string.module_backup)
val backupMessage = stringResource(id = R.string.module_backup_message)
ListItem(
leadingContent = {
Icon(
Icons.Filled.Backup,
moduleBackup
)
},
headlineContent = { Text(moduleBackup) },
modifier = Modifier.clickable {
scope.launch {
val result = backupDialog.awaitConfirm(title = moduleBackup, content = backupMessage)
if (result == ConfirmResult.Confirmed) {
loadingDialog.withLoading {
moduleBackup()
}
}
}
}
)
}
if (ksuVersion != null) {
val moduleRestore = stringResource(id = R.string.module_restore)
val restoreMessage = stringResource(id = R.string.module_restore_message)
ListItem(
leadingContent = {
Icon(
Icons.Filled.Restore,
moduleRestore
)
},
headlineContent = { Text(moduleRestore) },
modifier = Modifier.clickable {
scope.launch {
val result = restoreDialog.awaitConfirm(title = moduleRestore, content = restoreMessage)
if (result == ConfirmResult.Confirmed) {
loadingDialog.withLoading {
moduleRestore()
showRebootDialog = true
}
}
}
}
)
}
if (useOverlayFs) {
val shrink = stringResource(id = R.string.shrink_sparse_image)

View File

@@ -442,6 +442,67 @@ fun getFileName(context: Context, uri: Uri): String {
return name
}
fun moduleBackupDir(): String? {
val shell = getRootShell()
val baseBackupDir = "/data/adb/modules_bak"
val resultBase = ShellUtils.fastCmd(shell, "mkdir -p $baseBackupDir").trim()
if (resultBase.isNotEmpty()) return null
val timestamp = ShellUtils.fastCmd(shell, "date +%Y%m%d_%H%M%S").trim()
if (timestamp.isEmpty()) return null
val newBackupDir = "$baseBackupDir/$timestamp"
val resultNewDir = ShellUtils.fastCmd(shell, "mkdir -p $newBackupDir").trim()
if (resultNewDir.isEmpty()) return newBackupDir
return null
}
fun moduleBackup(): Boolean {
val shell = getRootShell()
val checkEmptyCommand = "if [ -z \"$(ls -A /data/adb/modules)\" ]; then echo 'empty'; fi"
val resultCheckEmpty = ShellUtils.fastCmd(shell, checkEmptyCommand).trim()
if (resultCheckEmpty == "empty") {
return false
}
val backupDir = moduleBackupDir() ?: return false
val command = "cp -rp /data/adb/modules/* $backupDir"
val result = ShellUtils.fastCmd(shell, command).trim()
return result.isEmpty()
}
fun moduleMigration(): Boolean {
val shell = getRootShell()
val command = "cp -rp /data/adb/modules/* /data/adb/modules_update"
val result = ShellUtils.fastCmd(shell, command).trim()
return result.isEmpty()
}
fun moduleRestore(): Boolean {
val shell = getRootShell()
val command = "ls -t /data/adb/modules_bak | head -n 1"
val latestBackupDir = ShellUtils.fastCmd(shell, command).trim()
if (latestBackupDir.isEmpty()) return false
val sourceDir = "/data/adb/modules_bak/$latestBackupDir"
val destinationDir = "/data/adb/modules_update"
val createDestDirCommand = "mkdir -p $destinationDir"
ShellUtils.fastCmd(shell, createDestDirCommand)
val moveCommand = "cp -rp $sourceDir/* $destinationDir"
val result = ShellUtils.fastCmd(shell, moveCommand).trim()
return result.isEmpty()
}
fun setAppProfileTemplate(id: String, template: String): Boolean {
val shell = getRootShell()
val escapedTemplate = template.replace("\"", "\\\"")

View File

@@ -69,6 +69,10 @@
<string name="use_overlay_fs_summary">토글 하여 KernelSU Next의 모듈 마운트 시스템을 Magic Mount와 OverlayFS 간에 전환합니다.</string>
<string name="reboot_required">다시 시작 필요</string>
<string name="reboot_message">시스템을 다시 시작한 후에 변경 사항들이 적용됩니다. 지금 다시 시작하시겠습니까?</string>
<string name="warning">경고</string>
<string name="warning_message">이 기능은 아직 베타 단계이며 개발 중입니다. 계속하기 전에 모듈들을 백업해 놓으시기를 바랍니다. 위험를 이해한 경우에만 이 기능을 이용하세요. 주의하여 계속하세요.</string>
<string name="proceed">계속</string>
<string name="cancel">취소</string>
<string name="later">나중에</string>
<string name="home_next_kernelsu">🔥 Next 빌드</string>
<string name="home_next_kernelsu_repo">https://github.com/rifsxd/KernelSU-Next</string>
@@ -78,7 +82,7 @@
<string name="home_experimental_kernelsu_body">KernelSU Next는 활발한 실험적 개발 단계에 있는 비공식 버전입니다. 안정성, 성능 또는 신뢰성에 대한 보장 없이 있는 그대로 제공됩니다.</string>
<string name="home_experimental_kernelsu_body_point_1"> • 본인 책임하에 사용: 충돌, 예기치 않은 동작 또는 시스템 문제가 발생할 수 있습니다.</string>
<string name="home_experimental_kernelsu_body_point_2"> • 워런티 없음: 개발자들은 데이터 손실, 시스템 손상, 사용으로 인한 그 외 오류들에 대해 책임지지 않습니다.</string>
<string name="home_experimental_kernelsu_body_point_3"> • 테스트 목적으로만 사용: 리스크를 이해하고 문제 해결에 능숙한 사용자들을 위한 것입니다.</string>
<string name="home_experimental_kernelsu_body_point_3"> • 테스트 목적으로만 사용: 위험를 이해하고 문제 해결에 능숙한 사용자들을 위한 것입니다.</string>
<string name="about_source_code"><![CDATA[%1$s에서 소스 코드 보기]]></string>
<string name="profile" translatable="false">앱 프로파일</string>
<string name="profile_default">기본</string>

View File

@@ -32,10 +32,10 @@
<string name="module_empty">没有安装模块</string>
<string name="module">模块</string>
<string name="module_install_prompt_with_name">是否要继续安装模块 %1$s </string>
<string name="module_sort_a_to_z">种类 (A - Z)</string>
<string name="module_sort_z_to_a">种类 (Z - A)</string>
<string name="module_sort_a_to_z">A - Z 排序</string>
<string name="module_sort_z_to_a">Z - A 排序</string>
<string name="uninstall">卸载</string>
<string name="restore">重启</string>
<string name="restore">恢复</string>
<string name="module_install">安装</string>
<string name="install">安装</string>
<string name="reboot">重启</string>
@@ -61,16 +61,30 @@
<string name="send_log">发送日志</string>
<string name="safe_mode">安全模式</string>
<string name="reboot_to_apply">重启生效</string>
<string name="module_magisk_conflict">由于与 Magisk 有冲突,所有模块不可用!</string>
<string name="home_module_mount">模块系统</string>
<string name="home_magic_mount">Magic Mount</string>
<string name="home_overlayfs_mount">OverlayFS</string>
<string name="module_magisk_conflict">因与 Magisk 有冲突,所有模块不可用</string>
<string name="unavailable">不可用</string>
<string name="use_overlay_fs">使用 OverlayFS (Beta)</string>
<string name="use_overlay_fs_summary">对于 KernelSU Next 的挂载系统,在使用 OverlayFS 和 Magic Mount 之间进行切换。</string>
<string name="reboot_required">需要重启</string>
<string name="reboot_message">更改将在重启系统后生效。您想现在重启吗?</string>
<string name="module_restore">恢复模块</string>
<string name="module_restore_message">从备份中恢复模块。</string>
<string name="module_backup">备份模块</string>
<string name="module_backup_message">备份当前已安装的模块。</string>
<string name="warning">警告</string>
<string name="warning_message">此功能仍处于测试阶段且在开发中。请确保在继续之前备份您的模块。仅当您了解潜在风险时才能使用此功能。谨慎行事。</string>
<string name="proceed">继续</string>
<string name="cancel">取消</string>
<string name="later">稍后</string>
<string name="home_next_kernelsu">🔥 Next 构建</string>
<string name="home_next_kernelsu_repo">https://github.com/rifsxd/KernelSU-Next</string>
<string name="home_next_kernelsu_body">Next 实验性分支。在 GitHub 上查看!</string>
<string name="home_experimental_kernelsu">⚠️ 实验性开发警告!</string>
<string name="home_experimental_kernelsu_repo">127.0.0.1</string>
<string name="home_experimental_kernelsu_body">Next 是非官方版本,始终处于积极的实验开发阶段。它按原样提供,不保证稳定性、性能或可靠性。</string>
<string name="home_experimental_kernelsu_body">KernelSU Next 是非官方版本,始终处于积极的实验开发阶段。它按原样提供,不保证稳定性、性能或可靠性。</string>
<string name="home_experimental_kernelsu_body_point_1"> • 使用风险自负:可能会发生崩溃、意外行为或导致系统问题。</string>
<string name="home_experimental_kernelsu_body_point_2"> • 无担保:开发人员不对因使用而产生的任何数据丢失、系统损坏或其他后果负责。</string>
<string name="home_experimental_kernelsu_body_point_3"> • 仅用于测试目的:它适用于了解风险并能轻松解决问题的用户。</string>

View File

@@ -65,10 +65,15 @@
<string name="home_module_mount">Module system</string>
<string name="home_magic_mount">Magic Mount</string>
<string name="home_overlayfs_mount">OverlayFS</string>
<string name="unavailable">Unavailable</string>
<string name="use_overlay_fs">Use OverlayFS (Beta)</string>
<string name="use_overlay_fs_summary">Toggle between using OverlayFS over Magic Mount for KernelSU Next\'s mount system.</string>
<string name="reboot_required">Reboot Required</string>
<string name="reboot_message">Changes will take effect after rebooting the system. Would you like to reboot now?</string>
<string name="module_restore">Restore module</string>
<string name="module_restore_message">Restore modules from recent backup.</string>
<string name="module_backup">Backup module</string>
<string name="module_backup_message">Backup currently installed modules.</string>
<string name="warning">Warning</string>
<string name="warning_message">This feature is still in beta and under development. Please ensure you backup your modules before proceeding. Use this feature only if you understand the potential risks. Proceed with caution.</string>
<string name="proceed">Proceed</string>

View File

@@ -145,9 +145,9 @@ dependencies = [
[[package]]
name = "async-trait"
version = "0.1.84"
version = "0.1.85"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b1244b10dcd56c92219da4e14caa97e312079e185f04ba3eea25061561dc0a0"
checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056"
dependencies = [
"proc-macro2",
"quote",
@@ -251,9 +251,9 @@ dependencies = [
[[package]]
name = "clap"
version = "4.5.23"
version = "4.5.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84"
checksum = "9560b07a799281c7e0958b9296854d6fafd4c5f31444a7e5bb1ad6dde5ccf1bd"
dependencies = [
"clap_builder",
"clap_derive",
@@ -261,9 +261,9 @@ dependencies = [
[[package]]
name = "clap_builder"
version = "4.5.23"
version = "4.5.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838"
checksum = "874e0dd3eb68bf99058751ac9712f622e61e6f393a94f7128fa26e3f02f5c7cd"
dependencies = [
"anstream",
"anstyle",
@@ -273,9 +273,9 @@ dependencies = [
[[package]]
name = "clap_derive"
version = "4.5.18"
version = "4.5.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab"
checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c"
dependencies = [
"heck",
"proc-macro2",
@@ -873,9 +873,9 @@ checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
[[package]]
name = "linux-raw-sys"
version = "0.4.14"
version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
[[package]]
name = "lockfree-object-pool"
@@ -981,9 +981,9 @@ checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
[[package]]
name = "pin-project-lite"
version = "0.2.15"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
[[package]]
name = "powerfmt"
@@ -1219,9 +1219,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.134"
version = "1.0.135"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d"
checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9"
dependencies = [
"itoa",
"memchr",
@@ -1368,9 +1368,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "tokio"
version = "1.42.0"
version = "1.43.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551"
checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e"
dependencies = [
"backtrace",
"bytes",

View File

@@ -145,9 +145,9 @@ dependencies = [
[[package]]
name = "async-trait"
version = "0.1.83"
version = "0.1.85"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd"
checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056"
dependencies = [
"proc-macro2",
"quote",
@@ -216,9 +216,9 @@ checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b"
[[package]]
name = "cc"
version = "1.2.6"
version = "1.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d6dbb628b8f8555f86d0323c2eb39e3ec81901f4b83e091db8a6a76d316a333"
checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7"
dependencies = [
"shlex",
]
@@ -251,9 +251,9 @@ dependencies = [
[[package]]
name = "clap"
version = "4.5.23"
version = "4.5.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84"
checksum = "9560b07a799281c7e0958b9296854d6fafd4c5f31444a7e5bb1ad6dde5ccf1bd"
dependencies = [
"clap_builder",
"clap_derive",
@@ -261,9 +261,9 @@ dependencies = [
[[package]]
name = "clap_builder"
version = "4.5.23"
version = "4.5.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838"
checksum = "874e0dd3eb68bf99058751ac9712f622e61e6f393a94f7128fa26e3f02f5c7cd"
dependencies = [
"anstream",
"anstyle",
@@ -273,9 +273,9 @@ dependencies = [
[[package]]
name = "clap_derive"
version = "4.5.18"
version = "4.5.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab"
checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c"
dependencies = [
"heck",
"proc-macro2",
@@ -873,9 +873,9 @@ checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
[[package]]
name = "linux-raw-sys"
version = "0.4.14"
version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
[[package]]
name = "lockfree-object-pool"
@@ -981,9 +981,9 @@ checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
[[package]]
name = "pin-project-lite"
version = "0.2.15"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
[[package]]
name = "powerfmt"
@@ -1219,9 +1219,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.134"
version = "1.0.135"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d"
checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9"
dependencies = [
"itoa",
"memchr",
@@ -1284,9 +1284,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
version = "2.0.94"
version = "2.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3"
checksum = "46f71c0377baf4ef1cc3e3402ded576dccc315800fbc62dfc7fe04b009773b4a"
dependencies = [
"proc-macro2",
"quote",
@@ -1295,12 +1295,13 @@ dependencies = [
[[package]]
name = "tempfile"
version = "3.14.0"
version = "3.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c"
checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704"
dependencies = [
"cfg-if 1.0.0",
"fastrand",
"getrandom",
"once_cell",
"rustix 0.38.42",
"windows-sys 0.59.0",
@@ -1367,9 +1368,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "tokio"
version = "1.42.0"
version = "1.43.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551"
checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e"
dependencies = [
"backtrace",
"bytes",