From fd4dd8f98b1a595a471246d5076e8d765c265d85 Mon Sep 17 00:00:00 2001 From: Le Duy Thuc Date: Wed, 11 Nov 2026 10:25:34 +0700 Subject: [PATCH 1/2] Fix leading '/' dropped from paths in linux stripping the `file:///` by hand remove the root `/` on Linux. Using QUrl helper fixs it. --- qml/PageMain.qml | 8 ++++---- src/QtApp/UIController.cpp | 15 +++++++++++++-- src/QtApp/UIController.hpp | 4 ++++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/qml/PageMain.qml b/qml/PageMain.qml index 967d9e6..fda82fc 100644 --- a/qml/PageMain.qml +++ b/qml/PageMain.qml @@ -51,7 +51,7 @@ WidgetScrollable { Button { text: qsTr("Browse...") onClicked: { - folderDialogInputPath.currentFolder = "file:///" + folderInputEdit.text; + folderDialogInputPath.currentFolder = appui.pathToUrl(folderInputEdit.text); folderDialogInputPath.open(); } } @@ -59,7 +59,7 @@ WidgetScrollable { FolderDialog { id: folderDialogInputPath - onAccepted: folderInputEdit.setTextValue(folderDialogInputPath.selectedFolder.toString().substring(8)) + onAccepted: folderInputEdit.setTextValue(appui.urlToPath(folderDialogInputPath.selectedFolder)) } } @@ -79,7 +79,7 @@ WidgetScrollable { Button { text: qsTr("Browse...") onClicked: { - folderDialogOutputPath.currentFolder = "file:///" + folderOutputEdit.text; + folderDialogOutputPath.currentFolder = appui.pathToUrl(folderOutputEdit.text); folderDialogOutputPath.open(); } } @@ -87,7 +87,7 @@ WidgetScrollable { FolderDialog { id: folderDialogOutputPath - onAccepted: folderOutputEdit.setTextValue(folderDialogOutputPath.selectedFolder.toString().substring(8)) + onAccepted: folderOutputEdit.setTextValue(appui.urlToPath(folderDialogOutputPath.selectedFolder)) } } diff --git a/src/QtApp/UIController.cpp b/src/QtApp/UIController.cpp index e2c8365..df64e89 100644 --- a/src/QtApp/UIController.cpp +++ b/src/QtApp/UIController.cpp @@ -21,6 +21,7 @@ #include #include #include +#include namespace D2ModGen { @@ -125,7 +126,7 @@ void UIController::generate() void UIController::saveConfig(QString filename) { - filename.replace("file:///", ""); + filename = QUrl(filename).toLocalFile(); if (m_configHandler.saveConfig(filename.toStdString())) { emit statusUpdate(tr("Saved.")); } else { @@ -135,7 +136,7 @@ void UIController::saveConfig(QString filename) void UIController::loadConfig(QString filename) { - filename.replace("file:///", ""); + filename = QUrl(filename).toLocalFile(); const auto result = m_configHandler.loadConfig(filename.toStdString()); if (result) { @@ -217,6 +218,16 @@ void UIController::browseToAppSettings() QProcess::startDetached("explorer.exe", QStringList() << QDir::toNativeSeparators(QString::fromStdString(path2string(m_configHandler.m_appData)))); } +QString UIController::urlToPath(const QUrl& url) const +{ + return url.toLocalFile(); +} + +QUrl UIController::pathToUrl(const QString& path) const +{ + return QUrl::fromLocalFile(path); +} + void UIController::newSeed() { m_configHandler.m_config.m_main.m_seed = 0; diff --git a/src/QtApp/UIController.hpp b/src/QtApp/UIController.hpp index e55093a..1dac6ba 100644 --- a/src/QtApp/UIController.hpp +++ b/src/QtApp/UIController.hpp @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -62,6 +63,9 @@ class UIController : public QObject { Q_INVOKABLE void copySaves(); Q_INVOKABLE QString getSaveFolder(); + Q_INVOKABLE QString urlToPath(const QUrl& url) const; + Q_INVOKABLE QUrl pathToUrl(const QString& path) const; + void sendDataChange(); signals: From ea7fc91e44dee0699838e1f5caf7dbf54f40d9d1 Mon Sep 17 00:00:00 2001 From: Le Duy Thuc Date: Wed, 11 Nov 2026 10:36:58 +0700 Subject: [PATCH 2/2] fix lint --- src/QtApp/UIController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/QtApp/UIController.cpp b/src/QtApp/UIController.cpp index df64e89..b2e6cb6 100644 --- a/src/QtApp/UIController.cpp +++ b/src/QtApp/UIController.cpp @@ -136,7 +136,7 @@ void UIController::saveConfig(QString filename) void UIController::loadConfig(QString filename) { - filename = QUrl(filename).toLocalFile(); + filename = QUrl(filename).toLocalFile(); const auto result = m_configHandler.loadConfig(filename.toStdString()); if (result) {