stream-poc2/db.go
2025-10-09 22:21:38 +02:00

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
}