TaskTree: Add Task c'tor taking one handler for done and error

The overloaded c'tor takes one done handler with an additional
"bool success" argument.

Task-number: QTCREATORBUG-29834
Change-Id: Id579d055721a2a07a5a9f0900aa4a73655f21610
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
Jarek Kobus
2023-10-31 17:03:48 +01:00
parent 09c4aad0eb
commit d35d0b5100
4 changed files with 51 additions and 45 deletions

View File

@@ -113,24 +113,22 @@ DiffFilesController::DiffFilesController(IDocument *document)
const auto setupTree = [this, storage](TaskTree &taskTree) {
QList<std::optional<FileData>> *outputList = storage.activeStorage();
const auto setupDiff = [this](Async<FileData> &async, const ReloadInput &reloadInput) {
async.setConcurrentCallData(
DiffFile(ignoreWhitespace(), contextLineCount()), reloadInput);
async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
};
const auto onDiffDone = [outputList](const Async<FileData> &async, int i) {
if (async.isResultAvailable())
(*outputList)[i] = async.result();
};
const QList<ReloadInput> inputList = reloadInputList();
outputList->resize(inputList.size());
using namespace std::placeholders;
QList<GroupItem> tasks {parallel, finishAllAndDone};
QList<GroupItem> tasks { parallel, finishAllAndDone };
for (int i = 0; i < inputList.size(); ++i) {
tasks.append(AsyncTask<FileData>(std::bind(setupDiff, _1, inputList.at(i)),
std::bind(onDiffDone, _1, i)));
const auto setupDiff = [this, reloadInput = inputList.at(i)](Async<FileData> &async) {
async.setConcurrentCallData(
DiffFile(ignoreWhitespace(), contextLineCount()), reloadInput);
async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
};
const auto onDiffDone = [outputList, i](const Async<FileData> &async) {
if (async.isResultAvailable())
(*outputList)[i] = async.result();
};
tasks.append(AsyncTask<FileData>(setupDiff, onDiffDone));
}
taskTree.setRecipe(tasks);
};