12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package metadata
- import (
- "fmt"
- "io"
- "net/http"
- "os"
- )
- func MakeOrReadCache(cachePath string) ([]byte, error) {
- cacheBytes, err := ReadCache(cachePath)
- if err != nil {
- return nil, err
- }
- if len(cacheBytes) == 0 {
- cacheBytes, err = MakeCache(cachePath)
- if err != nil {
- return nil, err
- }
- }
- return cacheBytes, nil
- }
- func ReadCache(cachePath string) ([]byte, error) {
- fp, err := os.Open(cachePath)
- if err != nil {
- if os.IsNotExist(err) {
- return nil, nil
- }
- return nil, err
- }
- defer fp.Close()
- s, err := io.ReadAll(fp)
- if err != nil {
- return nil, err
- }
- return s, nil
- }
- // Download the metadata for aur packages.
- // create cache file
- // write to cache file
- func MakeCache(cachePath string) ([]byte, error) {
- body, err := downloadAURMetadata()
- if err != nil {
- return nil, err
- }
- defer body.Close()
- s, err := io.ReadAll(body)
- if err != nil {
- return nil, err
- }
- f, err := os.Create(cachePath)
- if err != nil {
- return nil, err
- }
- defer f.Close()
- if _, err = f.Write(s); err != nil {
- return nil, err
- }
- return s, err
- }
- func downloadAURMetadata() (io.ReadCloser, error) {
- resp, err := http.Get("https://aur.archlinux.org/packages-meta-ext-v1.json.gz")
- if err != nil {
- return nil, err
- }
- if resp.StatusCode != http.StatusOK {
- return nil, fmt.Errorf("failed to download metadata: %s", resp.Status)
- }
- return resp.Body, nil
- }
|