// Copyright (C) 2025 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "fetchworker.h" #include static constexpr int s_fetchBlockSize{50}; static constexpr int s_maximumListSize{s_fetchBlockSize * 10}; static constexpr int s_sleepIterations{20}; static constexpr std::chrono::milliseconds s_sleepInterval{100}; FetchWorker::FetchWorker(QObject *parent) : QObject{parent} {} void FetchWorker::fetchDataBlock() { if (m_existingItemsCount < s_maximumListSize) { QList itemsToSend = slowDataConstruction(m_existingItemsCount); m_existingItemsCount += itemsToSend.size(); emit dataFetched(itemsToSend); } if (m_existingItemsCount >= s_maximumListSize) emit noMoreToFetch(); } QList FetchWorker::slowDataConstruction(int fromIndex) { // Block for two seconds to mimic slow data source, while allowing interruption in case of application close for (int iterations = s_sleepIterations; iterations > 0 && !QThread::currentThread()->isInterruptionRequested(); --iterations) { QThread::sleep(s_sleepInterval); } QList returnValues; returnValues.reserve(s_fetchBlockSize); int number = fromIndex; for (int blocks = 0; blocks < s_fetchBlockSize; ++blocks) { ++number; returnValues.append({QStringLiteral("Contact %1 name").arg(number), QStringLiteral("Contact %1 telephone").arg(number), number}); } return returnValues; }