Browse Source

Build batch transfers and wait for cancellation on close

master
evgeny 2 days ago
parent
commit
2e9babe73b
  1. 3
      tools/chatgui/CMakeLists.txt
  2. 11
      tools/chatgui/src/member_files/browser.cpp
  3. 1
      tools/chatgui/src/member_files/browser.h

3
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)

11
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<MemberFileEntry> 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();
}

1
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();

Loading…
Cancel
Save