diff --git a/internal/model/model.go b/internal/model/model.go index 9721f8ccc..43ecc46b8 100644 --- a/internal/model/model.go +++ b/internal/model/model.go @@ -1146,6 +1146,7 @@ func (m *Model) ScanFolder(folder string) error { } func (m *Model) ScanFolderSub(folder, sub string) error { + sub = osutil.NativeFilename(sub) if p := filepath.Clean(filepath.Join(folder, sub)); !strings.HasPrefix(p, folder) { return errors.New("invalid subpath") } @@ -1162,6 +1163,18 @@ func (m *Model) ScanFolderSub(folder, sub string) error { _ = ignores.Load(filepath.Join(folderCfg.Path, ".stignore")) // Ignore error, there might not be an .stignore + // Required to make sure that we start indexing at a directory we're already + // aware off. + for sub != "" { + if _, ok = fs.Get(protocol.LocalDeviceID, sub); ok { + break + } + sub = filepath.Dir(sub) + if sub == "." || sub == string(filepath.Separator) { + sub = "" + } + } + w := &scanner.Walker{ Dir: folderCfg.Path, Sub: sub,