Compare commits

...
2 Commits
Author SHA1 Message Date
github-actions[bot] 84d8f702af Pre-Release: v2.5.9-rc 2026-11-02 08:52:52 +00:00
Tunglies 067a9f7cad fix(webdav): allow clearing saved configuration
Close #8495
2026-11-02 03:26:36 +08:00
7 changed files with 26 additions and 20 deletions
Generated
+1 -1
View File
@@ -1081,7 +1081,7 @@ checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
[[package]] [[package]]
name = "clash-verge" name = "clash-verge"
version = "2.5.9" version = "2.5.9-rc"
dependencies = [ dependencies = [
"aes-gcm", "aes-gcm",
"anyhow", "anyhow",
+1
View File
@@ -13,6 +13,7 @@
- 修复 代理 页展开分组后不显示最新测速结果,需切换节点才刷新 - 修复 代理 页展开分组后不显示最新测速结果,需切换节点才刷新
- 修复 代理 在全局模式下无法展开节点组 - 修复 代理 在全局模式下无法展开节点组
- 修复 自定义 CSS 无法修改编辑器字体和字号的问题 - 修复 自定义 CSS 无法修改编辑器字体和字号的问题
- 修复 WebDAV 设置清空后无法保存
**🍎 macOS** **🍎 macOS**
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "clash-verge", "name": "clash-verge",
"version": "2.5.9", "version": "2.5.9-rc",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
"scripts": { "scripts": {
"prepare": "husky || true", "prepare": "husky || true",
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "clash-verge" name = "clash-verge"
version = "2.5.9" version = "2.5.9-rc"
description = "clash verge" description = "clash verge"
authors = ["zzzgydi", "Tunglies", "wonfen", "MystiPanda"] authors = ["zzzgydi", "Tunglies", "wonfen", "MystiPanda"]
license = "GPL-3.0-only" license = "GPL-3.0-only"
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"version": "2.5.9", "version": "2.5.9-rc",
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json", "$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"bundle": { "bundle": {
"active": true, "active": true,
@@ -40,9 +40,9 @@ export const BackupConfigViewer = memo(
const { register, handleSubmit, watch } = useForm<IWebDavConfig>({ const { register, handleSubmit, watch } = useForm<IWebDavConfig>({
defaultValues: { defaultValues: {
url: webdav_url!, url: webdav_url ?? '',
username: webdav_username!, username: webdav_username ?? '',
password: webdav_password!, password: webdav_password ?? '',
}, },
}) })
const url = watch('url') const url = watch('url')
@@ -50,9 +50,9 @@ export const BackupConfigViewer = memo(
const password = watch('password') const password = watch('password')
const webdavChanged = const webdavChanged =
webdav_url !== url || (webdav_url ?? '') !== url ||
webdav_username !== username || (webdav_username ?? '') !== username ||
webdav_password !== password (webdav_password ?? '') !== password
const webdavSignature = buildWebdavSignature(verge) const webdavSignature = buildWebdavSignature(verge)
const webdavStatus = getWebdavStatus(webdavSignature) const webdavStatus = getWebdavStatus(webdavSignature)
@@ -69,9 +69,9 @@ export const BackupConfigViewer = memo(
}, [webdav_url, webdav_username, webdav_password, onInit, shouldAutoInit]) }, [webdav_url, webdav_username, webdav_password, onInit, shouldAutoInit])
const checkForm = () => { const checkForm = () => {
const username = usernameRef.current?.value const username = usernameRef.current?.value.trim()
const password = passwordRef.current?.value const password = passwordRef.current?.value
const url = urlRef.current?.value const url = urlRef.current?.value.trim()
if (!url) { if (!url) {
urlRef.current?.focus() urlRef.current?.focus()
@@ -95,14 +95,15 @@ export const BackupConfigViewer = memo(
} }
const save = useLockFn(async (data: IWebDavConfig) => { const save = useLockFn(async (data: IWebDavConfig) => {
checkForm() const trimmedUrl = data.url.trim()
const trimmedUsername = data.username.trim()
const isClearing = !trimmedUrl && !trimmedUsername && !data.password
if (!isClearing) checkForm()
const signature = buildWebdavSignature({ const signature = buildWebdavSignature({
webdav_url: data.url, webdav_url: data.url,
webdav_username: data.username, webdav_username: data.username,
webdav_password: data.password, webdav_password: data.password,
}) })
const trimmedUrl = data.url.trim()
const trimmedUsername = data.username.trim()
try { try {
setLoading(true) setLoading(true)
@@ -127,7 +128,7 @@ export const BackupConfigViewer = memo(
) )
setWebdavStatus(signature, 'unknown') setWebdavStatus(signature, 'unknown')
showNotice.success('settings.modals.backup.messages.webdavConfigSaved') showNotice.success('settings.modals.backup.messages.webdavConfigSaved')
await onSaveSuccess(signature) if (!isClearing) await onSaveSuccess(signature)
} catch (error) { } catch (error) {
showNotice.error( showNotice.error(
'settings.modals.backup.messages.webdavConfigSaveFailed', 'settings.modals.backup.messages.webdavConfigSaveFailed',
@@ -223,9 +224,9 @@ export const BackupConfigViewer = memo(
}} }}
> >
{webdavChanged || {webdavChanged ||
webdav_url === undefined || !webdav_url ||
webdav_username === undefined || !webdav_username ||
webdav_password === undefined ? ( !webdav_password ? (
<Button <Button
variant="contained" variant="contained"
color={'primary'} color={'primary'}
+5 -1
View File
@@ -43,7 +43,11 @@ export const getWebdavStatus = (signature: string): WebdavStatus => {
} }
export const setWebdavStatus = (signature: string, status: WebdavStatus) => { export const setWebdavStatus = (signature: string, status: WebdavStatus) => {
if (!signature || !canUseStorage()) return if (!canUseStorage()) return
if (!signature) {
localStorage.removeItem(WEBDAV_STATUS_KEY)
return
}
const payload: WebdavStatusCache = { const payload: WebdavStatusCache = {
signature, signature,