fix: issues
This commit is contained in:
107
backend/pkg/media_store/store.go
Normal file
107
backend/pkg/media_store/store.go
Normal file
@@ -0,0 +1,107 @@
|
||||
package media_store
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
type Store []VideoInfo
|
||||
|
||||
type VideoInfo struct {
|
||||
Hash string
|
||||
Name string
|
||||
Duration int64
|
||||
}
|
||||
|
||||
// Price
|
||||
func (info VideoInfo) Price() int64 {
|
||||
min := int64(10)
|
||||
// if duration is less than 300 seconds, return 10
|
||||
if info.Duration < 5*60 {
|
||||
return min * 100
|
||||
}
|
||||
|
||||
// 每多一分钟,价格加 3, 如果余数大于 30 秒,按一分钟计算
|
||||
cells := (info.Duration - 5*30) / 60
|
||||
if info.Duration%60 > 30 {
|
||||
cells++
|
||||
}
|
||||
|
||||
return (min + cells*3) * 100
|
||||
}
|
||||
|
||||
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) Append(info VideoInfo) Store {
|
||||
return append(s, info)
|
||||
}
|
||||
|
||||
func (s Store) Hashes() []string {
|
||||
var hashes []string
|
||||
for _, m := range s {
|
||||
hashes = append(hashes, m.Hash)
|
||||
}
|
||||
|
||||
return hashes
|
||||
}
|
||||
|
||||
// Exists
|
||||
func (s Store) HashExists(hash string) (VideoInfo, bool) {
|
||||
for _, m := range s {
|
||||
if m.Hash == hash {
|
||||
return m, true
|
||||
}
|
||||
}
|
||||
|
||||
return VideoInfo{}, false
|
||||
}
|
||||
|
||||
func (s Store) Update(info VideoInfo) {
|
||||
for i, m := range s {
|
||||
if m.Hash == info.Hash {
|
||||
s[i] = info
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user