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