feat: 修改同步应用列表方式 (#1141)

This commit is contained in:
zhengkunwang223 2023-05-25 14:58:16 +08:00 committed by GitHub
parent c8237d59be
commit 4b25dafb92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 88 additions and 39 deletions

View File

@ -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 {

View File

@ -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 {

View File

@ -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',

View File

@ -1140,12 +1140,13 @@ const message = {
allowPortHelper: '允许外部端口访问会放开防火墙端口php运行环境请勿放开',
appInstallWarn: '应用默认不放开外部访问端口可以在高级设置中选择放开',
upgradeStart: '开始升级请稍后刷新页面',
toFolder: '打开安装目录',
toFolder: '进入安装目录',
editCompose: '编辑 compose 文件',
editComposeHelper: '编辑 compose 文件可能导致软件安装失败',
composeNullErr: 'compose 不能为空',
takeDown: '已废弃',
allReadyInstalled: '已安装',
installHelper: '配置镜像加速可以解决镜像拉取失败的问题',
},
website: {
website: '网站',

View File

@ -55,6 +55,21 @@
<img src="@/assets/images/no_update_app.svg" />
</div>
</div>
<el-alert type="info" :closable="false" v-if="mode === 'installed'">
<template #default>
<span>
<span>{{ $t('app.installHelper') }}</span>
<el-link
style="font-size: 12px; margin-left: 5px"
icon="Position"
@click="quickJump()"
type="primary"
>
{{ $t('firewall.quickJump') }}
</el-link>
</span>
</template>
</el-alert>
<el-row :gutter="5">
<el-col
v-for="(installed, index) in data"
@ -436,6 +451,10 @@ const isAppErr = (row: any) => {
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') {