1
0
mirror of https://github.com/thebaer/cdr.git synced 2024-11-15 01:31:01 +00:00

Add basic file renaming utility

This commit is contained in:
Matt Baer 2020-02-25 20:54:12 -05:00
commit f5e71f5a15
2 changed files with 80 additions and 0 deletions

28
cmd/cdr/main.go Normal file
View File

@ -0,0 +1,28 @@
package main
import (
"flag"
"fmt"
"os"
"github.com/thebaer/cdr"
)
var printUsage = func() {
fmt.Fprintf(os.Stderr, "usage: %s [optional flags] filename\n", os.Args[0])
flag.PrintDefaults()
}
func main() {
flag.Usage = printUsage
flag.Parse()
if flag.NArg() != 1 {
printUsage()
return
}
file := flag.Arg(0)
oldFilename, trackName := cdr.RenameTrack(file)
fmt.Println("Renaming", oldFilename, "to", trackName)
os.Rename(oldFilename, trackName)
}

52
sanitize.go Normal file
View File

@ -0,0 +1,52 @@
package cdr
import (
"fmt"
"log"
"os"
"regexp"
"strings"
"unicode"
"github.com/dhowden/tag"
)
var trackNameReg = regexp.MustCompile("^([0-9]{2}).+")
// RenameTrack takes a filename, opens it, reads the metadata, and returns both
// the old and new filename.
func RenameTrack(file string) (string, string) {
f, err := os.Open(file)
if err != nil {
fmt.Printf("error loading file: %v", err)
return "", ""
}
defer f.Close()
fMatch := trackNameReg.FindStringSubmatch(f.Name())
if len(fMatch) < 2 {
log.Fatal("Unexpect filename format")
}
trackNum := fMatch[1]
ext := ".mp3"
m, err := tag.ReadFrom(f)
if err != nil {
log.Fatal(err)
}
return f.Name(), fmt.Sprintf("%s-%s-%s%s", trackNum, Sanitize(m.Artist()), Sanitize(m.Title()), ext)
}
// Sanitize takes a string and removes problematic characters from it.
func Sanitize(s string) string {
s = strings.Map(func(r rune) rune {
if r == '(' || r == ')' || r == '[' || r == ']' || r == '.' {
return -1
}
if unicode.IsSpace(r) {
return '_'
}
return r
}, s)
return s
}