Cancel file batch commands directly through the owned bridge
This commit is contained in:
1 parent
59cd456386
commit
b04b262174
2 files changed
+8
-7
No files matched your search
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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 и обратный порядок удаления.
|
||||
|
||||
Reference in new issue
Block a user