adds support for file exteions and directory ignores to the local scanner
still some todos left
This commit is contained in:
parent
3a1ba53162
commit
e07a12409b
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2019 Philipp Haefelfinger (http://www.haefelfinger.ch/). All Rights Reserved.
|
* Copyright (C) 2020 Philipp Haefelfinger (http://www.haefelfinger.ch/). All Rights Reserved.
|
||||||
* This application is licensed under GPLv2. See the LICENSE file in the root directory of the project.
|
* This application is licensed under GPLv2. See the LICENSE file in the root directory of the project.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -36,7 +36,12 @@ func Run() {
|
|||||||
logErrorAndExit(err, 2)
|
logErrorAndExit(err, 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
filesystemNodes, err := localFileStructure.ScanLocalFileStructure(context.localRootPath)
|
//TODO: make params here as flags
|
||||||
|
supportedExtensions := make([]string, 0)
|
||||||
|
supportedExtensions = append(supportedExtensions, "jpg")
|
||||||
|
supportedExtensions = append(supportedExtensions, "png")
|
||||||
|
|
||||||
|
filesystemNodes, err := localFileStructure.ScanLocalFileStructure(context.localRootPath, supportedExtensions, make([]string,0))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logErrorAndExit(err, 3)
|
logErrorAndExit(err, 3)
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2019 Philipp Haefelfinger (http://www.haefelfinger.ch/). All Rights Reserved.
|
* Copyright (C) 2020 Philipp Haefelfinger (http://www.haefelfinger.ch/). All Rights Reserved.
|
||||||
* This application is licensed under GPLv2. See the LICENSE file in the root directory of the project.
|
* This application is licensed under GPLv2. See the LICENSE file in the root directory of the project.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -8,20 +8,67 @@ package localFileStructure
|
|||||||
import "testing"
|
import "testing"
|
||||||
|
|
||||||
func Test_ScanLocalFileStructure_should_find_testfile(t *testing.T) {
|
func Test_ScanLocalFileStructure_should_find_testfile(t *testing.T) {
|
||||||
|
supportedExtensions := make([]string, 0)
|
||||||
|
supportedExtensions = append(supportedExtensions, "jpg")
|
||||||
|
|
||||||
images, err := ScanLocalFileStructure("../../../test/")
|
images, err := ScanLocalFileStructure("../../../test/", supportedExtensions, make([]string, 0))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(images) != 2 { // 1x folder, 1x image
|
||||||
|
t.Error("Did not find expected testfiles. Expected at least one!")
|
||||||
|
}
|
||||||
|
|
||||||
|
containsTestImage := false
|
||||||
|
for _, img := range images {
|
||||||
|
if img.Name == "testimage.jpg" {
|
||||||
|
containsTestImage = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !containsTestImage {
|
||||||
|
t.Errorf("Did not find the expected testimage.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_ScanLocalFileStructure_should_ignore_test_directory(t *testing.T) {
|
||||||
|
supportedExtensions := make([]string, 0)
|
||||||
|
supportedExtensions = append(supportedExtensions, "jpg")
|
||||||
|
|
||||||
|
ignores := make([]string, 0)
|
||||||
|
ignores = append(ignores, "images")
|
||||||
|
images, err := ScanLocalFileStructure("../../../test/", supportedExtensions, ignores)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(images) != 0 {
|
||||||
|
t.Error("Did find expected testfiles. Expected no files as test folder is excluded!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_ScanLocalFileStructure_should_not_find_jpg_when_only_png_supported(t *testing.T) {
|
||||||
|
supportedExtensions := make([]string, 0)
|
||||||
|
supportedExtensions = append(supportedExtensions, "png")
|
||||||
|
|
||||||
|
images, err := ScanLocalFileStructure("../../../test/", supportedExtensions, make([]string, 0))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(images) != 1 {
|
if len(images) != 1 {
|
||||||
t.Error("Did not find expected testfiles. Expected at least one!")
|
t.Error("Did find expected testfiles. Expected no files as extension is not supported!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
containsTestImage := false
|
||||||
for _, img := range images {
|
for _, img := range images {
|
||||||
if img.Name != "testimage.jpg" {
|
if img.Name == "testimage.jpg" {
|
||||||
t.Errorf("Did not find the expected testimage.")
|
containsTestImage = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if containsTestImage {
|
||||||
|
t.Errorf("Did find the testimage. This should not happen as png is searched but jpg found")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2019 Philipp Haefelfinger (http://www.haefelfinger.ch/). All Rights Reserved.
|
* Copyright (C) 2020 Philipp Haefelfinger (http://www.haefelfinger.ch/). All Rights Reserved.
|
||||||
* This application is licensed under GPLv2. See the LICENSE file in the root directory of the project.
|
* This application is licensed under GPLv2. See the LICENSE file in the root directory of the project.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -26,12 +26,22 @@ func (n *FilesystemNode) String() string {
|
|||||||
return fmt.Sprintf("FilesystemNode: %s", n.Path)
|
return fmt.Sprintf("FilesystemNode: %s", n.Path)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ScanLocalFileStructure(path string) (map[string]*FilesystemNode, error) {
|
func ScanLocalFileStructure(path string, extensions []string, ignoreFolders []string) (map[string]*FilesystemNode, error) {
|
||||||
fullPathRoot, err := filepath.Abs(path)
|
fullPathRoot, err := filepath.Abs(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ignoredDirectoriesMap := make(map[string]struct{}, len(ignoreFolders))
|
||||||
|
for _, ignoredFolder := range ignoreFolders {
|
||||||
|
ignoredDirectoriesMap[strings.ToLower(ignoredFolder)] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
extensionsMap := make(map[string]struct{}, len(extensions))
|
||||||
|
for _, extension := range extensions {
|
||||||
|
extensionsMap["."+strings.ToLower(extension)] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
logrus.Infof("Scanning %s for images...", fullPathRoot)
|
logrus.Infof("Scanning %s for images...", fullPathRoot)
|
||||||
|
|
||||||
fileMap := make(map[string]*FilesystemNode)
|
fileMap := make(map[string]*FilesystemNode)
|
||||||
@ -49,11 +59,19 @@ func ScanLocalFileStructure(path string) (map[string]*FilesystemNode, error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, FolderIsIgnored := ignoredDirectoriesMap[strings.ToLower(info.Name())]
|
||||||
|
if FolderIsIgnored && info.IsDir() {
|
||||||
|
logrus.Tracef("Skipping ignored directory %s", path)
|
||||||
|
return filepath.SkipDir
|
||||||
|
}
|
||||||
|
|
||||||
extension := strings.ToLower(filepath.Ext(path))
|
extension := strings.ToLower(filepath.Ext(path))
|
||||||
if extension != ".jpg" && extension != ".png" && !info.IsDir() {
|
_, extensionSupported := extensionsMap[extension]
|
||||||
|
if !extensionSupported && !info.IsDir() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: Add code to strip directories at the end of the path (e.g. /rootdir/eventname/png/file.png -> eventname/file.png
|
||||||
key := strings.Replace(path, fullPathReplace, "", 1)
|
key := strings.Replace(path, fullPathReplace, "", 1)
|
||||||
|
|
||||||
fileMap[path] = &FilesystemNode{
|
fileMap[path] = &FilesystemNode{
|
||||||
|
Loading…
Reference in New Issue
Block a user