update: add the package page
This commit is contained in:
@ -1,11 +1,17 @@
|
||||
package lib
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"bufio"
|
||||
"compress/gzip"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/url"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
"git.matterlinux.xyz/matter/tracker/log"
|
||||
"github.com/bigkevmcd/go-configparser"
|
||||
)
|
||||
|
||||
@ -16,6 +22,49 @@ type Package struct {
|
||||
Depends []string `json:"depends"`
|
||||
Size string `json:"size"`
|
||||
Desc string `json:"desc"`
|
||||
Archive string `json:"archive"`
|
||||
}
|
||||
|
||||
func (p *Package) Files() []string {
|
||||
var (
|
||||
gzip_reader io.Reader
|
||||
header *tar.Header
|
||||
result []string
|
||||
file *os.File
|
||||
err error
|
||||
)
|
||||
|
||||
if file, err = os.Open(p.Archive); err != nil {
|
||||
log.Error("Failed to open %s", p.Archive)
|
||||
return result
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
if gzip_reader, err = gzip.NewReader(bufio.NewReader(file)); err != nil {
|
||||
log.Error("Failed to create reader for %s", p.Archive)
|
||||
return result
|
||||
}
|
||||
|
||||
reader := tar.NewReader(gzip_reader)
|
||||
|
||||
for header, err = reader.Next(); err == nil; header, err = reader.Next() {
|
||||
if header.Typeflag != tar.TypeReg {
|
||||
continue
|
||||
}
|
||||
|
||||
if path.Base(header.Name) != "files.tar.gz" {
|
||||
continue
|
||||
}
|
||||
|
||||
if result, err = GetFiles(reader); err == nil {
|
||||
break
|
||||
}
|
||||
|
||||
log.Error("Failed to get file list for %s: %s", p.Archive, err.Error())
|
||||
return []string{}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func (p *Package) URL() string {
|
||||
|
@ -75,12 +75,14 @@ func (p *Pool) LoadList(list *[]Package) error {
|
||||
}
|
||||
|
||||
var pkg Package
|
||||
pkg.Pool = p
|
||||
|
||||
if err = pkg.Load(reader); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pkg.Archive = path.Join(p.Dir, fmt.Sprintf("%s_%s.mpf", pkg.Name, pkg.Version))
|
||||
pkg.Pool = p
|
||||
|
||||
*list = append(*list, pkg)
|
||||
}
|
||||
|
||||
|
28
lib/util.go
28
lib/util.go
@ -1,13 +1,41 @@
|
||||
package lib
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"compress/gzip"
|
||||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
func GetFiles(r io.Reader) ([]string, error) {
|
||||
var (
|
||||
gzip_reader io.Reader
|
||||
header *tar.Header
|
||||
result []string
|
||||
err error
|
||||
)
|
||||
|
||||
if gzip_reader, err = gzip.NewReader(r); err != nil {
|
||||
return result, err
|
||||
}
|
||||
|
||||
reader := tar.NewReader(gzip_reader)
|
||||
|
||||
for header, err = reader.Next(); err == nil; header, err = reader.Next() {
|
||||
if header.Typeflag != tar.TypeReg {
|
||||
continue
|
||||
}
|
||||
|
||||
result = append(result, header.Name)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func ListToStr(l []string) string {
|
||||
res := ""
|
||||
for _, e := range l {
|
||||
|
Reference in New Issue
Block a user