Skip to content

Commit cbcf942

Browse files
authored
Merge pull request #129 from yokowu/feat-sync-version
feat: 统一插件与服务端的版本号
2 parents 86933d9 + ee0ef76 commit cbcf942

File tree

2 files changed

+21
-34
lines changed

2 files changed

+21
-34
lines changed

backend/internal/extension/usecase/extension.go

Lines changed: 12 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ import (
77
"log/slog"
88
"net/http"
99
"os"
10+
"strings"
1011
"sync"
11-
"time"
1212

1313
"github.com/chaitin/MonkeyCode/backend/config"
1414
"github.com/chaitin/MonkeyCode/backend/db"
1515
"github.com/chaitin/MonkeyCode/backend/domain"
1616
"github.com/chaitin/MonkeyCode/backend/pkg/cvt"
17+
"github.com/chaitin/MonkeyCode/backend/pkg/version"
18+
"github.com/chaitin/MonkeyCode/backend/pkg/vsix"
1719
)
1820

1921
type ExtensionUsecase struct {
@@ -35,7 +37,7 @@ func NewExtensionUsecase(
3537
mu: sync.Mutex{},
3638
logger: logger,
3739
}
38-
go e.syncLatest()
40+
e.syncLatest()
3941
return e
4042
}
4143

@@ -67,21 +69,12 @@ func (e *ExtensionUsecase) syncLatest() {
6769

6870
logger := e.logger.With("fn", "syncLatest")
6971
logger.With("version", e.version).Debug("开始同步插件版本信息")
70-
t := time.NewTicker(1 * time.Minute)
7172

7273
e.innerSync()
73-
for range t.C {
74-
e.innerSync()
75-
}
7674
}
7775

7876
func (e *ExtensionUsecase) innerSync() {
79-
logger := e.logger.With("fn", "syncLatest")
80-
v, err := e.getRemoteVersion()
81-
if err != nil {
82-
logger.With("error", err).Error("获取远程插件版本信息失败")
83-
return
84-
}
77+
v := strings.ReplaceAll(version.Version, "v", "")
8578
if v == e.version {
8679
return
8780
}
@@ -105,14 +98,20 @@ func (e *ExtensionUsecase) download(version string) {
10598
logger.With("error", err).Error("创建文件失败")
10699
return
107100
}
108-
defer f.Close()
109101
_, err = io.Copy(f, resp.Body)
110102
if err != nil {
111103
logger.With("error", err).Error("复制文件内容失败")
112104
return
113105
}
106+
f.Close()
114107
logger.Debug("下载插件成功")
115108

109+
if err := vsix.ValidateVsix(filename); err != nil {
110+
logger.With("error", err).Error("校验插件失败")
111+
os.Remove(filename)
112+
return
113+
}
114+
116115
if _, err := e.repo.Save(context.Background(), &db.Extension{
117116
Version: version,
118117
Path: filename,
@@ -123,24 +122,3 @@ func (e *ExtensionUsecase) download(version string) {
123122
}
124123
e.version = version
125124
}
126-
127-
func (e *ExtensionUsecase) getRemoteVersion() (string, error) {
128-
logger := e.logger.With("fn", "getRemoteVersion")
129-
u := fmt.Sprintf("%s/monkeycode/vsix_version.txt", e.config.Extension.Baseurl)
130-
logger.With("url", u).Debug("开始获取远程插件版本信息")
131-
resp, err := http.Get(u)
132-
if err != nil {
133-
logger.With("error", err).Error("获取插件版本信息失败")
134-
return "", err
135-
}
136-
defer resp.Body.Close()
137-
138-
version, err := io.ReadAll(resp.Body)
139-
if err != nil {
140-
logger.With("error", err).Error("读取插件body信息失败")
141-
return "", err
142-
}
143-
144-
logger.With("version", string(version)).Debug("读取到的插件版本信息")
145-
return string(version), nil
146-
}

backend/pkg/vsix/vsix.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,15 @@ import (
66
"io"
77
)
88

9+
func ValidateVsix(filename string) error {
10+
f, err := zip.OpenReader(filename)
11+
if err != nil {
12+
return err
13+
}
14+
defer f.Close()
15+
return nil
16+
}
17+
918
func ChangeVsixEndpoint(vsixFile, target, endpoint string, w io.Writer) error {
1019
reader, err := zip.OpenReader(vsixFile)
1120
if err != nil {

0 commit comments

Comments
 (0)