PiwigoDirectoryUploader/internal/pkg/localFileStructure/filesystemScanner.go

74 lines
1.4 KiB
Go
Raw Normal View History

2019-02-23 00:58:32 +01:00
package localFileStructure
import (
2019-02-25 23:58:44 +01:00
"fmt"
"github.com/sirupsen/logrus"
2019-02-23 00:58:32 +01:00
"os"
"path/filepath"
"strings"
"time"
2019-02-23 00:58:32 +01:00
)
type FilesystemNode struct {
Key string
Path string
Name string
IsDir bool
ModTime time.Time
}
func (n *FilesystemNode) String() string {
return fmt.Sprintf("FilesystemNode: %s", n.Path)
}
func ScanLocalFileStructure(path string) (map[string]*FilesystemNode, error) {
2019-02-25 23:58:44 +01:00
fullPathRoot, err := filepath.Abs(path)
if err != nil {
return nil, err
}
2019-02-25 23:58:44 +01:00
logrus.Infof("Scanning %s for images...", fullPathRoot)
2019-02-25 23:58:44 +01:00
fileMap := make(map[string]*FilesystemNode)
2019-02-26 22:50:33 +01:00
fullPathReplace := fmt.Sprintf("%s%c", fullPathRoot, os.PathSeparator)
numberOfDirectories := 0
numberOfImages := 0
2019-02-23 00:58:32 +01:00
err = filepath.Walk(fullPathRoot, func(path string, info os.FileInfo, err error) error {
if fullPathRoot == path {
2019-02-23 00:58:32 +01:00
return nil
}
2019-02-28 22:30:58 +01:00
extension := strings.ToLower(filepath.Ext(path))
2019-03-01 21:51:30 +01:00
if extension != ".jpg" && extension != ".png" && !info.IsDir() {
2019-02-28 22:30:58 +01:00
return nil
}
2019-02-23 00:58:32 +01:00
key := strings.Replace(path, fullPathReplace, "", 1)
fileMap[path] = &FilesystemNode{
Key: key,
Path: path,
Name: info.Name(),
IsDir: info.IsDir(),
ModTime: info.ModTime(),
2019-02-23 00:58:32 +01:00
}
if info.IsDir() {
numberOfDirectories += 1
} else {
numberOfImages += 1
}
2019-02-23 22:02:12 +01:00
return nil
2019-02-23 00:58:32 +01:00
})
if err != nil {
2019-02-24 21:38:28 +01:00
return nil, err
2019-02-23 00:58:32 +01:00
}
logrus.Infof("Found %d directories and %d images on the local filesystem", numberOfDirectories, numberOfImages)
2019-02-24 21:38:28 +01:00
return fileMap, nil
2019-02-23 00:58:32 +01:00
}