Merge 5891 via qt_console_history_persist

This commit is contained in:
Luke Dashjr 2025-03-05 03:27:08 +00:00
commit 7663851899
2 changed files with 50 additions and 0 deletions

View File

@ -594,6 +594,41 @@ RPCConsole::RPCConsole(interfaces::Node& node, const PlatformStyle *_platformSty
consoleFontSize = settings.value(fontSizeSettingsKey, QFont().pointSize()).toInt();
clear();
// load history
QMap<size_t, QString> rewrite_replace;
int size = settings.beginReadArray("nRPCConsoleWindowHistory");
history.clear();
for (int i = 0; i < size; ++i) {
settings.setArrayIndex(i);
QString cmd = settings.value("cmd").toString();
QString filtered_cmd;
{
std::string strFilteredCmd, dummy;
if (RPCParseCommandLine(nullptr, dummy, cmd.toStdString(), false, &strFilteredCmd)) {
filtered_cmd = QString::fromStdString(strFilteredCmd);
} else {
// Failed to parse command, so we cannot even filter it for the history
filtered_cmd = cmd;
}
}
if (cmd != filtered_cmd) {
// Overwrite this line, and trigger an immediate rewrite of history to purge it
cmd = QString(cmd.size(), 'x');
rewrite_replace[history.size()] = filtered_cmd;
}
history.append(cmd);
}
historyPtr = history.size();
settings.endArray();
if (!rewrite_replace.empty()) {
WriteCommandHistory();
for (QMapIterator<size_t, QString> i(rewrite_replace); i.hasNext(); ) {
i.next();
history[i.key()] = i.value();
}
WriteCommandHistory();
}
GUIUtil::handleCloseWindowShortcut(this);
QObject::connect(new QShortcut(QKeySequence(QStringLiteral("Ctrl+D")), ui->tab_console), &QShortcut::activated, this, &QWidget::close);
@ -601,6 +636,18 @@ RPCConsole::RPCConsole(interfaces::Node& node, const PlatformStyle *_platformSty
updateWindowTitle();
}
void RPCConsole::WriteCommandHistory()
{
// persist history
QSettings settings;
settings.beginWriteArray("nRPCConsoleWindowHistory");
for (int i = 0; i < history.size(); ++i) {
settings.setArrayIndex(i);
settings.setValue("cmd", history.at(i));
}
settings.endArray();
}
RPCConsole::~RPCConsole()
{
QSettings settings;
@ -619,6 +666,8 @@ RPCConsole::~RPCConsole()
settings.setValue("PeersTabPeerHeaderState", m_peer_widget_header_state);
settings.setValue("PeersTabBanlistHeaderState", m_banlist_widget_header_state);
WriteCommandHistory();
m_node.rpcUnsetTimerInterface(rpcTimerInterface);
delete rpcTimerInterface;
delete ui;

View File

@ -153,6 +153,7 @@ private:
void startExecutor();
void setTrafficGraphRange(int mins);
void WriteCommandHistory();
enum ColumnWidths
{