feat(files): sync Source panel browser with chosen save directory
This commit is contained in:
@@ -88,7 +88,9 @@ Rectangle {
|
|||||||
id: saveDirDialog
|
id: saveDirDialog
|
||||||
title: "Choose a folder to save Data"
|
title: "Choose a folder to save Data"
|
||||||
onAccepted: {
|
onAccepted: {
|
||||||
deviceController.setSaveDataDir(root.cleanFolderUrl(selectedFolder))
|
var dir = root.cleanFolderUrl(selectedFolder)
|
||||||
|
deviceController.setSaveDataDir(dir)
|
||||||
|
file_browser.setCurrentDirectory(dir)
|
||||||
root._doDetect()
|
root._doDetect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,7 +122,9 @@ ColumnLayout {
|
|||||||
id: saveDirDialog
|
id: saveDirDialog
|
||||||
title: "Choose a folder to save."
|
title: "Choose a folder to save."
|
||||||
onAccepted: {
|
onAccepted: {
|
||||||
deviceController.setSaveDataDir(root.cleanFolderUrl(selectedFolder));
|
var dir = root.cleanFolderUrl(selectedFolder);
|
||||||
|
deviceController.setSaveDataDir(dir);
|
||||||
|
file_browser.setCurrentDirectory(dir);
|
||||||
root.parseAndSavePendingRead();
|
root.parseAndSavePendingRead();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -132,7 +134,11 @@ ColumnLayout {
|
|||||||
FolderDialog {
|
FolderDialog {
|
||||||
id: dirOnlyDialog
|
id: dirOnlyDialog
|
||||||
title: "Choose a folder to save Data"
|
title: "Choose a folder to save Data"
|
||||||
onAccepted: deviceController.setSaveDataDir(root.cleanFolderUrl(selectedFolder))
|
onAccepted: {
|
||||||
|
var dir = root.cleanFolderUrl(selectedFolder);
|
||||||
|
deviceController.setSaveDataDir(dir);
|
||||||
|
file_browser.setCurrentDirectory(dir);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Post-read metadata editor (C# parity: EditCSVMetadataDialog after read).
|
// Post-read metadata editor (C# parity: EditCSVMetadataDialog after read).
|
||||||
|
|||||||
@@ -74,6 +74,9 @@ def main() -> int:
|
|||||||
device_controller = DeviceController(raw_settings, data_dir)
|
device_controller = DeviceController(raw_settings, data_dir)
|
||||||
engine.rootContext().setContextProperty("deviceController", device_controller)
|
engine.rootContext().setContextProperty("deviceController", device_controller)
|
||||||
|
|
||||||
|
# Source panel browses the same folder recordings/reads are saved to.
|
||||||
|
select_file_dialog_model.setCurrentDirectory(str(device_controller.saveDataDir))
|
||||||
|
|
||||||
# ===== License Model (About dialog grid, replay trial) =====
|
# ===== License Model (About dialog grid, replay trial) =====
|
||||||
license_model = LicenseModel(data_dir)
|
license_model = LicenseModel(data_dir)
|
||||||
engine.rootContext().setContextProperty("licenseModel", license_model)
|
engine.rootContext().setContextProperty("licenseModel", license_model)
|
||||||
|
|||||||
@@ -37,6 +37,16 @@ class FileBrowser(QObject):
|
|||||||
return str(self._current_directory)
|
return str(self._current_directory)
|
||||||
|
|
||||||
# ===== Directory Selection =====
|
# ===== Directory Selection =====
|
||||||
|
@Slot(str)
|
||||||
|
def setCurrentDirectory(self, path: str) -> None:
|
||||||
|
"""Point the browser at `path` without opening a native dialog.
|
||||||
|
|
||||||
|
Used to keep this directory in sync with DeviceController.saveDataDir
|
||||||
|
when the user picks a save folder elsewhere in the app.
|
||||||
|
"""
|
||||||
|
self._set_current_directory(Path(path))
|
||||||
|
self._refresh_files(show_empty_message=False)
|
||||||
|
|
||||||
@Slot()
|
@Slot()
|
||||||
def chooseDirectory(self) -> None:
|
def chooseDirectory(self) -> None:
|
||||||
selected_dir = QFileDialog.getExistingDirectory(
|
selected_dir = QFileDialog.getExistingDirectory(
|
||||||
|
|||||||
@@ -28,3 +28,16 @@ def test_recorded_live_file_flagged_as_recording(qapp, tmp_path):
|
|||||||
files_by_name = {Path(row["fileName"]).name: row for row in browser.files}
|
files_by_name = {Path(row["fileName"]).name: row for row in browser.files}
|
||||||
assert files_by_name["live_P00001_20260706_143022.csv"]["isRecording"] is True
|
assert files_by_name["live_P00001_20260706_143022.csv"]["isRecording"] is True
|
||||||
assert files_by_name["P00002-20260706_143500.csv"]["isRecording"] is False
|
assert files_by_name["P00002-20260706_143500.csv"]["isRecording"] is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_set_current_directory_updates_dir_and_refreshes(qapp, tmp_path):
|
||||||
|
"""setCurrentDirectory (no native dialog) is how the Status tab's save-dir
|
||||||
|
picker keeps the Source panel pointed at the same folder."""
|
||||||
|
_write_csv(tmp_path / "P00003-20260706_143500.csv")
|
||||||
|
|
||||||
|
browser = FileBrowser()
|
||||||
|
browser.setCurrentDirectory(str(tmp_path))
|
||||||
|
|
||||||
|
assert browser.currentDirectory == str(tmp_path)
|
||||||
|
assert len(browser.files) == 1
|
||||||
|
assert Path(browser.files[0]["fileName"]).name == "P00003-20260706_143500.csv"
|
||||||
|
|||||||
Reference in New Issue
Block a user