mirror of
https://github.com/navidrome/navidrome.git
synced 2025-06-04 09:31:09 +03:00
Remove duplicated helper functions, move them to utils
package
This commit is contained in:
parent
bb9a7fadc0
commit
eb109ebeb4
@ -10,9 +10,7 @@ import (
|
|||||||
"image/jpeg"
|
"image/jpeg"
|
||||||
_ "image/png"
|
_ "image/png"
|
||||||
"io"
|
"io"
|
||||||
"mime"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -21,6 +19,7 @@ import (
|
|||||||
"github.com/deluan/navidrome/log"
|
"github.com/deluan/navidrome/log"
|
||||||
"github.com/deluan/navidrome/model"
|
"github.com/deluan/navidrome/model"
|
||||||
"github.com/deluan/navidrome/resources"
|
"github.com/deluan/navidrome/resources"
|
||||||
|
"github.com/deluan/navidrome/utils"
|
||||||
"github.com/dhowden/tag"
|
"github.com/dhowden/tag"
|
||||||
"github.com/disintegration/imaging"
|
"github.com/disintegration/imaging"
|
||||||
"github.com/djherbis/fscache"
|
"github.com/djherbis/fscache"
|
||||||
@ -141,7 +140,7 @@ func (c *cover) getCover(ctx context.Context, path string, size int) (reader io.
|
|||||||
}
|
}
|
||||||
|
|
||||||
var data []byte
|
var data []byte
|
||||||
if isAudioFile(filepath.Ext(path)) {
|
if utils.IsAudioFile(path) {
|
||||||
data, err = readFromTag(path)
|
data, err = readFromTag(path)
|
||||||
} else {
|
} else {
|
||||||
data, err = readFromFile(path)
|
data, err = readFromFile(path)
|
||||||
@ -207,10 +206,6 @@ func readFromFile(path string) ([]byte, error) {
|
|||||||
return buf.Bytes(), nil
|
return buf.Bytes(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func isAudioFile(extension string) bool {
|
|
||||||
return strings.HasPrefix(mime.TypeByExtension(extension), "audio/")
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewImageCache() (ImageCache, error) {
|
func NewImageCache() (ImageCache, error) {
|
||||||
return newFileCache("Image", conf.Server.ImageCacheSize, consts.ImageCacheDir, consts.DefaultImageCacheMaxItems)
|
return newFileCache("Image", conf.Server.ImageCacheSize, consts.ImageCacheDir, consts.DefaultImageCacheMaxItems)
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package persistence
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"mime"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sort"
|
"sort"
|
||||||
@ -16,6 +15,7 @@ import (
|
|||||||
"github.com/deluan/navidrome/consts"
|
"github.com/deluan/navidrome/consts"
|
||||||
"github.com/deluan/navidrome/log"
|
"github.com/deluan/navidrome/log"
|
||||||
"github.com/deluan/navidrome/model"
|
"github.com/deluan/navidrome/model"
|
||||||
|
"github.com/deluan/navidrome/utils"
|
||||||
"github.com/deluan/rest"
|
"github.com/deluan/rest"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -222,7 +222,7 @@ func getCoverFromPath(path string, hasEmbeddedCover bool) string {
|
|||||||
|
|
||||||
for _, name := range names {
|
for _, name := range names {
|
||||||
match, _ := filepath.Match(pat, strings.ToLower(name))
|
match, _ := filepath.Match(pat, strings.ToLower(name))
|
||||||
if match && isImageFile(filepath.Ext(name)) {
|
if match && utils.IsImageFile(name) {
|
||||||
return filepath.Join(filepath.Dir(path), name)
|
return filepath.Join(filepath.Dir(path), name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -231,10 +231,6 @@ func getCoverFromPath(path string, hasEmbeddedCover bool) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func isImageFile(extension string) bool {
|
|
||||||
return strings.HasPrefix(mime.TypeByExtension(extension), "image/")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *albumRepository) purgeEmpty() error {
|
func (r *albumRepository) purgeEmpty() error {
|
||||||
del := Delete(r.tableName).Where("id not in (select distinct(album_id) from media_file)")
|
del := Delete(r.tableName).Where("id not in (select distinct(album_id) from media_file)")
|
||||||
c, err := r.executeSQL(del)
|
c, err := r.executeSQL(del)
|
||||||
|
@ -4,7 +4,6 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"mime"
|
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path"
|
"path"
|
||||||
@ -16,6 +15,7 @@ import (
|
|||||||
|
|
||||||
"github.com/deluan/navidrome/conf"
|
"github.com/deluan/navidrome/conf"
|
||||||
"github.com/deluan/navidrome/log"
|
"github.com/deluan/navidrome/log"
|
||||||
|
"github.com/deluan/navidrome/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Metadata struct {
|
type Metadata struct {
|
||||||
@ -66,8 +66,7 @@ func LoadAllAudioFiles(dirPath string) (map[string]os.FileInfo, error) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
filePath := filepath.Join(dirPath, f.Name())
|
filePath := filepath.Join(dirPath, f.Name())
|
||||||
extension := path.Ext(filePath)
|
if !utils.IsAudioFile(filePath) {
|
||||||
if !isAudioFile(extension) {
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
fi, err := os.Stat(filePath)
|
fi, err := os.Stat(filePath)
|
||||||
@ -159,11 +158,6 @@ func extractMetadata(filePath, info string) (*Metadata, error) {
|
|||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func isAudioFile(extension string) bool {
|
|
||||||
typ := mime.TypeByExtension(extension)
|
|
||||||
return strings.HasPrefix(typ, "audio/")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Metadata) parseInfo(info string) {
|
func (m *Metadata) parseInfo(info string) {
|
||||||
reader := strings.NewReader(info)
|
reader := strings.NewReader(info)
|
||||||
scanner := bufio.NewScanner(reader)
|
scanner := bufio.NewScanner(reader)
|
||||||
|
17
utils/files.go
Normal file
17
utils/files.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"mime"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func IsAudioFile(filePath string) bool {
|
||||||
|
extension := filepath.Ext(filePath)
|
||||||
|
return strings.HasPrefix(mime.TypeByExtension(extension), "audio/")
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsImageFile(filePath string) bool {
|
||||||
|
extension := filepath.Ext(filePath)
|
||||||
|
return strings.HasPrefix(mime.TypeByExtension(extension), "image/")
|
||||||
|
}
|
38
utils/files_test.go
Normal file
38
utils/files_test.go
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
. "github.com/onsi/ginkgo"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = Describe("Files", func() {
|
||||||
|
Describe("IsAudioFile", func() {
|
||||||
|
It("returns true for a MP3 file", func() {
|
||||||
|
Expect(IsAudioFile(filepath.Join("path", "to", "test.mp3"))).To(BeTrue())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("returns true for a FLAC file", func() {
|
||||||
|
Expect(IsAudioFile("test.flac")).To(BeTrue())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("returns false for a non-audio file", func() {
|
||||||
|
Expect(IsAudioFile("test.jpg")).To(BeFalse())
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("IsImageFile", func() {
|
||||||
|
It("returns true for a PNG file", func() {
|
||||||
|
Expect(IsImageFile(filepath.Join("path", "to", "test.png"))).To(BeTrue())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("returns true for a JPEG file", func() {
|
||||||
|
Expect(IsImageFile("test.JPEG")).To(BeTrue())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("returns false for a non-image file", func() {
|
||||||
|
Expect(IsImageFile("test.mp3")).To(BeFalse())
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
Loading…
x
Reference in New Issue
Block a user