mirror of
https://github.com/logos-blockchain/logos-blockchain-ui.git
synced 2026-07-08 08:49:35 +00:00
Fix pathing machinery with module flagging
This commit is contained in:
parent
36ab36dcde
commit
330fbaed79
@ -359,12 +359,20 @@ QVariantMap BlockchainBackend::generateConfig(
|
||||
|
||||
QVariantMap normalized;
|
||||
|
||||
QString out = outputPath.trimmed();
|
||||
if (out.isEmpty())
|
||||
out = generatedUserConfigPath();
|
||||
else
|
||||
out = toLocalPath(out);
|
||||
normalized.insert("output", out);
|
||||
// The output path drives persistence routing through the module's single
|
||||
// switch (use_persistence_paths), which routes output + state + storage +
|
||||
// logs under the host-provisioned per-instance dir:
|
||||
// - empty → omit "output"; module writes "<persistence>/user_config.yaml".
|
||||
// - relative → pass it through; module resolves it under <persistence>.
|
||||
// - absolute → write exactly there; no persistence routing.
|
||||
const QString rawOut = outputPath.trimmed();
|
||||
const QString localOut = rawOut.isEmpty() ? QString() : toLocalPath(rawOut);
|
||||
const QString chosenOut = !localOut.isEmpty() ? localOut : rawOut;
|
||||
const bool absoluteOut = !chosenOut.isEmpty() && QDir::isAbsolutePath(chosenOut);
|
||||
if (!rawOut.isEmpty())
|
||||
normalized.insert("output", absoluteOut ? chosenOut : rawOut);
|
||||
if (!absoluteOut)
|
||||
normalized.insert("use_persistence_paths", true);
|
||||
|
||||
if (!initialPeers.isEmpty()) {
|
||||
QVariantList peersList;
|
||||
@ -396,6 +404,8 @@ QVariantMap BlockchainBackend::generateConfig(
|
||||
toLocalPath(deploymentConfigPath.trimmed()));
|
||||
normalized.insert("deployment", deployment);
|
||||
}
|
||||
// An explicit node state dir still wins: the module leaves a pinned path
|
||||
// untouched even when use_persistence_paths routing is on.
|
||||
if (!statePath.trimmed().isEmpty())
|
||||
normalized.insert("state_path", toLocalPath(statePath.trimmed()));
|
||||
|
||||
|
||||
@ -273,13 +273,20 @@ Rectangle {
|
||||
? qsTr("Config generated successfully.")
|
||||
: qsTr("Generate failed: %1").arg(result.error)
|
||||
if (result.success) {
|
||||
root.backend.userConfig = (outputPath !== "")
|
||||
? outputPath : root.backend.generatedUserConfigPath
|
||||
// The module writes the config and returns the
|
||||
// absolute path it used; use that for start().
|
||||
root.backend.userConfig =
|
||||
(result.value !== undefined && result.value !== "")
|
||||
? result.value
|
||||
: (outputPath !== "" ? outputPath : root.backend.generatedUserConfigPath)
|
||||
root.backend.deploymentConfig =
|
||||
(deploymentMode === 1 && deploymentConfigPath !== "")
|
||||
? deploymentConfigPath : ""
|
||||
root.backend.useGeneratedConfig = true
|
||||
_d.currentPage = 1
|
||||
// Finalize: move to the "set path" window, now
|
||||
// showing the resolved config path, ready for
|
||||
// the user to continue and start the node.
|
||||
configChoiceView.showSetConfigPath()
|
||||
}
|
||||
},
|
||||
function(error) {
|
||||
|
||||
@ -25,6 +25,11 @@ ColumnLayout {
|
||||
property int selectedOption: 0
|
||||
}
|
||||
|
||||
// Switch to the "set path to config" sub-view. Used after a successful
|
||||
// generate to land on the resolved-config-path screen, from which the user
|
||||
// continues to start the node.
|
||||
function showSetConfigPath() { d.selectedOption = 2 }
|
||||
|
||||
spacing: Theme.spacing.large
|
||||
|
||||
LogosText {
|
||||
|
||||
@ -7,6 +7,8 @@ import QtCore
|
||||
import Logos.Theme
|
||||
import Logos.Controls
|
||||
|
||||
import "../controls"
|
||||
|
||||
ColumnLayout {
|
||||
id: root
|
||||
|
||||
@ -17,10 +19,9 @@ ColumnLayout {
|
||||
signal generateRequested(string outputPath, var initialPeers, int netPort, int blendPort, string httpAddr, string externalAddress, bool noPublicIpCheck, int deploymentMode, string deploymentConfigPath, string statePath)
|
||||
|
||||
|
||||
Component.onCompleted: {
|
||||
if (outputField.text === "" && root.generatedUserConfigPath !== "")
|
||||
outputField.text = root.generatedUserConfigPath
|
||||
}
|
||||
// Leave the output field empty by default: the module writes the config to
|
||||
// its own host-provisioned writable location and returns that path. A user
|
||||
// can still type/browse an explicit path to override.
|
||||
|
||||
QtObject {
|
||||
id: d
|
||||
@ -64,12 +65,21 @@ ColumnLayout {
|
||||
LogosTextField {
|
||||
id: outputField
|
||||
Layout.fillWidth: true
|
||||
placeholderText: root.generatedUserConfigPath || qsTr("Output config path (e.g. node_config.yaml)")
|
||||
placeholderText: qsTr("Output config path (optional — defaults to module data dir)")
|
||||
}
|
||||
LogosButton {
|
||||
text: qsTr("Browse…")
|
||||
onClicked: outputFolderDialog.open()
|
||||
}
|
||||
InfoButton {
|
||||
text: qsTr("Leave empty (or use a relative path) to let the module store the "
|
||||
+ "config and node state in its own per-instance data directory — "
|
||||
+ "the safe default.\n\n"
|
||||
+ "Enter a full absolute path only to write the config there yourself. "
|
||||
+ "Note: depending on where the app runs (e.g. embedded in Basecamp, "
|
||||
+ "sandboxed, or read-only locations) an arbitrary absolute path may not "
|
||||
+ "be writable and starting the node can fail.")
|
||||
}
|
||||
}
|
||||
|
||||
// Initial peers (multi-line)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user