diff --git a/.env.example b/.env.example index 3f0a720..3861f7b 100644 --- a/.env.example +++ b/.env.example @@ -2,3 +2,5 @@ LIBRARY_ROOT= # root directory for library LIBRARY_FILETEMPLATE_PATH= # go text/template string that represents the path in the library LIBRARY_FILETEMPLATE_FILE= # go text/template string that represents the file name in the library path LIBRARY_NOTAGS_ROOT= # path to put files without tags + +FILENAME_LIMIT= # max length of a filename, default 255 diff --git a/go.mod b/go.mod index 1d79dbb..065d464 100644 --- a/go.mod +++ b/go.mod @@ -9,4 +9,4 @@ require ( github.com/joho/godotenv v1.5.1 ) -require golang.org/x/text v0.26.0 // indirect +require golang.org/x/text v0.28.0 diff --git a/go.sum b/go.sum index c6a1118..bff6be0 100644 --- a/go.sum +++ b/go.sum @@ -2,5 +2,5 @@ github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8 h1:OtSeLS5y0Uy01jaKK4m github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8/go.mod h1:apkPC/CR3s48O2D7Y++n1XWEpgPNNCjXYga3PPbJe2E= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= diff --git a/main.go b/main.go index 6cc27c4..91aa2e7 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "log" "os" "path" + "strconv" "strings" "text/template" "time" @@ -151,9 +152,37 @@ func testEnv() error { return errors.New("missing LIBRARY_NOTAGS_ROOT") } + if !testEnvFilenameLimit() { + return errors.New("unable to parse FILENAME_LIMIT") + } + return nil } +func testEnvFilenameLimit() bool { + limit, ok := os.LookupEnv("FILENAME_LIMIT") + if !ok { + return true + } + _, err := strconv.Atoi(limit) + if err != nil { + return false + } + return true +} + +func getEnvFilenameLimit() int { + limit, ok := os.LookupEnv("FILENAME_LIMIT") + if !ok { + return 255 + } + limit_i, err := strconv.Atoi(limit) + if err != nil { + return 255 + } + return limit_i +} + func getTagsInDir(directory string) (tag.Metadata, error) { files, err := os.ReadDir(directory) if err != nil { @@ -356,7 +385,13 @@ func doMoveTagged(filePath string, fileTags tag.Metadata) error { return err } - libFile := path.Join(libRoot, bufPath.String(), bufFile.String() + fileExt) + filenameLimit := getEnvFilenameLimit() - len(fileExt) + filename := bufFile.String() + if len(filename) > filenameLimit { + filename = filename[:filenameLimit] + } + + libFile := path.Join(libRoot, bufPath.String(), filename + fileExt) return move(filePath, libFile) } diff --git a/music-rename b/music-rename index faea48e..d8fedd1 100644 Binary files a/music-rename and b/music-rename differ