55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
"os"
|
|
"path"
|
|
"stream-poc2/model"
|
|
)
|
|
|
|
func pathForMedia(mediaID string) string {
|
|
return path.Join("db", mediaID)
|
|
}
|
|
|
|
var metadataCache = make(map[string]model.MediaMetadata) // metadata is currently immutable, so we can make it simple here
|
|
|
|
func loadMediaMetadata(id string) (model.MediaMetadata, error) {
|
|
var metadata model.MediaMetadata
|
|
var ok bool
|
|
|
|
metadata, ok = metadataCache[id]
|
|
if ok {
|
|
return metadata, nil
|
|
}
|
|
|
|
log.Printf("metadata for %s not found in cache... loading...", id)
|
|
|
|
mediaPath := pathForMedia(id)
|
|
if !isDir(mediaPath) {
|
|
log.Println("media path dir does not exists", mediaPath)
|
|
return model.MediaMetadata{}, os.ErrNotExist
|
|
}
|
|
|
|
f, err := os.OpenFile(path.Join(mediaPath, "meta.json"), os.O_RDONLY, 0)
|
|
if err != nil {
|
|
log.Println("Failed ot open file:", err)
|
|
return model.MediaMetadata{}, err
|
|
}
|
|
defer func(f *os.File) {
|
|
err := f.Close()
|
|
if err != nil {
|
|
log.Println("failed to close metadata file:", err)
|
|
}
|
|
}(f)
|
|
|
|
err = json.NewDecoder(f).Decode(&metadata)
|
|
if err != nil {
|
|
log.Println("Failed to load metadata:", metadata)
|
|
return model.MediaMetadata{}, err
|
|
}
|
|
|
|
metadataCache[id] = metadata
|
|
|
|
return metadata, nil
|
|
}
|