mirror of
https://github.com/chaitin/MonkeyCode.git
synced 2026-02-04 07:43:28 +08:00
Merge pull request #129 from yokowu/feat-sync-version
feat: 统一插件与服务端的版本号
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user