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 }