Cancel file batch commands directly through the owned bridge

This commit is contained in:
evgeny committed 2026-10-28 00:58:59 +01:00
1 parent 59cd456386
commit b04b262174
2 files changed
+8 -7

No files matched your search

+7 -6
View File
@@ -30,11 +30,10 @@ MemberFileBatch::MemberFileBatch(quint64 group, quint64 server, quint64 owner, M
}
MemberFileBatch::~MemberFileBatch() {
m_cancelled = true; cancelRequest(m_request); cancelRequest(m_transfer); m_pool.waitForDone();
}
void MemberFileBatch::cancelRequest(quint64 id) {
if (id) gui_bridge_member_files_cancel(id);
m_cancelled = true;
gui_bridge_member_files_cancel(m_request);
gui_bridge_member_files_cancel(m_transfer);
m_pool.waitForDone();
}
// Сначала проверяем всё локальное дерево; до успешного обхода сервер не изменяется.
@@ -274,7 +273,9 @@ void MemberFileBatch::advance(bool skipped) {
void MemberFileBatch::cancel() {
if (m_finished) return;
m_cancelled = true; cancelRequest(m_request); m_request = 0; cancelRequest(m_transfer);
m_cancelled = true;
gui_bridge_member_files_cancel(m_request); m_request = 0;
gui_bridge_member_files_cancel(m_transfer);
DEBUG_INFO(DEBUG_CATEGORY_MEDIA, "file batch: cancelling transfer=%llu worker=%d", (unsigned long long)m_transfer, m_work);
if (!m_transfer && !m_work) finish();
}
+1 -1
View File
@@ -2,6 +2,7 @@
* В GUI-потоке задать progress/finished/conflict, затем один раз вызвать upload (Upload) либо start (Download/Remove).
* Локальный обход/подготовка/очистка идут в собственном worker; запросы и передачи — через bridge в uasync.
* Внешний диспетчер передаёт ответы через response/transfer; сам batch не подписывается на события bridge.
* Отказ постановки завершает batch ошибкой; отмена команды до исполнения приходит обычным MF_CANCELLED.
* cancel ждёт завершения текущего локального I/O/передачи до finished; уже выполненные изменения не откатываются.
* При неуспехе временный экспорт удаляется перед finished. Деструктор ждёт worker, но не сетевое завершение. */
#pragma once
@@ -59,7 +60,6 @@ private:
void advance(bool skipped = false); // Учесть/удалить голову и отложенно вызвать next в GUI-потоке.
void finish(const QString& error = {}); // Зафиксировать исход; при необходимости очистить временный экспорт.
bool replace(bool sameType); // true разрешает замену; иначе пропустить поддерево либо отменить batch.
void cancelRequest(quint64 id); // Передать отмену ненулевого запроса/передачи в доступное ядро.
const quint64 m_group, m_server, m_owner; // Контекст всей очереди, не зависит от навигации браузера.
const Mode m_mode; // Одна операция на всё время жизни объекта.
QList<MemberFileEntry> m_queue, m_verify, m_remove; // Работа, финальные STAT и обратный порядок удаления.