-
Notifications
You must be signed in to change notification settings - Fork 0
/
fs.go
53 lines (45 loc) · 1.26 KB
/
fs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package main
import (
"errors"
"fmt"
"os"
"os/exec"
"github.com/bogem/id3v2"
)
// GetFpcalcPath returns the path to fpcalc and does so in
// the following order:
// - Use value of the env variable "FPCALC_BINARY_PATH"
// - Search in the PATH (equivalent to `which fpcalc`)
// - Fallback to the project root "./fpcalc"
func GetFpcalcPath() (string, error) {
fpcalc := os.Getenv("FPCALC_BINARY_PATH")
if fpcalc != "" {
return fpcalc, nil
}
fpcalc, err := exec.LookPath("fpcalc")
if err == nil {
return fpcalc, nil
}
if errors.Is(err, exec.ErrNotFound) {
return "./fpcalc", nil
}
return "", err
}
// CommitChangesToFile is the final step to updating a file. It updates
// the id3 tags and renames it according to its matched result.
func CommitChangesToFile(file *id3v2.Tag, artist, songName, album, fileName string) error {
file.SetArtist(artist)
file.SetTitle(songName)
file.SetAlbum(album)
// persist new tags
if err := file.Save(); err != nil {
fmt.Printf("failed to store tags: %s\n", err.Error())
return err
}
if !renameFiles {
return nil
}
os.Rename(pathToMusic+"/"+fileName, fmt.Sprintf("%s/%s - %s.mp3", pathToMusic, artist, songName))
fmt.Printf("Renamed file from \"%s\" to \"%s - %s.mp3\"\n", fileName, artist, songName)
return nil
}