@@ -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
1921type 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
7876func (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- }
0 commit comments