From 4b25dafb92a14a8c171d4e1bcdff857f373fce8d Mon Sep 17 00:00:00 2001 From: zhengkunwang223 <31820853+zhengkunwang223@users.noreply.github.com> Date: Thu, 25 May 2023 14:58:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=88=97=E8=A1=A8=E6=96=B9=E5=BC=8F=20(#1141?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/dto/response/app.go | 6 +- backend/app/service/app.go | 97 ++++++++++++------- frontend/src/lang/modules/en.ts | 2 + frontend/src/lang/modules/zh.ts | 3 +- .../src/views/app-store/installed/index.vue | 19 ++++ 5 files changed, 88 insertions(+), 39 deletions(-) diff --git a/backend/app/dto/response/app.go b/backend/app/dto/response/app.go index 3b4d35212..afbad742a 100644 --- a/backend/app/dto/response/app.go +++ b/backend/app/dto/response/app.go @@ -1,7 +1,6 @@ package response import ( - "github.com/1Panel-dev/1Panel/backend/app/dto" "github.com/1Panel-dev/1Panel/backend/app/dto/request" "time" @@ -14,9 +13,8 @@ type AppRes struct { } type AppUpdateRes struct { - CanUpdate bool `json:"canUpdate"` - AppStoreLastModified int `json:"appStoreLastModified"` - List dto.AppList `json:"list"` + CanUpdate bool `json:"canUpdate"` + AppStoreLastModified int `json:"appStoreLastModified"` } type AppDTO struct { diff --git a/backend/app/service/app.go b/backend/app/service/app.go index f47df4886..05feb5001 100644 --- a/backend/app/service/app.go +++ b/backend/app/service/app.go @@ -356,39 +356,6 @@ func (a AppService) Install(ctx context.Context, req request.AppInstallCreate) ( return } -func (a AppService) GetAppUpdate() (*response.AppUpdateRes, error) { - res := &response.AppUpdateRes{ - CanUpdate: false, - } - setting, err := NewISettingService().GetSettingInfo() - if err != nil { - return nil, err - } - versionUrl := fmt.Sprintf("%s/%s/1panel.json", global.CONF.System.AppRepo, global.CONF.System.Mode) - versionRes, err := http.Get(versionUrl) - if err != nil { - return nil, err - } - defer versionRes.Body.Close() - body, err := io.ReadAll(versionRes.Body) - if err != nil { - return nil, err - } - list := &dto.AppList{} - if err = json.Unmarshal(body, list); err != nil { - return nil, err - } - res.AppStoreLastModified = list.LastModified - res.List = *list - - appStoreLastModified, _ := strconv.Atoi(setting.AppStoreLastModified) - if setting.AppStoreLastModified == "" || list.LastModified > appStoreLastModified { - res.CanUpdate = true - return res, err - } - return res, nil -} - func (a AppService) SyncAppListFromLocal() { fileOp := files.NewFileOp() localAppDir := constant.LocalAppResourceDir @@ -659,6 +626,56 @@ func (a AppService) SyncAppListFromLocal() { tx.Commit() global.LOG.Infof("sync local apps success") } + +func (a AppService) GetAppUpdate() (*response.AppUpdateRes, error) { + res := &response.AppUpdateRes{ + CanUpdate: false, + } + setting, err := NewISettingService().GetSettingInfo() + if err != nil { + return nil, err + } + versionUrl := fmt.Sprintf("%s/%s/1panel.json.version.txt", global.CONF.System.AppRepo, global.CONF.System.Mode) + versionRes, err := http.Get(versionUrl) + if err != nil { + return nil, err + } + defer versionRes.Body.Close() + body, err := io.ReadAll(versionRes.Body) + if err != nil { + return nil, err + } + lastModifiedStr := string(body) + + lastModified, err := strconv.Atoi(lastModifiedStr) + if err != nil { + return nil, err + } + appStoreLastModified, _ := strconv.Atoi(setting.AppStoreLastModified) + if setting.AppStoreLastModified == "" || lastModified != appStoreLastModified { + res.CanUpdate = true + return res, err + } + return res, nil +} + +func getAppFromRepo(downloadPath string) error { + downloadUrl := downloadPath + global.LOG.Infof("download file from %s", downloadUrl) + fileOp := files.NewFileOp() + packagePath := path.Join(constant.ResourceDir, path.Base(downloadUrl)) + if err := fileOp.DownloadFile(downloadUrl, packagePath); err != nil { + return err + } + if err := fileOp.Decompress(packagePath, constant.ResourceDir, files.Zip); err != nil { + return err + } + defer func() { + _ = fileOp.DeleteFile(packagePath) + }() + return nil +} + func (a AppService) SyncAppListFromRemote() error { updateRes, err := a.GetAppUpdate() if err != nil { @@ -667,10 +684,22 @@ func (a AppService) SyncAppListFromRemote() error { if !updateRes.CanUpdate { return nil } + if err = getAppFromRepo(fmt.Sprintf("%s/%s/1panel.json.zip", global.CONF.System.AppRepo, global.CONF.System.Mode)); err != nil { + return err + } + listFile := path.Join(constant.ResourceDir, "1panel.json") + content, err := os.ReadFile(listFile) + if err != nil { + return err + } + list := &dto.AppList{} + if err := json.Unmarshal(content, list); err != nil { + return err + } + var ( tags []*model.Tag appTags []*model.AppTag - list = updateRes.List oldAppIds []uint ) for _, t := range list.Extra.Tags { diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 804dda0e1..d699c7f73 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1155,6 +1155,8 @@ const message = { editComposeHelper: 'Editing the compose file may cause the software installation to fail', composeNullErr: 'compose cannot be empty', takeDown: 'TakeDown', + allReadyInstalled: 'Installed', + installHelper: 'Configuring image acceleration can solve the problem of image pull failure', }, website: { website: 'Website', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index be223e66b..3e9143923 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -1140,12 +1140,13 @@ const message = { allowPortHelper: '允许外部端口访问会放开防火墙端口,php运行环境请勿放开', appInstallWarn: '应用默认不放开外部访问端口,可以在高级设置中选择放开', upgradeStart: '开始升级!请稍后刷新页面', - toFolder: '打开安装目录', + toFolder: '进入安装目录', editCompose: '编辑 compose 文件', editComposeHelper: '编辑 compose 文件可能导致软件安装失败', composeNullErr: 'compose 不能为空', takeDown: '已废弃', allReadyInstalled: '已安装', + installHelper: '配置镜像加速可以解决镜像拉取失败的问题', }, website: { website: '网站', diff --git a/frontend/src/views/app-store/installed/index.vue b/frontend/src/views/app-store/installed/index.vue index 596a84013..727965911 100644 --- a/frontend/src/views/app-store/installed/index.vue +++ b/frontend/src/views/app-store/installed/index.vue @@ -55,6 +55,21 @@ + + + { return row.status.includes('Err') || row.status.includes('Error'); }; +const quickJump = () => { + router.push({ name: 'ContainerSetting' }); +}; + onMounted(() => { const path = router.currentRoute.value.path; if (path == '/apps/upgrade') {