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:
commit
f5e71f5a15
28
cmd/cdr/main.go
Normal file
28
cmd/cdr/main.go
Normal 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
52
sanitize.go
Normal 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
|
||||
}
|
Loading…
Reference in New Issue
Block a user