refactor(BackupManager, WebDav): streamline WebDAV client initialization and enhance directory listing functionality (#6784)

Co-authored-by: beyondkmp <beyondkmkp@gmail.com>
This commit is contained in:
beyondkmp 2025-06-04 12:51:21 +08:00 committed by GitHub
parent 11b14c9bd5
commit 8998bbff27
2 changed files with 19 additions and 8 deletions

View File

@ -7,7 +7,7 @@ import Logger from 'electron-log'
import * as fs from 'fs-extra' import * as fs from 'fs-extra'
import StreamZip from 'node-stream-zip' import StreamZip from 'node-stream-zip'
import * as path from 'path' import * as path from 'path'
import { createClient, CreateDirectoryOptions, FileStat } from 'webdav' import { CreateDirectoryOptions, FileStat } from 'webdav'
import WebDav from './WebDav' import WebDav from './WebDav'
import { windowService } from './WindowService' import { windowService } from './WindowService'
@ -340,12 +340,8 @@ class BackupManager {
listWebdavFiles = async (_: Electron.IpcMainInvokeEvent, config: WebDavConfig) => { listWebdavFiles = async (_: Electron.IpcMainInvokeEvent, config: WebDavConfig) => {
try { try {
const client = createClient(config.webdavHost, { const client = new WebDav(config)
username: config.webdavUser, const response = await client.getDirectoryContents()
password: config.webdavPass
})
const response = await client.getDirectoryContents(config.webdavPath)
const files = Array.isArray(response) ? response : response.data const files = Array.isArray(response) ? response : response.data
return files return files

View File

@ -1,6 +1,7 @@
import { WebDavConfig } from '@types' import { WebDavConfig } from '@types'
import Logger from 'electron-log' import Logger from 'electron-log'
import Stream from 'stream' import Stream from 'stream'
import https from 'https'
import { import {
BufferLike, BufferLike,
createClient, createClient,
@ -20,7 +21,8 @@ export default class WebDav {
username: params.webdavUser, username: params.webdavUser,
password: params.webdavPass, password: params.webdavPass,
maxBodyLength: Infinity, maxBodyLength: Infinity,
maxContentLength: Infinity maxContentLength: Infinity,
httpsAgent: new https.Agent({ rejectUnauthorized: false })
}) })
this.putFileContents = this.putFileContents.bind(this) this.putFileContents = this.putFileContents.bind(this)
@ -74,6 +76,19 @@ export default class WebDav {
} }
} }
public getDirectoryContents = async () => {
if (!this.instance) {
throw new Error('WebDAV client not initialized')
}
try {
return await this.instance.getDirectoryContents(this.webdavPath)
} catch (error) {
Logger.error('[WebDAV] Error getting directory contents on WebDAV:', error)
throw error
}
}
public checkConnection = async () => { public checkConnection = async () => {
if (!this.instance) { if (!this.instance) {
throw new Error('WebDAV client not initialized') throw new Error('WebDAV client not initialized')