xC/xP: send buffer type and server state
Also make PM highlighting behaviour consistent.
This commit is contained in:
		@@ -17,6 +17,10 @@ body {
 | 
			
		||||
	padding: .05em .3em;
 | 
			
		||||
	background: #eee;
 | 
			
		||||
 | 
			
		||||
	display: flex;
 | 
			
		||||
	justify-content: space-between;
 | 
			
		||||
	align-items: baseline;
 | 
			
		||||
 | 
			
		||||
	position: relative;
 | 
			
		||||
	border-top: 3px solid #ccc;
 | 
			
		||||
	border-bottom: 2px solid #888;
 | 
			
		||||
@@ -39,11 +43,6 @@ body {
 | 
			
		||||
	bottom: -1px;
 | 
			
		||||
	background: #ccc;
 | 
			
		||||
}
 | 
			
		||||
.title {
 | 
			
		||||
	display: flex;
 | 
			
		||||
	justify-content: space-between;
 | 
			
		||||
	align-items: baseline;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.middle {
 | 
			
		||||
	flex: auto;
 | 
			
		||||
 
 | 
			
		||||
@@ -193,6 +193,8 @@ let bufferCurrent = undefined
 | 
			
		||||
let bufferLog = undefined
 | 
			
		||||
let bufferAutoscroll = true
 | 
			
		||||
 | 
			
		||||
let servers = new Map()
 | 
			
		||||
 | 
			
		||||
function bufferResetStats(b) {
 | 
			
		||||
	b.newMessages = 0
 | 
			
		||||
	b.newUnimportantMessages = 0
 | 
			
		||||
@@ -234,6 +236,8 @@ rpc.connect().then(result => {
 | 
			
		||||
	bufferLog = undefined
 | 
			
		||||
	bufferAutoscroll = true
 | 
			
		||||
 | 
			
		||||
	servers.clear()
 | 
			
		||||
 | 
			
		||||
	rpc.send({command: 'Hello', version: 1})
 | 
			
		||||
	connecting = false
 | 
			
		||||
	m.redraw()
 | 
			
		||||
@@ -250,6 +254,8 @@ rpc.addEventListener('Ping', event => {
 | 
			
		||||
	rpc.send({command: 'PingResponse', eventSeq: event.detail.eventSeq})
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
// ~~~ Buffer events ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
rpc.addEventListener('BufferUpdate', event => {
 | 
			
		||||
	let e = event.detail, b = buffers.get(e.bufferName)
 | 
			
		||||
	if (b === undefined) {
 | 
			
		||||
@@ -260,7 +266,10 @@ rpc.addEventListener('BufferUpdate', event => {
 | 
			
		||||
		}))
 | 
			
		||||
		bufferResetStats(b)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	b.hideUnimportant = e.hideUnimportant
 | 
			
		||||
	b.kind = e.context.kind
 | 
			
		||||
	b.server = servers.get(e.context.serverName)
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
rpc.addEventListener('BufferStats', event => {
 | 
			
		||||
@@ -354,8 +363,8 @@ rpc.addEventListener('BufferLine', event => {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO: Also highlight on unseen private messages, like xC does.
 | 
			
		||||
	if (line.isHighlight) {
 | 
			
		||||
	if (line.isHighlight ||
 | 
			
		||||
		(!visible && b.kind === 'PrivateMessage' && !line.isUnimportant)) {
 | 
			
		||||
		beep()
 | 
			
		||||
		if (!visible)
 | 
			
		||||
			b.highlighted = true
 | 
			
		||||
@@ -368,6 +377,26 @@ rpc.addEventListener('BufferClear', event => {
 | 
			
		||||
		b.lines.length = 0
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
// ~~~ Server events ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
rpc.addEventListener('ServerUpdate', event => {
 | 
			
		||||
	let e = event.detail, s = servers.get(e.serverName)
 | 
			
		||||
	if (s === undefined)
 | 
			
		||||
		servers.set(e.serverName, (s = {}))
 | 
			
		||||
	s.state = e.state
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
rpc.addEventListener('ServerRename', event => {
 | 
			
		||||
	let e = event.detail
 | 
			
		||||
	servers.set(e.new, servers.get(e.serverName))
 | 
			
		||||
	servers.delete(e.serverName)
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
rpc.addEventListener('ServerRemove', event => {
 | 
			
		||||
	let e = event.detail
 | 
			
		||||
	servers.delete(e.serverName)
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
// --- Colours -----------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
let palette = [
 | 
			
		||||
@@ -614,6 +643,21 @@ let BufferContainer = {
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
let Status = {
 | 
			
		||||
	view: vnode => {
 | 
			
		||||
		let b = buffers.get(bufferCurrent)
 | 
			
		||||
		if (b === undefined)
 | 
			
		||||
			return m('.status', {}, 'Synchronizing...')
 | 
			
		||||
 | 
			
		||||
		let status = `${bufferCurrent}`
 | 
			
		||||
		if (b.hideUnimportant)
 | 
			
		||||
			status += `<H>`
 | 
			
		||||
		if (b.server !== undefined)
 | 
			
		||||
			status += ` (${b.server.state})`
 | 
			
		||||
		return m('.status', {}, status)
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
let Input = {
 | 
			
		||||
	counter: 0,
 | 
			
		||||
	stamp: textarea => {
 | 
			
		||||
@@ -749,8 +793,7 @@ let Main = {
 | 
			
		||||
		return m('.xP', {}, [
 | 
			
		||||
			m('.title', {}, [`xP (${state})`, m(Toolbar)]),
 | 
			
		||||
			m('.middle', {}, [m(BufferList), m(BufferContainer)]),
 | 
			
		||||
			// TODO: Indicate hideUnimportant.
 | 
			
		||||
			m('.status', {}, bufferCurrent),
 | 
			
		||||
			m(Status),
 | 
			
		||||
			m(Input),
 | 
			
		||||
		])
 | 
			
		||||
	},
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user