2017-01-27 14:16:35 -08:00
|
|
|
const EventEmitter = require('events')
|
2016-05-03 14:32:22 -07:00
|
|
|
|
2017-01-27 14:16:35 -08:00
|
|
|
module.exports = class MessageManager extends EventEmitter{
|
|
|
|
constructor (opts) {
|
|
|
|
super()
|
|
|
|
this.messages = []
|
|
|
|
}
|
2016-05-03 14:32:22 -07:00
|
|
|
|
2017-01-27 14:16:35 -08:00
|
|
|
getMsgList () {
|
|
|
|
return this.messages
|
|
|
|
}
|
2016-05-03 14:32:22 -07:00
|
|
|
|
2017-01-27 14:16:35 -08:00
|
|
|
unconfirmedMsgs () {
|
|
|
|
let messages = this.getMsgList()
|
|
|
|
return messages.filter(msg => msg.status === 'unconfirmed')
|
|
|
|
.reduce((result, msg) => { result[msg.id] = msg; return result }, {})
|
|
|
|
}
|
2016-05-03 14:32:22 -07:00
|
|
|
|
2017-01-27 14:16:35 -08:00
|
|
|
_saveMsgList (msgList) {
|
|
|
|
this.messages = msgList
|
|
|
|
}
|
2016-05-03 14:32:22 -07:00
|
|
|
|
2017-01-27 14:16:35 -08:00
|
|
|
addMsg (msg) {
|
|
|
|
let messages = this.getMsgList()
|
|
|
|
messages.push(msg)
|
|
|
|
this._saveMsgList(messages)
|
|
|
|
}
|
2016-05-03 14:32:22 -07:00
|
|
|
|
2017-01-27 14:16:35 -08:00
|
|
|
getMsg (msgId) {
|
|
|
|
let messages = this.getMsgList()
|
|
|
|
let matching = messages.filter(msg => msg.id === msgId)
|
|
|
|
return matching.length > 0 ? matching[0] : null
|
|
|
|
}
|
2016-05-03 14:32:22 -07:00
|
|
|
|
2017-01-27 14:16:35 -08:00
|
|
|
confirmMsg (msgId) {
|
|
|
|
this._setMsgStatus(msgId, 'confirmed')
|
|
|
|
}
|
2016-05-03 14:32:22 -07:00
|
|
|
|
2017-01-27 14:16:35 -08:00
|
|
|
rejectMsg (msgId) {
|
|
|
|
this._setMsgStatus(msgId, 'rejected')
|
|
|
|
}
|
2016-05-03 14:32:22 -07:00
|
|
|
|
2017-01-27 14:16:35 -08:00
|
|
|
_setMsgStatus (msgId, status) {
|
|
|
|
let msg = this.getMsg(msgId)
|
|
|
|
if (msg) msg.status = status
|
|
|
|
this.updateMsg(msg)
|
|
|
|
}
|
2016-05-03 14:32:22 -07:00
|
|
|
|
2017-01-27 14:16:35 -08:00
|
|
|
updateMsg (msg) {
|
|
|
|
let messages = this.getMsgList()
|
|
|
|
let index = messages.findIndex((message) => message.id === msg.id)
|
|
|
|
if (index !== -1) {
|
|
|
|
this.emit('update', msg.id)
|
|
|
|
messages[index] = msg
|
2016-05-03 14:32:22 -07:00
|
|
|
}
|
2017-01-27 14:16:35 -08:00
|
|
|
this._saveMsgList(messages)
|
2016-05-03 14:32:22 -07:00
|
|
|
}
|
|
|
|
}
|