From b8a5deeaaeb17e639cb89a66fac1b5990b3480d3 Mon Sep 17 00:00:00 2001 From: Crystalwarrior Date: Thu, 9 Jun 2022 04:19:57 +0300 Subject: Fix relative paths for evidence image and mounted base folders (#757) * Fix adding mounted folders not using relative path if the chosen folder is inside the application folder Fix evidence relative pathing not being aware of mounted base folders, and fix default evidence folder being in base/evidence rather than first found "evidence" folder * more braces Co-authored-by: stonedDiscord --- src/aooptionsdialog.cpp | 12 +++++++++--- src/evidence.cpp | 11 ++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/aooptionsdialog.cpp b/src/aooptionsdialog.cpp index e2ae7506..373473c1 100644 --- a/src/aooptionsdialog.cpp +++ b/src/aooptionsdialog.cpp @@ -971,12 +971,18 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) ui_mount_add->setSizePolicy(stretch_btns); ui_mount_buttons_layout->addWidget(ui_mount_add, 0, 0, 1, 1); connect(ui_mount_add, &QPushButton::clicked, this, [this] { - QString dir = QFileDialog::getExistingDirectory(this, tr("Select a base folder"), + QString path = QFileDialog::getExistingDirectory(this, tr("Select a base folder"), QApplication::applicationDirPath(), QFileDialog::ShowDirsOnly); - if (dir.isEmpty()) + if (path.isEmpty()) { return; - QListWidgetItem *dir_item = new QListWidgetItem(dir); + } + QDir dir(QApplication::applicationDirPath()); + QString relative = dir.relativeFilePath(path); + if (!relative.contains("../")) { + path = relative; + } + QListWidgetItem *dir_item = new QListWidgetItem(path); ui_mount_list->addItem(dir_item); ui_mount_list->setCurrentItem(dir_item); diff --git a/src/evidence.cpp b/src/evidence.cpp index 76d16aff..3b38b414 100644 --- a/src/evidence.cpp +++ b/src/evidence.cpp @@ -397,7 +397,7 @@ void Courtroom::on_evidence_image_name_edited() void Courtroom::on_evidence_image_button_clicked() { - QDir dir(ao_app->get_base_path() + "evidence"); + QDir dir(ao_app->get_real_path(ao_app->get_evidence_path(""))); QFileDialog dialog(this); dialog.setFileMode(QFileDialog::ExistingFile); dialog.setNameFilter(tr("Images (*.png)")); @@ -413,6 +413,15 @@ void Courtroom::on_evidence_image_button_clicked() return; QString filename = filenames.at(0); + QStringList bases = ao_app->get_mount_paths(); + bases.prepend(ao_app->get_base_path()); + for (const QString &base : bases) { + QDir baseDir(base); + if (filename.startsWith(baseDir.absolutePath())) { + dir.setPath(baseDir.absolutePath() + "/evidence"); + break; + } + } filename = dir.relativeFilePath(filename); ui_evidence_image_name->setText(filename); on_evidence_image_name_edited(); -- cgit