Files
mp-qvyun/backend/common/media_store/store.go
2024-12-05 10:15:09 +08:00

81 lines
1.5 KiB
Go

package media_store
import (
"encoding/json"
"os"
"path/filepath"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
)
type Store []UUIDMap
type UUIDMap struct {
UUID string
Name string
}
func NewStore(path string) (*Store, error) {
mapFile := filepath.Join(path, "map.json")
log.Infof("read in from: %s", mapFile)
if _, err := os.Stat(mapFile); err != nil {
if os.IsNotExist(err) {
if err := os.WriteFile(mapFile, []byte("[]"), os.ModePerm); err != nil {
return nil, errors.Wrapf(err, "write file: %s", mapFile)
}
}
}
b, err := os.ReadFile(mapFile)
if err != nil {
return nil, errors.Wrapf(err, "read file: %s", mapFile)
}
var store Store
err = json.Unmarshal(b, &store)
if err != nil {
return nil, errors.Wrapf(err, "unmarshal json: %s", mapFile)
}
return &store, nil
}
func (s *Store) Save(path string) error {
mapFile := filepath.Join(path, "map.json")
b, err := json.Marshal(s)
if err != nil {
return errors.Wrapf(err, "marshal json: %s", mapFile)
}
if err := os.WriteFile(mapFile, b, os.ModePerm); err != nil {
return errors.Wrapf(err, "write file: %s", mapFile)
}
return nil
}
func (s *Store) Add(uuid, name string) {
*s = append(*s, UUIDMap{UUID: uuid, Name: name})
}
func (s *Store) UUIDs() []string {
var uuids []string
for _, m := range *s {
uuids = append(uuids, m.UUID)
}
return uuids
}
// Exists
func (s *Store) Exists(name string) bool {
for _, m := range *s {
if m.Name == name {
return true
}
}
return false
}