diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp index e6b68acc48e3c..e4a60adca5309 100644 --- a/src/libsync/discovery.cpp +++ b/src/libsync/discovery.cpp @@ -250,7 +250,7 @@ void ProcessDirectoryJob::process() processFile(std::move(path), e.localEntry, e.serverEntry, e.dbEntry); } _discoveryData->_listExclusiveFiles.clear(); - QTimer::singleShot(0, _discoveryData, &DiscoveryPhase::scheduleMoreJobs); + QMetaObject::invokeMethod(_discoveryData, &DiscoveryPhase::scheduleMoreJobs, Qt::QueuedConnection); } bool ProcessDirectoryJob::handleExcluded(const QString &path, const Entries &entries, const std::map &allEntries, const bool isHidden, const bool isBlacklisted) @@ -304,9 +304,10 @@ bool ProcessDirectoryJob::handleExcluded(const QString &path, const Entries &ent } const auto &localName = entries.localEntry.name; - const auto splitName = localName.split('.'); - const auto &baseName = splitName.first(); - const auto extension = splitName.size() > 1 ? splitName.last() : QString(); + const auto firstDotIndex = localName.indexOf(QLatin1Char('.')); + const auto lastDotIndex = localName.lastIndexOf(QLatin1Char('.')); + const auto baseName = firstDotIndex >= 0 ? QStringView(localName).left(firstDotIndex) : QStringView(localName); + const auto extension = lastDotIndex >= 0 ? QStringView(localName).mid(lastDotIndex + 1) : QStringView(); const auto accountCaps = _discoveryData->_account->capabilities(); const auto forbiddenFilenames = accountCaps.forbiddenFilenames(); const auto forbiddenBasenames = accountCaps.forbiddenFilenameBasenames(); @@ -699,7 +700,7 @@ void ProcessDirectoryJob::postProcessServerNew(const SyncFileItemPtr &item, if (!result) { processFileAnalyzeLocalInfo(item, path, localEntry, serverEntry, dbEntry, _queryServer); } - QTimer::singleShot(0, _discoveryData, &DiscoveryPhase::scheduleMoreJobs); + QMetaObject::invokeMethod(_discoveryData, &DiscoveryPhase::scheduleMoreJobs, Qt::QueuedConnection); }); return; } @@ -1063,7 +1064,7 @@ void ProcessDirectoryJob::processFileAnalyzeRemoteInfo(const SyncFileItemPtr &it const auto job = new RequestEtagJob(_discoveryData->_account, _discoveryData->_remoteFolder + originalPath, this); connect(job, &RequestEtagJob::finishedWithResult, this, [=, this](const HttpResult &etag) mutable { _pendingAsyncJobs--; - QTimer::singleShot(0, _discoveryData, &DiscoveryPhase::scheduleMoreJobs); + QMetaObject::invokeMethod(_discoveryData, &DiscoveryPhase::scheduleMoreJobs, Qt::QueuedConnection); if (etag || etag.error().code != 404 || // Somehow another item claimed this original path, consider as if it existed _discoveryData->isRenamed(originalPath)) { @@ -1714,7 +1715,7 @@ void ProcessDirectoryJob::processFileAnalyzeLocalInfo( } processFileFinalize(item, path, item->isDirectory(), NormalQuery, recurseQueryServer); _pendingAsyncJobs--; - QTimer::singleShot(0, _discoveryData, &DiscoveryPhase::scheduleMoreJobs); + QMetaObject::invokeMethod(_discoveryData, &DiscoveryPhase::scheduleMoreJobs, Qt::QueuedConnection); }); job->start(); return; @@ -2194,7 +2195,7 @@ void ProcessDirectoryJob::subJobFinished() int count = _runningJobs.removeAll(job); ASSERT(count == 1); job->deleteLater(); - QTimer::singleShot(0, _discoveryData, &DiscoveryPhase::scheduleMoreJobs); + QMetaObject::invokeMethod(_discoveryData, &DiscoveryPhase::scheduleMoreJobs, Qt::QueuedConnection); } int ProcessDirectoryJob::processSubJobs(int nbJobs)