Browse Source

Defer closing until batch cancellation and cleanup finish

master
evgeny 3 days ago
parent
commit
973c734226
  1. 4
      tools/chatgui/src/member_files/browser.cpp
  2. 12
      tools/chatgui/tests/test_member_files_browser.cpp

4
tools/chatgui/src/member_files/browser.cpp

@ -523,7 +523,7 @@ void MemberFileBrowser::beginUploads(const QStringList& paths, bool chooseServer
auto* batch = createBatch(MemberFileBatch::Upload);
batch->finished = [this, batch](bool, const QString& summary, const QStringList&) {
m_batch = nullptr; m_progress->hide(); m_uploadStatus->setText(summary); batch->deleteLater(); updateActions(); refresh();
if (m_closeAfterBatch) close();
if (m_closeAfterBatch) QTimer::singleShot(0, this, &QWidget::close);
};
m_uploadStatus->setText(text("Checking selected files…")); batch->upload(paths, m_path);
}
@ -651,7 +651,7 @@ void MemberFileBrowser::mutate(uint8_t command) {
auto* batch = createBatch(MemberFileBatch::Remove);
batch->finished = [this, batch](bool, const QString& summary, const QStringList&) {
m_batch = nullptr; m_progress->hide(); m_uploadStatus->setText(summary); batch->deleteLater(); updateActions(); refresh();
if (m_closeAfterBatch) close();
if (m_closeAfterBatch) QTimer::singleShot(0, this, &QWidget::close);
};
batch->start(entries); return;
}

12
tools/chatgui/tests/test_member_files_browser.cpp

@ -401,6 +401,18 @@ private slots:
QApplication::sendEvent(tree->viewport(), &move);
QTest::mouseRelease(tree->viewport(), Qt::LeftButton, Qt::NoModifier, point + QPoint(40, 0));
QVERIFY(received); QCOMPARE(transfers.size(), 4); transferStarted = {};
if (dragStatus == MF_CANCELLED) {
QPointer<MemberFileBrowser> closing = new MemberFileBrowser(&db);
closing->setChannel("42", 11); closing->show();
auto* closingTree = closing->findChild<QTreeWidget*>();
auto* closingItem = new QTreeWidgetItem(closingTree, {"pending.txt"});
closingItem->setData(0, Qt::UserRole, "pending.txt"); closingItem->setData(0, Qt::UserRole + 1, MF_FILE);
closingItem->setData(0, Qt::UserRole + 2, QByteArray(16, '\7')); closingTree->setCurrentItem(closingItem);
closing->findChild<QAction*>("memberFilesCopy")->trigger(); QTRY_COMPARE(transfers.size(), 5);
auto pending = transfers.last(); QString temporary = QFileInfo(QString::fromUtf8(pending.local)).absolutePath();
closing->close(); QVERIFY(closing); QVERIFY(cancelled.contains(pending.id));
complete(*closing, pending, MF_CANCELLED); QTRY_VERIFY(closing.isNull()); QVERIFY(!QFileInfo::exists(temporary));
}
}
QVERIFY(QFile::exists(exported)); // Закрытие Group files не ломает локальный URI.
db.setDb(nullptr); QCOMPARE(sqlite3_close(sql), SQLITE_OK);

Loading…
Cancel
Save