mirror of
https://github.com/TermoraDev/termora.git
synced 2026-01-16 02:12: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 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) {
|
||||||
|
if (isClosed.compareAndSet(false, true)) {
|
||||||
|
// 设置为已经关闭
|
||||||
|
isClosed.set(true)
|
||||||
|
|
||||||
|
// 移除变动监听
|
||||||
|
terminal.getTerminalModel().removeDataListener(this@TerminalLoggerDataListener)
|
||||||
|
|
||||||
|
// 关闭流
|
||||||
close()
|
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()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user