diff --git a/tools/chatgui/CMakeLists.txt b/tools/chatgui/CMakeLists.txt index cff94498..19783faa 100644 --- a/tools/chatgui/CMakeLists.txt +++ b/tools/chatgui/CMakeLists.txt @@ -188,6 +188,7 @@ add_executable(vibechat src/videoplayer_window.cpp src/imageviewer_window.cpp src/member_files/browser.cpp + src/member_files/batch.cpp src/avatars/avatarcache.cpp src/avatars/avatarcrop.cpp src/avatars/avatargallery.cpp @@ -350,7 +351,7 @@ target_link_libraries(test_channel_replies PRIVATE ${QT_LIBS} ${QT_TEST_LIB} utu add_test(NAME test_channel_replies COMMAND test_channel_replies) set_tests_properties(test_channel_replies PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" TIMEOUT 30) -add_executable(test_member_files_browser tests/test_member_files_browser.cpp src/member_files/browser.cpp db/db_manager.cpp +add_executable(test_member_files_browser tests/test_member_files_browser.cpp src/member_files/browser.cpp src/member_files/batch.cpp db/db_manager.cpp src/channellist.cpp src/channeldelegate.cpp src/avatars/groupavatarmanager.cpp) target_link_libraries(test_member_files_browser PRIVATE ${QT_LIBS} ${QT_TEST_LIB} utun pthread) add_test(NAME test_member_files_browser COMMAND test_member_files_browser) diff --git a/tools/chatgui/src/member_files/browser.cpp b/tools/chatgui/src/member_files/browser.cpp index f0947280..43d35bf9 100644 --- a/tools/chatgui/src/member_files/browser.cpp +++ b/tools/chatgui/src/member_files/browser.cpp @@ -188,6 +188,7 @@ 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); @@ -272,7 +273,7 @@ QByteArray MemberFileBrowser::selectedVersion() const { } void MemberFileBrowser::updateActions() { - auto* item = m_entries->currentItem(); bool own = owner() && owner() == m_db->myNodeId(); + bool own = owner() && owner() == m_db->myNodeId(); bool available = server() && gui_bridge_is_uasync_ready(); int count = m_entries->selectedItems().size(); bool busy = m_dropId || m_batch || m_transferId || m_exportId; @@ -481,6 +482,7 @@ QList MemberFileBrowser::selectedEntries() const { } MemberFileBatch* MemberFileBrowser::createBatch(MemberFileBatch::Mode mode) { + cancelRequest(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(); @@ -658,7 +660,7 @@ void MemberFileBrowser::mutate(uint8_t command) { QString target = m_path.isEmpty() ? name : m_path + '/' + name; if (command == MF_MKDIR) source = target; else if (!copyPath(q.target, target)) return; - } else if (!m_entries->currentItem() || QMessageBox::question(this, text("Delete"), text("Delete %1?").arg(source)) != QMessageBox::Yes) return; + } if (!copyPath(q.path, source)) return; if (version.size() == 16) memcpy(q.version, version.constData(), 16); if (post(q)) m_actions.insert(q.request_id, command); @@ -674,3 +676,8 @@ void MemberFileBrowser::closeEvent(QCloseEvent* event) { if (m_batch) { m_closeAfterBatch = true; event->ignore(); cancel(); return; } QDialog::closeEvent(event); } + +void MemberFileBrowser::reject() { + if (m_batch) { m_closeAfterBatch = true; cancel(); return; } + QDialog::reject(); +} diff --git a/tools/chatgui/src/member_files/browser.h b/tools/chatgui/src/member_files/browser.h index 4199a769..9b29e7c4 100644 --- a/tools/chatgui/src/member_files/browser.h +++ b/tools/chatgui/src/member_files/browser.h @@ -35,6 +35,7 @@ signals: protected: bool eventFilter(QObject* target, QEvent* event) override; void closeEvent(QCloseEvent* event) override; + void reject() override; private: void refresh(); void requestQuota();