Git: кэш+пагинация истории, diff в потоке, точечный коммит, честное удаление
- История: кэш по vault|rel|headOid, fileHistory(vault,file,limit), в диалоге Показать ещё по 60 с сохранением выбора - Diff считается в QtConcurrent-пуле (parseBlocksWithDiffAsync+blocksReady, stale-guard), спиннер busy; MarkdownView.diffApplied - commitFile точечно вместо всего хранилища (общий commitFromIndex), autoCommit честный; fileExistedAt + willDelete в подтверждении - DocumentManager.readTextFile общий (GitManager.workdirContent через него); fileGitStatus через relativePath - Тесты: пагинация/кэш, existed, commitFile не трогает B, async==sync
This commit is contained in:
@@ -36,10 +36,22 @@ public:
|
||||
const QString &vaultRoot,
|
||||
const QString &fileDir);
|
||||
|
||||
// То же, но в рабочем потоке (UI не виснет на больших файлах).
|
||||
// Возвращает requestId; результат приходит сигналом blocksReady (устаревшие id игнорить).
|
||||
// Регистрация кодов для копирования выполняется в главном потоке при приёме.
|
||||
Q_INVOKABLE int parseBlocksWithDiffAsync(const QString &oldMd,
|
||||
const QString &newMd,
|
||||
const QString &vaultRoot,
|
||||
const QString &fileDir);
|
||||
|
||||
Q_INVOKABLE QString getCodeBlock(const QString &id) const;
|
||||
Q_INVOKABLE void copyToClipboard(const QString &text) const;
|
||||
Q_INVOKABLE QString highlightedCode(const QString &code, const QString &language) const;
|
||||
|
||||
signals:
|
||||
void blocksReady(int requestId, const QVariantList &blocks);
|
||||
|
||||
public:
|
||||
struct Impl;
|
||||
private:
|
||||
// Внутренний рендер без сброса codeBlocks/codeCounter (для parseBlocks*,
|
||||
@@ -49,4 +61,5 @@ private:
|
||||
const QString &fileDir);
|
||||
|
||||
Impl *m = nullptr;
|
||||
int m_asyncId = 0;
|
||||
};
|
||||
Reference in New Issue
Block a user