84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
package Commands
|
|
|
|
import (
|
|
"github.com/olekukonko/tablewriter"
|
|
"github.com/urfave/cli/v2"
|
|
proto "lotus-pm.net/proto"
|
|
"lpm-cli/Lotus"
|
|
"lpm-cli/ProtoHandler"
|
|
"os"
|
|
)
|
|
|
|
func NewSearchCommand() *cli.Command {
|
|
|
|
logger := Lotus.Logger("searchCommand")
|
|
|
|
return &cli.Command{
|
|
Name: "search",
|
|
Usage: "Seaches a packages",
|
|
Description: "Sends a search request to the default registry server, or to a user-defined registry server",
|
|
HelpName: "search",
|
|
Action: func(c *cli.Context) error {
|
|
|
|
var query string
|
|
|
|
if len(os.Args) > 3 {
|
|
query = os.Args[2] + " " + os.Args[3]
|
|
} else {
|
|
query = os.Args[2]
|
|
}
|
|
|
|
packages := SearchPackages(Lotus.Platform(), Lotus.Architecture(), query)
|
|
|
|
//sample code
|
|
table := tablewriter.NewWriter(os.Stdout)
|
|
table.SetHeader([]string{"Publisher", "Package", "Description", "Latest Version", "Registry"})
|
|
|
|
for _, pkg := range packages {
|
|
table.Append([]string{pkg.PackageMetadata.Publisher, pkg.PackageMetadata.Name, pkg.PackageMetadata.Description, pkg.PackageMetadata.Version, pkg.Register.Register})
|
|
}
|
|
table.Render()
|
|
//Sample code end
|
|
|
|
return nil
|
|
},
|
|
OnUsageError: func(c *cli.Context, err error, isSubcommand bool) error {
|
|
if err != nil {
|
|
logger.Fatal(err)
|
|
}
|
|
return err
|
|
},
|
|
}
|
|
}
|
|
|
|
func fetchPackages(platform string, architecture []string, query string, registry Lotus.Registry) *proto.SearchResponse {
|
|
var protoWrap ProtoHandler.ProtoWrapper
|
|
|
|
conn := protoWrap.CreateConnection(registry.Address)
|
|
defer conn.Close()
|
|
|
|
client, ctx, cancel := protoWrap.CreateRegistryClient(conn)
|
|
defer cancel()
|
|
|
|
res, _ := client.Search(ctx, &proto.SearchRequest{Platform: platform, Architecture: architecture, Query: query})
|
|
|
|
return res
|
|
}
|
|
|
|
func SearchPackages(platform string, architecture []string, query string) []ProtoHandler.Package {
|
|
var packages []ProtoHandler.Package
|
|
var protoWrap ProtoHandler.ProtoWrapper
|
|
|
|
registries := Lotus.GetRegistries()
|
|
|
|
for _, reg := range registries {
|
|
res := fetchPackages(platform, architecture, query, reg)
|
|
if res != nil {
|
|
for _, pkg := range protoWrap.ParsePackages(res, reg) {
|
|
packages = append(packages, pkg)
|
|
}
|
|
}
|
|
}
|
|
|
|
return packages
|
|
}
|