chore: transfer shows error message

This commit is contained in:
hstyi
2025-06-22 10:03:32 +08:00
committed by hstyi
parent 389c243ada
commit 2bf4d277be
2 changed files with 27 additions and 2 deletions

View File

@@ -379,7 +379,11 @@ class TransferTableModel(private val coroutineScope: CoroutineScope) :
}
continue
} else if (canTransfer(node)) {
doTransfer(node)
if (continueTransfer(node, false)) {
doTransfer(node)
} else {
changeState(node, State.Failed)
}
}
lock.withLock { condition.signalAll() }
} catch (_: CancellationException) {
@@ -407,8 +411,9 @@ class TransferTableModel(private val coroutineScope: CoroutineScope) :
}
}
} catch (e: Exception) {
node.tryChangeState(State.Failed)
tryChangeState(node, State.Failed)
if (e !is UserCanceledException) {
node.setException(e)
throw e
}
} finally {
@@ -444,6 +449,12 @@ class TransferTableModel(private val coroutineScope: CoroutineScope) :
fireTransferChanged(node)
}
private fun tryChangeState(node: TransferTreeTableNode, state: State) {
if (node.tryChangeState(state)) {
fireTransferChanged(node)
}
}
private fun removeCompleted(node: TransferTreeTableNode) {
if (node == getRoot()) return

View File

@@ -5,6 +5,7 @@ import app.termora.formatBytes
import app.termora.formatSeconds
import app.termora.transfer.TransferTableModel.Companion.COLUMN_COUNT
import org.apache.commons.lang3.StringUtils
import org.apache.commons.lang3.exception.ExceptionUtils
import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode
import java.nio.file.FileSystems
import java.nio.file.Path
@@ -43,6 +44,8 @@ class TransferTreeTableNode(transfer: Transfer) : DefaultMutableTreeTableNode(tr
*/
private var state = State.Ready
private var exception: Exception? = null
override fun getColumnCount(): Int {
return COLUMN_COUNT
@@ -96,6 +99,14 @@ class TransferTreeTableNode(transfer: Transfer) : DefaultMutableTreeTableNode(tr
return I18n.getString("termora.transport.sftp.status.deleting")
}
if (state == State.Failed) {
val e = exception
if (e != null) {
val message = ExceptionUtils.getRootCauseMessage(e)
return "${I18n.getString("termora.transport.sftp.status.failed")}: $message"
}
}
return when (state) {
State.Processing -> I18n.getString("termora.transport.sftp.status.transporting")
State.Ready -> I18n.getString("termora.transport.sftp.status.waiting")
@@ -130,6 +141,9 @@ class TransferTreeTableNode(transfer: Transfer) : DefaultMutableTreeTableNode(tr
this.state = state
}
fun setException(e: Exception) {
this.exception = e
}
fun tryChangeState(state: State): Boolean {
if (this.state == State.Done || this.state == State.Failed) {