fix: issues

This commit is contained in:
Rogee
2024-12-10 10:24:31 +08:00
parent 0c9cb498d5
commit cb1cdee87e
32 changed files with 226 additions and 61 deletions

View 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
}
}
}