From b8a5deeaaeb17e639cb89a66fac1b5990b3480d3 Mon Sep 17 00:00:00 2001 From: Crystalwarrior Date: Thu, 9 Jun 2022 04:19:57 +0300 Subject: [PATCH] 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(-) diff --git a/src/aooptionsdialog.cpp b/src/aooptionsdialog.cpp index e2ae750..373473c 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 76d16af..3b38b41 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();