package scanner import ( "fmt" "log" "os" "path" "path/filepath" "strings" "time" "github.com/dhowden/tag" ) var audioExtensions = map[string]string{ "mp3": "audio/mpeg", "flac": "audio/x-flac", "aac": "audio/x-aac", "m4a": "audio/m4a", "ogg": "audio/ogg", } func isAudio(fullPath string) (string, string, bool) { exten := filepath.Ext(fullPath)[1:] mine, ok := audioExtensions[exten] if !ok { return "", "", false } return mine, exten, true } var coverFilenames = map[string]bool{ "cover.png": true, "cover.jpg": true, "cover.jpeg": true, "folder.png": true, "folder.jpg": true, "folder.jpeg": true, "album.png": true, "album.jpg": true, "album.jpeg": true, "front.png": true, "front.jpg": true, "front.jpeg": true, } func isCover(fullPath string) bool { _, filename := path.Split(fullPath) _, ok := coverFilenames[strings.ToLower(filename)] return ok } func readTags(fullPath string) (tag.Metadata, error) { trackData, err := os.Open(fullPath) if err != nil { return nil, fmt.Errorf("when tags from disk: %v", err) } defer trackData.Close() tags, err := tag.ReadFrom(trackData) if err != nil { return nil, err } return tags, nil } func logElapsed(start time.Time, name string) { elapsed := time.Since(start) log.Printf("finished %s in %s\n", name, elapsed) }