func buildRemoteStore(s *stores) (err error) { if remoteStore == "" { return nil } var c store.Client if strings.HasPrefix(remoteStore, "s3://") { path := strings.TrimPrefix(remoteStore, "s3://") bucketPathSplit := strings.Split(path, "/") if len(bucketPathSplit) == 0 { return fmt.Errorf("invalid S3 path: %#v\n", remoteStore) } bucket := bucketPathSplit[0] var auth aws.Auth auth, err = aws.GetAuth("", "") // Extract credentials from the current instance. if err != nil { return fmt.Errorf("error getting AWS credentials: %v", err) } c = store.NewS3Client(bucket, auth, aws.APSoutheast2) } else { c = store.NewClient(remoteStore, "") s.artwork = store.NewRemoteFileSystem(store.NewClient(remoteStore, "artwork")) } s.media = store.NewRemoteChunkedFileSystem(c, 32*1024) if s.artwork == nil { s.artwork = store.Trace(store.ArtworkFileSystem(s.media), "artwork") } return nil }
func buildLocalStore(s *stores) { if localStore != "" { fs := store.NewFileSystem(http.Dir(localStore), fmt.Sprintf("localstore (%v)", localStore)) if s.media != nil { s.media = store.MultiFileSystem(fs, s.media) } else { s.media = fs } afs := store.Trace(store.ArtworkFileSystem(fs), "local artworkstore") if s.artwork != nil { s.artwork = store.MultiFileSystem(afs, s.artwork) } else { s.artwork = afs } } }
// FileSystem wraps the http.FileSystem in a library lookup which will translate /TrackID // requests into their corresponding track paths. func (l *Library) FileSystem(fs store.FileSystem) store.FileSystem { return store.Trace(&libraryFileSystem{fs, l.Library}, "libraryFileSystem") }