From 7876b747ba0a01713dc6bd52d823e959a9796224 Mon Sep 17 00:00:00 2001 From: "lilong.129" Date: Thu, 27 Mar 2025 19:48:04 +0800 Subject: [PATCH] feat: add PullFiles for ADBDriver --- internal/version/VERSION | 2 +- uixt/android_driver_adb.go | 49 ++++++++++++++++++++++++++++++++++++++ uixt/browser_driver.go | 4 ++++ uixt/driver.go | 1 + uixt/harmony_driver_hdc.go | 5 ++++ uixt/ios_driver_wda.go | 5 ++++ 6 files changed, 65 insertions(+), 1 deletion(-) diff --git a/internal/version/VERSION b/internal/version/VERSION index f6049b32..7f4c0ac3 100644 --- a/internal/version/VERSION +++ b/internal/version/VERSION @@ -1 +1 @@ -v5.0.0-beta-2503271937 +v5.0.0-beta-2503271948 diff --git a/uixt/android_driver_adb.go b/uixt/android_driver_adb.go index 661a01ec..944d8e24 100644 --- a/uixt/android_driver_adb.go +++ b/uixt/android_driver_adb.go @@ -961,6 +961,55 @@ func (ad *ADBDriver) ClearImages() error { return nil } +func (ad *ADBDriver) PullFiles(localDir string, remoteDirs ...string) error { + log.Info().Str("localDir", localDir).Strs("remoteDirs", remoteDirs).Msg("ADBDriver.PullFiles") + + // create local directory if not exists + if err := os.MkdirAll(localDir, 0o755); err != nil { + return fmt.Errorf("failed to create local directory: %w", err) + } + + for _, remoteDir := range remoteDirs { + files, err := ad.Device.List(remoteDir) + if err != nil { + return fmt.Errorf("failed to list directory %s: %w", remoteDir, err) + } + + for _, file := range files { + remotePath := path.Join(remoteDir, file.Name) + localPath := path.Join(localDir, file.Name) + + // check if file already exists + if _, err := os.Stat(localPath); err == nil { + log.Debug().Str("localPath", localPath).Msg("file already exists, skipping") + continue + } + + // create local file + f, err := os.Create(localPath) + if err != nil { + log.Error().Err(err).Str("localPath", localPath).Msg("failed to create local file") + continue + } + defer f.Close() + + // pull image file + if err := ad.Device.Pull(remotePath, f); err != nil { + log.Error().Err(err). + Str("remotePath", remotePath). + Str("localPath", localPath). + Msg("failed to pull file") + continue // continue with next file + } + log.Info(). + Str("remotePath", remotePath). + Str("localPath", localPath). + Msg("file pulled successfully") + } + } + return nil +} + func (ad *ADBDriver) ClearFiles(paths ...string) error { log.Info().Strs("paths", paths).Msg("ADBDriver.ClearFiles") for _, path := range paths { diff --git a/uixt/browser_driver.go b/uixt/browser_driver.go index 6afba129..2c15b971 100644 --- a/uixt/browser_driver.go +++ b/uixt/browser_driver.go @@ -448,6 +448,10 @@ func (wd *BrowserDriver) ClearImages() error { return errors.New("not support") } +func (wd *BrowserDriver) PullFiles(localDir string, remoteDirs ...string) error { + return errors.New("not support") +} + func (wd *BrowserDriver) ClearFiles(paths ...string) error { return errors.New("not support") } diff --git a/uixt/driver.go b/uixt/driver.go index fbf840fe..2586adfa 100644 --- a/uixt/driver.go +++ b/uixt/driver.go @@ -72,6 +72,7 @@ type IDriver interface { ClearImages() error // files related + PullFiles(localDir string, remoteDirs ...string) error ClearFiles(paths ...string) error // triggers the log capture and returns the log entries diff --git a/uixt/harmony_driver_hdc.go b/uixt/harmony_driver_hdc.go index 29b820c6..59e80845 100644 --- a/uixt/harmony_driver_hdc.go +++ b/uixt/harmony_driver_hdc.go @@ -298,6 +298,11 @@ func (hd *HDCDriver) ClearImages() error { return nil } +func (hd *HDCDriver) PullFiles(localDir string, remoteDirs ...string) error { + log.Warn().Msg("PullFiles not implemented in HDCDriver") + return nil +} + func (hd *HDCDriver) ClearFiles(paths ...string) error { log.Warn().Msg("ClearFiles not implemented in HDCDriver") return nil diff --git a/uixt/ios_driver_wda.go b/uixt/ios_driver_wda.go index 3fa3b9da..94189c5a 100644 --- a/uixt/ios_driver_wda.go +++ b/uixt/ios_driver_wda.go @@ -1002,6 +1002,11 @@ func (wd *WDADriver) ClearImages() error { return err } +func (wd *WDADriver) PullFiles(localDir string, remoteDirs ...string) error { + log.Warn().Msg("PullFiles not implemented in WDADriver") + return nil +} + func (wd *WDADriver) ClearFiles(paths ...string) error { log.Warn().Msg("ClearFiles not implemented in WDADriver") return nil