Use file bridge cancellation without browser forwarding helpers
This commit is contained in:
1 parent
b04b262174
commit
0419c83ab0
2 files changed
+10
-14
No files matched your search
@@ -185,9 +185,9 @@ MemberFileBrowser::MemberFileBrowser(DbManager* db, QWidget* parent) : QDialog(p
|
||||
|
||||
MemberFileBrowser::~MemberFileBrowser() {
|
||||
if (m_batch) m_batch->finished = [](bool, const QString&, const QStringList&) {};
|
||||
cancel(); cancelRequest(m_listId);
|
||||
cancelRequest(m_quotaId);
|
||||
for (auto id : m_actions.keys()) cancelRequest(id);
|
||||
cancel(); gui_bridge_member_files_cancel(m_listId);
|
||||
gui_bridge_member_files_cancel(m_quotaId);
|
||||
for (auto id : m_actions.keys()) gui_bridge_member_files_cancel(id);
|
||||
}
|
||||
|
||||
bool MemberFileBrowser::eventFilter(QObject* target, QEvent* event) {
|
||||
@@ -235,7 +235,7 @@ void MemberFileBrowser::setChannel(const QString& channel, quint64 selectedOwner
|
||||
}
|
||||
bool valid = false; quint64 group = channel.toULongLong(&valid);
|
||||
if (!valid || !group || !m_db) return;
|
||||
cancelRequest(m_listId); m_listId = 0; m_group = group; m_path.clear();
|
||||
gui_bridge_member_files_cancel(m_listId); m_listId = 0; m_group = group; m_path.clear();
|
||||
m_servers->blockSignals(true); m_owners->blockSignals(true); m_servers->clear(); m_owners->clear();
|
||||
m_owners->addItem(text("All members"), QVariant::fromValue<qulonglong>(0));
|
||||
QString sql = QString("SELECT node_id,adm_tags,length(adm_tags_sig) FROM peers_%1 WHERE deleted=0 AND source=0 ORDER BY node_id").arg(group);
|
||||
@@ -293,10 +293,6 @@ bool MemberFileBrowser::post(mf_message& message) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void MemberFileBrowser::cancelRequest(quint64 id) {
|
||||
if (id) gui_bridge_member_files_cancel(id);
|
||||
}
|
||||
|
||||
void MemberFileBrowser::requestQuota() {
|
||||
if (m_quotaId || !owner() || !server() || !gui_bridge_is_uasync_ready()) return;
|
||||
mf_message q{}; q.command = MF_QUOTA; q.owner = owner();
|
||||
@@ -310,8 +306,8 @@ void MemberFileBrowser::requestQuota() {
|
||||
void MemberFileBrowser::refresh() {
|
||||
DEBUG_DEBUG(DEBUG_CATEGORY_MEDIA, "member_files: GUI refresh old_id=%llu group=%llx server=%llx owner=%llx path=%s",
|
||||
(unsigned long long)m_listId, (unsigned long long)m_group, (unsigned long long)server(), (unsigned long long)owner(), qPrintable(m_path));
|
||||
cancelRequest(m_listId); m_listId = 0; m_entries->clear(); m_location->setText(m_path); updateActions();
|
||||
cancelRequest(m_quotaId); m_quotaId = 0; m_refreshGeneration++;
|
||||
gui_bridge_member_files_cancel(m_listId); m_listId = 0; m_entries->clear(); m_location->setText(m_path); updateActions();
|
||||
gui_bridge_member_files_cancel(m_quotaId); m_quotaId = 0; m_refreshGeneration++;
|
||||
m_quota->setToolTip(QString());
|
||||
m_quota->setText(owner() ? text("Loading quota…") : text("Select a member to see storage quota"));
|
||||
if (!server()) {
|
||||
@@ -472,7 +468,7 @@ QList<MemberFileEntry> MemberFileBrowser::selectedEntries() const {
|
||||
}
|
||||
|
||||
MemberFileBatch* MemberFileBrowser::createBatch(MemberFileBatch::Mode mode) {
|
||||
cancelRequest(m_listId); m_listId = 0;
|
||||
gui_bridge_member_files_cancel(m_listId); m_listId = 0;
|
||||
auto* batch = new MemberFileBatch(m_group, server(), owner(), mode, this); m_batch = batch;
|
||||
batch->progress = [this](const QString& status, int value) {
|
||||
m_uploadStatus->setText(status); m_progress->show();
|
||||
@@ -662,7 +658,7 @@ void MemberFileBrowser::mutate(uint8_t command) {
|
||||
void MemberFileBrowser::cancel() {
|
||||
if (m_batch) m_batch->cancel();
|
||||
if (m_dropId) { m_dropId = 0; m_uploadStatus->setText(text("Upload queue cancelled")); updateActions(); }
|
||||
cancelRequest(m_transferId);
|
||||
gui_bridge_member_files_cancel(m_transferId);
|
||||
}
|
||||
|
||||
void MemberFileBrowser::closeEvent(QCloseEvent* event) {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
* Создать с живым DbManager, выбрать группу через setChannel, передавать события bridge в onResponse/onTransfer.
|
||||
* Все методы и доставка событий — GUI-поток; локальный обход делает MemberFileBatch, сеть/передачи — ядро.
|
||||
* Контекст и request_id отсекают старые ответы LIST/QUOTA; активная передача блокирует навигацию/смену группы.
|
||||
* Отказ постановки показывается сразу; отмена принятой команды приходит как обычное файловое событие.
|
||||
* Copy/drag публикуют локальные URI после полного Download; успешный временный экспорт остаётся в кеше.
|
||||
* WA_DeleteOnClose: хранить окно через QPointer. При закрытии batch сначала отменяется и завершает свой I/O. */
|
||||
#pragma once
|
||||
@@ -61,7 +62,7 @@ private:
|
||||
quint64 server() const; // Выбранный storage; 0 — доступного сервера нет.
|
||||
QString selectedPath() const; // Путь текущей строки внутри owner; пустой при отсутствии строки.
|
||||
QByteArray selectedVersion() const; // Снимок текущей строки либо пустой массив.
|
||||
bool post(struct mf_message& message); // Назначить request_id/kind, отправить через bridge; false при отказе подготовки.
|
||||
bool post(struct mf_message& message); // Назначить request_id/kind, отправить через bridge; false при отказе приёма команды.
|
||||
void upload(); // Выбрать локальные файлы диалогом и передать их в beginUploads.
|
||||
void beginUploads(const QStringList& paths, bool chooseServer); // Проверить контекст, при необходимости выбрать storage.
|
||||
QList<MemberFileEntry> selectedEntries() const; // Снимок выделения в порядке дерева, с remote/version/type.
|
||||
@@ -74,7 +75,6 @@ private:
|
||||
bool startTransfer(const QString& remote, const QString& local, bool upload, const QByteArray& version);
|
||||
void mutate(uint8_t command); // MKDIR/RENAME либо подтверждённая рекурсивная очередь Remove для своего owner.
|
||||
void cancel(); // Отменить batch, отложенный drop и одиночную передачу.
|
||||
void cancelRequest(quint64 id); // Передать отмену ненулевого ID в доступное ядро.
|
||||
DbManager* m_db; // Заимствованная БД: только чтение из GUI-потока.
|
||||
quint64 m_group = 0, m_listId = 0, m_transferId = 0; // Выбранная группа и активные одиночные LIST/transfer.
|
||||
quint64 m_quotaId = 0, m_refreshGeneration = 0; // QUOTA и поколение refresh для отложенного повтора MF_BUSY.
|
||||
|
||||
Reference in new issue
Block a user