mirror of
https://github.com/TermoraDev/termora.git
synced 2026-01-15 18:02:58 +08:00
fix: 修复终端日志重复记录的问题
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user