fix: 优化代码

This commit is contained in:
tangtanglove
2023-04-12 19:18:00 +08:00
parent 44620698ff
commit 4392f11713
4 changed files with 169 additions and 3 deletions

1
go.mod
View File

@@ -122,6 +122,7 @@ require (
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.43.0 // indirect
github.com/valyala/tcplisten v1.0.0 // indirect
github.com/xbmlz/gct v0.0.0-20220707064702-998631a80a6a
github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 // indirect
github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect

2
go.sum
View File

@@ -960,6 +960,8 @@ github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQ
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
github.com/xbmlz/gct v0.0.0-20220707064702-998631a80a6a h1:trfL4gldWsl4RdXVft2j8VZu4Xh+sws7EovGTJyfnOs=
github.com/xbmlz/gct v0.0.0-20220707064702-998631a80a6a/go.mod h1:45Nbht0AaBjpcsN2z0Zr67vCcfeA12mM7BrtEIVCh90=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=

View File

@@ -3,6 +3,7 @@ package builder
import (
"io"
"net/http"
"os"
"reflect"
"strings"
"time"
@@ -10,7 +11,7 @@ import (
"github.com/jinzhu/copier"
"github.com/labstack/echo/v4"
"github.com/quarkcms/quark-go/pkg/dal"
"github.com/quarkcms/quark-go/pkg/github"
"github.com/quarkcms/quark-go/pkg/gopkg"
"gorm.io/gorm"
)
@@ -19,7 +20,7 @@ const (
AppName = "QuarkGo"
// Version of current package
Version = "1.2.9"
Version = "1.2.10"
// 静态文件URL
RespositoryURL = "https://github.com/quarkcms/quark-go/tree/1.2/website/"
@@ -105,8 +106,21 @@ func New(config *Config) *Engine {
config: config,
}
// 默认静态文件目录
if config.StaticPath == "" {
config.StaticPath = "./website"
}
// 下载静态文件
github.Download(RespositoryURL, config.StaticPath)
_, err := os.Stat(config.StaticPath + "/install.lock")
if os.IsNotExist(err) {
err := gopkg.New("github.com/quarkcms/quark-go", Version).Save("website", config.StaticPath)
if err == nil {
// 创建锁定文件
file, _ := os.Create(config.StaticPath + "/install.lock")
file.Close()
}
}
// 初始化请求列表
engine.initPaths()

149
pkg/gopkg/gopkg.go Normal file
View File

@@ -0,0 +1,149 @@
package gopkg
import (
"fmt"
"io"
"io/ioutil"
"net/http"
"os"
"path"
"github.com/xbmlz/gct"
)
// 包域名地址
const domain = "https://goproxy.cn/"
// 结构体
type PkgGo struct {
Name string
Version string
}
func New(name string, version string) *PkgGo {
return &PkgGo{
Name: name,
Version: version,
}
}
// 下载文件
func (p *PkgGo) Download() error {
// https://goproxy.cn/github.com/quarkcms/quark-go/@v/v1.2.9.zip
fileUrl := domain + p.Name + "/@v/v" + p.Version + ".zip"
// Get the data
resp, err := http.Get(fileUrl)
if err != nil {
panic(err)
}
defer resp.Body.Close()
// 创建文件用于保存
out, err := os.Create("./tmp/v" + p.Version + ".zip")
if err != nil {
panic(err)
}
defer out.Close()
// 然后将响应流和文件流对接起来
_, err = io.Copy(out, resp.Body)
return err
}
// 解压文件
func (p *PkgGo) Unzip() error {
filePath := "./tmp/v" + p.Version + ".zip"
return gct.FileUtils.Unzip(filePath, "./tmp/v"+p.Version)
}
// 保存文件
func (p *PkgGo) Save(dir string, path string) error {
// 先下载文件
err := p.Download()
if err != nil {
return err
}
// 解压下载文件
err = p.Unzip()
if err != nil {
return err
}
// 清理缓存文件
defer os.RemoveAll("./tmp/v" + p.Version)
// 清理压缩文件
defer os.RemoveAll("./tmp/v" + p.Version + ".zip")
// 移动文件
err = Dir("./tmp/v"+p.Version+"/"+p.Name+"@v"+p.Version+"/"+dir, path)
return err
}
// File copies a single file from src to dst
func File(src, dst string) error {
var err error
var srcfd *os.File
var dstfd *os.File
var srcinfo os.FileInfo
if srcfd, err = os.Open(src); err != nil {
return err
}
defer srcfd.Close()
if dstfd, err = os.Create(dst); err != nil {
return err
}
defer dstfd.Close()
if _, err = io.Copy(dstfd, srcfd); err != nil {
return err
}
if srcinfo, err = os.Stat(src); err != nil {
return err
}
return os.Chmod(dst, srcinfo.Mode())
}
// Dir copies a whole directory recursively
func Dir(src string, dst string) error {
var err error
var fds []os.FileInfo
var srcinfo os.FileInfo
if srcinfo, err = os.Stat(src); err != nil {
return err
}
if err = os.MkdirAll(dst, srcinfo.Mode()); err != nil {
return err
}
if fds, err = ioutil.ReadDir(src); err != nil {
return err
}
for _, fd := range fds {
srcfp := path.Join(src, fd.Name())
dstfp := path.Join(dst, fd.Name())
if fd.IsDir() {
if err = Dir(srcfp, dstfp); err != nil {
fmt.Println(err)
}
} else {
if err = File(srcfp, dstfp); err != nil {
fmt.Println(err)
}
}
}
return nil
}