fix: 修复终端日志重复记录的问题

This commit is contained in:
hstyi
2025-01-09 14:58:04 +08:00
committed by GitHub
parent 950ff517bb
commit 6071b251a4

View File

@@ -34,6 +34,7 @@ class TerminalLoggerDataListener(private val terminal: Terminal) : DataListener
private var writer: BufferedWriter? = null
private val isRecording = AtomicBoolean(false)
private val isClosed = AtomicBoolean(false)
// 监听 Recording 变化,如果已经停止录制,那么立即关闭文件
private val terminalLoggerActionPropertyChangeListener = PropertyChangeListener { evt ->
@@ -56,13 +57,22 @@ class TerminalLoggerDataListener(private val terminal: Terminal) : DataListener
init {
terminal.addTerminalListener(object : TerminalListener {
override fun onClose(terminal: Terminal) {
if (isClosed.compareAndSet(false, true)) {
// 设置为已经关闭
isClosed.set(true)
// 移除变动监听
terminal.getTerminalModel().removeDataListener(this@TerminalLoggerDataListener)
// 关闭流
close()
}
}
})
}
override fun onChanged(key: DataKey<*>, data: Any) {
if (key != VisualTerminal.Written) {
if (key != VisualTerminal.Written || isClosed.get()) {
return
}
@@ -151,6 +161,7 @@ class TerminalLoggerDataListener(private val terminal: Terminal) : DataListener
ActionManager.getInstance().getAction(Actions.TERMINAL_LOGGER)
?.removePropertyChangeListener(terminalLoggerActionPropertyChangeListener)
this.channel?.close()
this.coroutineScope?.cancel()