From ed8f958f6cc1ea2e51adbb61733d978d64f6ba2a Mon Sep 17 00:00:00 2001 From: uncor3 Date: Sun, 5 Apr 2026 09:56:24 +0000 Subject: [PATCH] fix(statusballoon): implement cancel job, debounce transfer rate --- src/statusballoon.cpp | 32 +++++++++++++++++++++----------- src/statusballoon.h | 2 ++ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/statusballoon.cpp b/src/statusballoon.cpp index 4a85b38..72a567a 100644 --- a/src/statusballoon.cpp +++ b/src/statusballoon.cpp @@ -155,16 +155,14 @@ void BalloonProcess::onCancelClicked() { m_cancelButton->setEnabled(false); m_cancelButton->setText("Cancelling..."); - // FIXME - // ExportManager::sharedInstance()->cancel(m_item->jobId); + IOManagerClient::sharedInstance()->cancel(m_item->processId); } void BalloonProcess::updateUI() { QString statusText; if (m_item->status == ProcessStatus::Running) { - statusText = m_item->currentFile.isEmpty() ? "Processing..." - : m_item->currentFile; + statusText = m_item->currentFile.isEmpty() ? "Starting..." : "Running"; } else if (m_item->status == ProcessStatus::Completed) { statusText = "Completed successfully"; } else if (m_item->status == ProcessStatus::Failed) { @@ -190,20 +188,32 @@ void BalloonProcess::updateUI() if (m_item->status == ProcessStatus::Running && m_item->transferredBytes > 0) { + QDateTime now = QDateTime::currentDateTime(); + const int minIntervalMs = 750; + qint64 elapsed = m_lastUpdateTime.msecsTo(now); - if (elapsed > 0) { - qint64 bytesDiff = - m_item->transferredBytes - m_lastBytesTransferred; - qint64 bytesPerSecond = (bytesDiff * 1000) / elapsed; - if (bytesPerSecond > 0) { - statsText += " • " + iDescriptor::Utils::formatTransferRate( - bytesPerSecond); + // debounced transfer rate + if (!m_lastUpdateTime.isValid() || elapsed >= minIntervalMs) { + if (elapsed > 0) { + qint64 bytesDiff = + m_item->transferredBytes - m_lastBytesTransferred; + qint64 bytesPerSecond = (bytesDiff * 1000) / elapsed; + if (bytesPerSecond > 0) { + m_lastSpeedText = + " • " + + iDescriptor::Utils::formatTransferRate(bytesPerSecond); + } } m_lastBytesTransferred = m_item->transferredBytes; m_lastUpdateTime = now; } + + if (!m_lastSpeedText.isEmpty()) { + statsText += m_lastSpeedText; // reuse last speed until next update + } } + m_statsLabel->setText(statsText); if (m_item->status == ProcessStatus::Running) { diff --git a/src/statusballoon.h b/src/statusballoon.h index 399b566..3742920 100644 --- a/src/statusballoon.h +++ b/src/statusballoon.h @@ -3,6 +3,7 @@ #include "iDescriptor-ui.h" #include "iDescriptor.h" +#include "iomanagerclient.h" #include "qballoontip.h" #include #include @@ -61,6 +62,7 @@ private: std::shared_ptr m_item; QDateTime m_lastUpdateTime; + QString m_lastSpeedText; qint64 m_lastBytesTransferred; QLabel *m_titleLabel;