Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 55 additions & 34 deletions src/editor/editwrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1022,44 +1022,60 @@ void EditWrapper::handleFileLoadFinished(const QByteArray &encode, const QByteAr

m_pTextEdit->setTextFinished();

QStringList temFileList = Settings::instance()->settings->option("advance.editor.browsing_history_temfile")->value().toStringList();

for (int var = 0; var < temFileList.count(); ++var) {
QJsonParseError jsonError;
// 转化为 JSON 文档
QJsonDocument doucment = QJsonDocument::fromJson(temFileList.value(var).toUtf8(), &jsonError);
// 解析未发生错误
if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) {
qDebug() << "EditWrapper handleFileLoadFinished, doucment is not null";
if (doucment.isObject()) {
qDebug() << "EditWrapper handleFileLoadFinished, doucment is object";
// JSON 文档为对象
QJsonObject object = doucment.object(); // 转化为对象

if (object.contains("localPath") || object.contains("temFilePath")) {
qDebug() << "EditWrapper handleFileLoadFinished, doucment contains localPath or temFilePath";
// 包含指定的 key
QJsonValue localPathValue = object.value("localPath"); // 获取指定 key 对应的 value
QJsonValue temFilePathValue = object.value("temFilePath"); // 获取指定 key 对应的 value

if (localPathValue.toString() == m_pTextEdit->getFilePath()
|| temFilePathValue.toString() == m_pTextEdit->getFilePath()) {
qDebug() << "EditWrapper handleFileLoadFinished, localPathValue or temFilePathValue is equal to m_pTextEdit->getFilePath()";
QJsonValue value = object.value("cursorPosition"); // 获取指定 key 对应的 value

if (value.isString()) {
qDebug() << "EditWrapper handleFileLoadFinished, value is string";
QTextCursor cursor = m_pTextEdit->textCursor();
cursor.setPosition(value.toString().toInt());
m_pTextEdit->setTextCursor(cursor);
OnUpdateHighlighter();
break;
// 仅在文件加载成功时恢复光标位置
if (!error) {
// 恢复光标位置:优先使用预设值(O(1)),否则遍历历史记录(O(N))
bool cursorRestored = false;
if (m_nRestoreCursorPosition >= 0) {
QTextCursor cursor = m_pTextEdit->textCursor();
cursor.setPosition(m_nRestoreCursorPosition);
m_pTextEdit->setTextCursor(cursor);
OnUpdateHighlighter();
m_nRestoreCursorPosition = -1; // 重置,仅使用一次
cursorRestored = true;
}

if (!cursorRestored) {
QStringList temFileList = Settings::instance()->settings->option("advance.editor.browsing_history_temfile")->value().toStringList();

for (int var = 0; var < temFileList.count(); ++var) {
QJsonParseError jsonError;
// 转化为 JSON 文档
QJsonDocument doucment = QJsonDocument::fromJson(temFileList.value(var).toUtf8(), &jsonError);
// 解析未发生错误
if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) {
qDebug() << "EditWrapper handleFileLoadFinished, doucment is not null";
if (doucment.isObject()) {
qDebug() << "EditWrapper handleFileLoadFinished, doucment is object";
// JSON 文档为对象
QJsonObject object = doucment.object(); // 转化为对象

if (object.contains("localPath") || object.contains("temFilePath")) {
qDebug() << "EditWrapper handleFileLoadFinished, doucment contains localPath or temFilePath";
// 包含指定的 key
QJsonValue localPathValue = object.value("localPath"); // 获取指定 key 对应的 value
QJsonValue temFilePathValue = object.value("temFilePath"); // 获取指定 key 对应的 value

if (localPathValue.toString() == m_pTextEdit->getFilePath()
|| temFilePathValue.toString() == m_pTextEdit->getFilePath()) {
qDebug() << "EditWrapper handleFileLoadFinished, localPathValue or temFilePathValue is equal to m_pTextEdit->getFilePath()";
QJsonValue value = object.value("cursorPosition"); // 获取指定 key 对应的 value

if (value.isString()) {
qDebug() << "EditWrapper handleFileLoadFinished, value is string";
QTextCursor cursor = m_pTextEdit->textCursor();
cursor.setPosition(value.toString().toInt());
m_pTextEdit->setTextCursor(cursor);
OnUpdateHighlighter();
break;
}
}
}
}
}
}
}
}
} // end if (!cursorRestored)
} // end if (!error)

//备份显示修改状态
if (m_bIsTemFile) {
Expand Down Expand Up @@ -1242,6 +1258,11 @@ void EditWrapper::setTemFile(bool value)
qDebug() << "EditWrapper setTemFile, exit";
}

void EditWrapper::setRestoreCursorPosition(int position)
{
m_nRestoreCursorPosition = position;
}

void EditWrapper::updateHighlighterAll()
{
qDebug() << "EditWrapper updateHighlighterAll";
Expand Down
5 changes: 4 additions & 1 deletion src/editor/editwrapper.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2017 - 2023 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2017-2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

Expand Down Expand Up @@ -145,6 +145,8 @@ public slots:
void OnUpdateHighlighter();
//set the value of m_bIsTemFile
void setTemFile(bool value);
// 设置恢复光标位置(用于懒加载恢复,避免 O(N²) 扫描)
void setRestoreCursorPosition(int position);

private:
//第一次打开文件编码
Expand Down Expand Up @@ -180,6 +182,7 @@ public slots:

bool m_bAsyncReadFileFinished = false;
bool m_bHasPreProcess = false; // 预处理标识
int m_nRestoreCursorPosition = -1; // 恢复光标位置提示(-1 表示不指定)
};

#endif
3 changes: 2 additions & 1 deletion src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2011-2024 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2011-2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

Expand Down Expand Up @@ -99,6 +99,7 @@ int main(int argc, char *argv[])
#endif

StartManager *startManager = StartManager::instance();

//埋点记录启动数据
QJsonObject objStartEvent{
{"tid", Eventlogutils::StartUp},
Expand Down
Loading
Loading