From ee0ef761c0bc88ba9e4f3f1723d522c1319d3d8c Mon Sep 17 00:00:00 2001 From: yokowu <18836617@qq.com> Date: Tue, 22 Jul 2025 19:21:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BB=9F=E4=B8=80=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E4=B8=8E=E6=9C=8D=E5=8A=A1=E7=AB=AF=E7=9A=84=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/extension/usecase/extension.go | 46 +++++-------------- backend/pkg/vsix/vsix.go | 9 ++++ 2 files changed, 21 insertions(+), 34 deletions(-) diff --git a/backend/internal/extension/usecase/extension.go b/backend/internal/extension/usecase/extension.go index 5e21fe9..3481e85 100644 --- a/backend/internal/extension/usecase/extension.go +++ b/backend/internal/extension/usecase/extension.go @@ -7,13 +7,15 @@ import ( "log/slog" "net/http" "os" + "strings" "sync" - "time" "github.com/chaitin/MonkeyCode/backend/config" "github.com/chaitin/MonkeyCode/backend/db" "github.com/chaitin/MonkeyCode/backend/domain" "github.com/chaitin/MonkeyCode/backend/pkg/cvt" + "github.com/chaitin/MonkeyCode/backend/pkg/version" + "github.com/chaitin/MonkeyCode/backend/pkg/vsix" ) type ExtensionUsecase struct { @@ -35,7 +37,7 @@ func NewExtensionUsecase( mu: sync.Mutex{}, logger: logger, } - go e.syncLatest() + e.syncLatest() return e } @@ -67,21 +69,12 @@ func (e *ExtensionUsecase) syncLatest() { logger := e.logger.With("fn", "syncLatest") logger.With("version", e.version).Debug("开始同步插件版本信息") - t := time.NewTicker(1 * time.Minute) e.innerSync() - for range t.C { - e.innerSync() - } } func (e *ExtensionUsecase) innerSync() { - logger := e.logger.With("fn", "syncLatest") - v, err := e.getRemoteVersion() - if err != nil { - logger.With("error", err).Error("获取远程插件版本信息失败") - return - } + v := strings.ReplaceAll(version.Version, "v", "") if v == e.version { return } @@ -105,14 +98,20 @@ func (e *ExtensionUsecase) download(version string) { logger.With("error", err).Error("创建文件失败") return } - defer f.Close() _, err = io.Copy(f, resp.Body) if err != nil { logger.With("error", err).Error("复制文件内容失败") return } + f.Close() logger.Debug("下载插件成功") + if err := vsix.ValidateVsix(filename); err != nil { + logger.With("error", err).Error("校验插件失败") + os.Remove(filename) + return + } + if _, err := e.repo.Save(context.Background(), &db.Extension{ Version: version, Path: filename, @@ -123,24 +122,3 @@ func (e *ExtensionUsecase) download(version string) { } e.version = version } - -func (e *ExtensionUsecase) getRemoteVersion() (string, error) { - logger := e.logger.With("fn", "getRemoteVersion") - u := fmt.Sprintf("%s/monkeycode/vsix_version.txt", e.config.Extension.Baseurl) - logger.With("url", u).Debug("开始获取远程插件版本信息") - resp, err := http.Get(u) - if err != nil { - logger.With("error", err).Error("获取插件版本信息失败") - return "", err - } - defer resp.Body.Close() - - version, err := io.ReadAll(resp.Body) - if err != nil { - logger.With("error", err).Error("读取插件body信息失败") - return "", err - } - - logger.With("version", string(version)).Debug("读取到的插件版本信息") - return string(version), nil -} diff --git a/backend/pkg/vsix/vsix.go b/backend/pkg/vsix/vsix.go index d6bb6de..86d6338 100644 --- a/backend/pkg/vsix/vsix.go +++ b/backend/pkg/vsix/vsix.go @@ -6,6 +6,15 @@ import ( "io" ) +func ValidateVsix(filename string) error { + f, err := zip.OpenReader(filename) + if err != nil { + return err + } + defer f.Close() + return nil +} + func ChangeVsixEndpoint(vsixFile, target, endpoint string, w io.Writer) error { reader, err := zip.OpenReader(vsixFile) if err != nil {