Initial QSfera import

This commit is contained in:
Курнат Андрей
2026-06-07 10:20:04 +03:00
commit 2315f25754
16485 changed files with 4826827 additions and 0 deletions
+146
View File
@@ -0,0 +1,146 @@
/*
* Copyright (C) by Hannah von Reth <hannah.vonreth@owncloud.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*/
#include "jobqueue.h"
#include "abstractnetworkjob.h"
#include "account.h"
#include <QLoggingCategory>
namespace OCC {
Q_LOGGING_CATEGORY(lcJobQUeue, "sync.networkjob.jobqueue", QtDebugMsg)
JobQueue::JobQueue(Account *account)
: _account(account)
{
}
void JobQueue::block()
{
_blocked++;
qCDebug(lcJobQUeue) << u"block:" << _blocked << _account->displayNameWithHost();
}
void JobQueue::unblock()
{
if (!isBlocked()) {
return;
}
_blocked--;
qCDebug(lcJobQUeue) << u"unblock:" << _blocked << _account->displayNameWithHost();
if (_blocked == 0) {
auto tmp = std::move(_jobs);
for (auto job : tmp) {
if (job) {
qCDebug(lcJobQUeue) << u"Retry" << job;
job->retry();
}
}
}
}
bool JobQueue::isBlocked() const
{
return _blocked != 0;
}
bool JobQueue::retry(AbstractNetworkJob *job)
{
if (!job->needsRetry()) {
return false;
}
if (_blocked) {
qCDebug(lcJobQUeue) << u"Retry queued" << job;
_jobs.push_back(job);
} else {
qCDebug(lcJobQUeue) << u"Direct retry" << job;
job->retry();
}
return true;
}
bool JobQueue::enqueue(AbstractNetworkJob *job)
{
if (!_blocked) {
return false;
}
qCDebug(lcJobQUeue) << u"Queue" << job;
_jobs.push_back(job);
return true;
}
void JobQueue::clear()
{
_blocked = 0;
auto tmp = std::move(_jobs);
for (auto job : tmp) {
if (job) {
qCDebug(lcJobQUeue) << u"Abort" << job;
job->abort();
}
}
}
size_t JobQueue::size() const
{
return _jobs.size();
}
JobQueueGuard::JobQueueGuard(JobQueue *queue)
: _queue(queue)
{
}
JobQueueGuard::~JobQueueGuard()
{
unblock();
}
bool JobQueueGuard::block()
{
if (!_blocked) {
_blocked = true;
_queue->block();
return true;
}
return false;
}
bool JobQueueGuard::unblock()
{
if (_blocked) {
_blocked = false;
_queue->unblock();
return true;
}
return false;
}
bool JobQueueGuard::clear()
{
if (_blocked) {
_blocked = false;
_queue->clear();
return true;
}
return false;
}
JobQueue *JobQueueGuard::queue() const
{
return _queue;
}
}