diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/git/gitsubmiteditor.cpp | 68 | ||||
-rw-r--r-- | src/plugins/git/gitsubmiteditor.h | 6 |
2 files changed, 40 insertions, 34 deletions
diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp index 1a79429d6f2..b8f08e843f5 100644 --- a/src/plugins/git/gitsubmiteditor.cpp +++ b/src/plugins/git/gitsubmiteditor.cpp @@ -11,7 +11,7 @@ #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/fileutils.h> #include <coreplugin/iversioncontrol.h> -#include <coreplugin/progressmanager/progressmanager.h> +#include <coreplugin/progressmanager/taskprogress.h> #include <utils/async.h> #include <utils/environment.h> @@ -29,6 +29,8 @@ #include <QStringList> #include <QTimer> +using namespace Core; +using namespace Tasking; using namespace Utils; using namespace VcsBase; @@ -71,7 +73,7 @@ private: } }; -Result<CommitData> fetchCommitData(CommitType commitType, const FilePath &workingDirectory) +static Result<CommitData> fetchCommitData(CommitType commitType, const FilePath &workingDirectory) { return gitClient().getCommitData(commitType, workingDirectory); } @@ -89,10 +91,8 @@ GitSubmitEditor::GitSubmitEditor() : connect(submitEditorWidget(), &GitSubmitEditorWidget::logRequested, this, &GitSubmitEditor::showLog); connect(submitEditorWidget(), &GitSubmitEditorWidget::fileActionRequested, this, &GitSubmitEditor::performFileAction); - connect(versionControl(), &Core::IVersionControl::repositoryChanged, + connect(versionControl(), &IVersionControl::repositoryChanged, this, &GitSubmitEditor::forceUpdateFileModel); - connect(&m_fetchWatcher, &QFutureWatcher<Result<CommitData>>::finished, - this, &GitSubmitEditor::commitDataRetrieved); } GitSubmitEditor::~GitSubmitEditor() = default; @@ -109,7 +109,7 @@ const GitSubmitEditorWidget *GitSubmitEditor::submitEditorWidget() const void GitSubmitEditor::setCommitData(const CommitData &d) { - using IVCF = Core::IVersionControl::FileState; + using IVCF = IVersionControl::FileState; m_commitEncoding = d.commitEncoding; m_workingDirectory = d.panelInfo.repository; @@ -184,7 +184,7 @@ void GitSubmitEditor::slotDiffSelected(const QList<int> &rows) } stagedFiles.push_back(fileName); } else if (state == UntrackedFile) { - Core::EditorManager::openEditor(m_workingDirectory.pathAppended(fileName)); + EditorManager::openEditor(m_workingDirectory.pathAppended(fileName)); } else { unstagedFiles.push_back(fileName); } @@ -292,7 +292,7 @@ void GitSubmitEditor::performFileAction(const Utils::FilePath &filePath, FileAct break; case FileOpenEditor: - Core::EditorManager::openEditor(fullPath); + EditorManager::openEditor(fullPath); break; case FileStage: @@ -352,13 +352,36 @@ void GitSubmitEditor::updateFileModel() if (w->updateInProgress() || m_workingDirectory.isEmpty()) return; w->setUpdateInProgress(true); - // TODO: Check if fetch works OK from separate thread, refactor otherwise - m_fetchWatcher.setFuture(Utils::asyncRun(&fetchCommitData, - m_commitType, m_workingDirectory)); - Core::ProgressManager::addTask(m_fetchWatcher.future(), Tr::tr("Refreshing Commit Data"), - TASK_UPDATE_COMMIT); - Utils::futureSynchronizer()->addFuture(m_fetchWatcher.future()); + using ResultType = Result<CommitData>; + // TODO: Check if fetch works OK from separate thread, refactor otherwise + const auto onSetup = [this](Async<ResultType> &task) { + task.setConcurrentCallData(&fetchCommitData,m_commitType, + m_workingDirectory); + }; + const auto onDone = [this](const Async<ResultType> &task) { + const ResultType result = task.result(); + GitSubmitEditorWidget *w = submitEditorWidget(); + if (result) { + setCommitData(result.value()); + w->refreshLog(m_workingDirectory); + w->setEnabled(true); + } else { + // Nothing to commit left! + VcsOutputWindow::appendError(m_workingDirectory, result.error()); + m_model->clear(); + w->setEnabled(false); + } + w->setUpdateInProgress(false); + }; + const auto onTreeSetup = [](TaskTree &taskTree) { + auto progress = new TaskProgress(&taskTree); + progress->setDisplayName(Tr::tr("Refreshing Commit Data")); + progress->setId(TASK_UPDATE_COMMIT); + }; + m_taskTreeRunner.start( + {AsyncTask<ResultType>(onSetup, onDone, CallDone::OnSuccess)}, + onTreeSetup); } void GitSubmitEditor::forceUpdateFileModel() @@ -370,23 +393,6 @@ void GitSubmitEditor::forceUpdateFileModel() updateFileModel(); } -void GitSubmitEditor::commitDataRetrieved() -{ - const Result<CommitData> result = m_fetchWatcher.result(); - GitSubmitEditorWidget *w = submitEditorWidget(); - if (result) { - setCommitData(result.value()); - w->refreshLog(m_workingDirectory); - w->setEnabled(true); - } else { - // Nothing to commit left! - VcsOutputWindow::appendError(m_workingDirectory, result.error()); - m_model->clear(); - w->setEnabled(false); - } - w->setUpdateInProgress(false); -} - GitSubmitEditorPanelData GitSubmitEditor::panelData() const { return submitEditorWidget()->panelData(); diff --git a/src/plugins/git/gitsubmiteditor.h b/src/plugins/git/gitsubmiteditor.h index fac9d42fc12..5c49f6a953a 100644 --- a/src/plugins/git/gitsubmiteditor.h +++ b/src/plugins/git/gitsubmiteditor.h @@ -5,11 +5,12 @@ #include "commitdata.h" +#include <solutions/tasking/tasktreerunner.h> + #include <utils/filepath.h> #include <vcsbase/vcsbasesubmiteditor.h> -#include <QFutureWatcher> #include <QStringList> namespace VcsBase { class SubmitFileModel; } @@ -42,7 +43,6 @@ private: void showCommit(const QString &commit); void showLog(const QStringList &range); void performFileAction(const Utils::FilePath &filePath, FileAction action); - void commitDataRetrieved(); void addToGitignore(const Utils::FilePath &relativePath); inline GitSubmitEditorWidget *submitEditorWidget(); @@ -54,7 +54,7 @@ private: QString m_amenHash; Utils::FilePath m_workingDirectory; bool m_firstUpdate = true; - QFutureWatcher<Utils::Result<CommitData>> m_fetchWatcher; + Tasking::SingleTaskTreeRunner m_taskTreeRunner; }; } // Git::Internal |