Skip to content

Commit 60e5b6d

Browse files
committed
Limit recursive search for calibration files to one folder from the root
1 parent 7a63fea commit 60e5b6d

File tree

3 files changed

+39
-18
lines changed

3 files changed

+39
-18
lines changed

Source/UI/NeuropixelsV1Interface.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -892,21 +892,17 @@ std::string NeuropixelsV1Interface::searchDirectoryForCalibrationFile(std::strin
892892
if (folder == "" || sn == 0)
893893
return "";
894894

895-
File directory = File(folder);
895+
File rootDirectory = File(folder);
896896

897-
if (!directory.isDirectory())
897+
if (!rootDirectory.isDirectory())
898898
{
899899
Onix1::showWarningMessageBoxAsync("Invalid Directory", "The path given for the calibration files directory is invalid. Please try setting it again.");
900900
return "";
901901
}
902902

903-
std::vector<File> calibrationFiles;
903+
static constexpr int recursiveLevels = 1;
904904

905-
for (DirectoryEntry entry : RangedDirectoryIterator(directory, true, filename, File::findFiles, File::FollowSymlinks::no))
906-
{
907-
calibrationFiles.emplace_back(entry.getFile());
908-
LOGD("Discovered file: ", entry.getFile().getFullPathName());
909-
}
905+
auto calibrationFiles = SettingsInterface::searchDirectoryForFile(rootDirectory, filename, recursiveLevels);
910906

911907
if (calibrationFiles.size() != 1)
912908
{

Source/UI/NeuropixelsV2eProbeInterface.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -559,27 +559,23 @@ void NeuropixelsV2eProbeInterface::textEditorTextChanged(TextEditor& editor)
559559
}
560560
}
561561

562-
std::string NeuropixelsV2eProbeInterface::searchDirectoryForCalibrationFile(std::string folder, uint64_t sn)
562+
std::string NeuropixelsV2eProbeInterface::searchDirectoryForCalibrationFile(std::string directory, uint64_t sn)
563563
{
564-
if (folder == "" || sn == 0)
564+
if (directory == "" || sn == 0)
565565
return "";
566566

567-
File directory = File(folder);
567+
auto rootDirectory = File(directory);
568568

569-
if (!directory.isDirectory())
569+
if (!rootDirectory.isDirectory())
570570
{
571571
Onix1::showWarningMessageBoxAsync("Invalid Directory", "The path given for the calibration files directory is invalid. Please try setting it again.");
572572
return "";
573573
}
574574

575-
std::vector<File> calibrationFiles;
576575
std::string filename = std::to_string(sn) + GainCalibrationFilename;
576+
static constexpr int recursiveLevels = 1;
577577

578-
for (DirectoryEntry entry : RangedDirectoryIterator(directory, true, filename, File::findFiles, File::FollowSymlinks::no))
579-
{
580-
calibrationFiles.emplace_back(entry.getFile());
581-
LOGD("Discovered file: ", entry.getFile().getFullPathName());
582-
}
578+
auto calibrationFiles = SettingsInterface::searchDirectoryForFile(rootDirectory, filename, recursiveLevels);
583579

584580
if (calibrationFiles.size() != 1)
585581
{

Source/UI/SettingsInterface.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,5 +150,34 @@ namespace OnixSourcePlugin
150150

151151
return rootElement.release();
152152
}
153+
154+
// Given a File object defining the path to a directory, a filename to search for, and (optionally) the number of recursive levels to
155+
// iterate through, return a list of all files that match the given filename in the directory (or directories for recursive searches)
156+
static std::vector<File> searchDirectoryForFile(File directory, std::string filename, int recursiveLevels = 0)
157+
{
158+
std::vector<File> matchingFiles;
159+
160+
if (!directory.isDirectory())
161+
return matchingFiles;
162+
163+
if (recursiveLevels > 0)
164+
{
165+
for (DirectoryEntry entry : RangedDirectoryIterator(directory, false, "*", File::findDirectories, File::FollowSymlinks::no))
166+
{
167+
auto files = searchDirectoryForFile(entry.getFile(), filename, recursiveLevels - 1);
168+
169+
if (files.size() > 0)
170+
matchingFiles.insert(matchingFiles.end(), files.begin(), files.end());
171+
}
172+
}
173+
174+
for (DirectoryEntry entry : RangedDirectoryIterator(directory, false, filename, File::findFiles, File::FollowSymlinks::no))
175+
{
176+
matchingFiles.emplace_back(entry.getFile());
177+
LOGD("Discovered file: ", entry.getFile().getFullPathName());
178+
}
179+
180+
return matchingFiles;
181+
}
153182
};
154183
}

0 commit comments

Comments
 (0)