| 221 | |
| 222 | static QMutex s_update_task_mutex; |
| 223 | bool ResourceFolderModel::update() |
| 224 | { |
| 225 | // We hold a lock here to prevent race conditions on the m_current_update_task reset. |
| 226 | QMutexLocker lock(&s_update_task_mutex); |
| 227 | |
| 228 | // Already updating, so we schedule a future update and return. |
| 229 | if (m_current_update_task) { |
| 230 | m_scheduled_update = true; |
| 231 | return false; |
| 232 | } |
| 233 | |
| 234 | m_current_update_task.reset(createUpdateTask()); |
| 235 | if (!m_current_update_task) |
| 236 | return false; |
| 237 | |
| 238 | connect(m_current_update_task.get(), &Task::succeeded, this, &ResourceFolderModel::onUpdateSucceeded, |
| 239 | Qt::ConnectionType::QueuedConnection); |
| 240 | connect(m_current_update_task.get(), &Task::failed, this, &ResourceFolderModel::onUpdateFailed, Qt::ConnectionType::QueuedConnection); |
| 241 | connect(m_current_update_task.get(), &Task::finished, this, [=] { |
| 242 | m_current_update_task.reset(); |
| 243 | if (m_scheduled_update) { |
| 244 | m_scheduled_update = false; |
| 245 | update(); |
| 246 | } else { |
| 247 | emit updateFinished(); |
| 248 | } |
| 249 | }, Qt::ConnectionType::QueuedConnection); |
| 250 | |
| 251 | QThreadPool::globalInstance()->start(m_current_update_task.get()); |
| 252 | |
| 253 | return true; |
| 254 | } |
| 255 | |
| 256 | void ResourceFolderModel::resolveResource(Resource* res) |
| 257 | { |
no test coverage detected