提交 acb562db 编写于 作者: Huan (李卓桓)'s avatar Huan (李卓桓)

#32 add Room.modTopic

上级 99ca26f9
......@@ -152,6 +152,10 @@ class Bridge {
}
roomDelMember(roomId, contactId) {
if (!roomId || !contactId) {
throw new Error('no roomId or contactId')
}
return this.proxyWechaty('roomDelMember', roomId, contactId)
.catch(e => {
log.error('PuppetWebBridge', 'roomDelMember(%s, %s) exception: %s', roomId, contactId, e.message)
......@@ -160,6 +164,9 @@ class Bridge {
}
roomAddMember(roomId, contactId) {
if (!roomId || !contactId) {
throw new Error('no roomId or contactId')
}
return this.proxyWechaty('roomAddMember', roomId, contactId)
.catch(e => {
log.error('PuppetWebBridge', 'roomAddMember(%s, %s) exception: %s', roomId, contactId, e.message)
......@@ -167,7 +174,23 @@ class Bridge {
})
}
roomModTopic(roomId, topic) {
if (!roomId) {
throw new Error('no roomId')
}
return this.proxyWechaty('roomModTopic', roomId, topic)
.catch(e => {
log.error('PuppetWebBridge', 'roomModTopic(%s, %s) exception: %s', roomId, topic, e.message)
throw e
})
}
roomCreate(contactIdList) {
if (!contactIdList || !Array.isArray(contactIdList)) {
throw new Error('no valid contactIdList')
}
return this.proxyWechaty('roomCreate', contactIdList)
.catch(e => {
log.error('PuppetWebBridge', 'roomCreate(%s) exception: %s', contactIdList, e.message)
......
......@@ -415,10 +415,10 @@ this.onResourceRequested = function(request, net) {
// log.verbose('PuppetWebBrowser', `Browser.execute() driver.getSession: %s`, util.inspect(this.driver.getSession()))
if (this.dead()) { return Promise.reject(new Error('browser dead')) }
// XXX
console.log('#############')
console.log(script)
console.log(args)
// XXX
// console.log('#############')
// console.log(script)
// console.log(args)
return this.driver.executeScript.apply(this.driver, arguments)
.catch(e => {
......
......@@ -376,7 +376,18 @@ class PuppetWeb extends Puppet {
log.warn('PuppetWeb', 'roomAddMember(%s) rejected: %s', contact, e.message)
throw e
})
}
roomModTopic(room, topic) {
if (!this.bridge) {
return Promise.reject(new Error('fail: no bridge(yet)!'))
}
const roomId = room.get('id')
return this.bridge.roomModTopic(roomId, topic)
.catch(e => {
log.warn('PuppetWeb', 'roomModTopic(%s) rejected: %s', topic, e.message)
throw e
})
}
roomCreate(contactList) {
......
......@@ -474,11 +474,16 @@
function roomAddMember(ChatRoomName, UserName) {
const chatroomFactory = WechatyBro.glue.chatroomFactory
// XXX
log(ChatRoomName)
log(UserName)
// log(ChatRoomName)
// log(UserName)
return chatroomFactory.addMember(ChatRoomName, UserName)
}
function roomModTopic(ChatRoomName, topic) {
const chatroomFactory = WechatyBro.glue.chatroomFactory
return chatroomFactory.modTopic(ChatRoomName, topic)
}
function roomCreate(UserNameList) {
const UserNameListArg = UserNameList.map(n => { return { UserName: n } })
......@@ -558,6 +563,7 @@
, roomCreate
, roomAddMember
, roomDelMember
, roomModTopic
// test purpose
, isLogin: isLogin
......
......@@ -14,6 +14,7 @@ class Room {
log.silly('Room', `constructor(${id})`)
this.id = id
this.obj = {}
this.dirtyObj = {} // when refresh, use this to save dirty data for query
if (!Room.puppet) {
throw new Error('no puppet attached to Room')
}
......@@ -23,10 +24,11 @@ class Room {
toStringEx() { return `Room(${this.obj.name}[${this.id}])` }
isReady() {
return this.obj.members && this.obj.members.length
return this.obj.memberList && this.obj.memberList.length
}
refresh() {
this.dirtyObj = this.obj
this.obj = {}
return this.ready()
}
......@@ -40,7 +42,7 @@ class Room {
} else if (this.isReady()) {
return Promise.resolve(this)
} else if (this.obj.id) {
log.warn('Room', 'ready() has obj.id but members list empty in room %s. reloading', this.obj.name)
log.warn('Room', 'ready() has obj.id but memberList empty in room %s. reloading', this.obj.name)
}
contactGetter = contactGetter || Room.puppet.getContact.bind(Room.puppet)
......@@ -57,7 +59,7 @@ class Room {
}
name() { return UtilLib.plainText(this.obj.name) }
get(prop) { return this.obj[prop] }
get(prop) { return this.obj[prop] || this.dirtyObj[prop] }
parse(rawObj) {
if (!rawObj) {
......@@ -67,7 +69,7 @@ class Room {
id: rawObj.UserName
, encryId: rawObj.EncryChatRoomId // ???
, name: rawObj.NickName
, members: this.parseMemberList(rawObj.MemberList)
, memberList: this.parseMemberList(rawObj.MemberList)
}
}
......@@ -99,6 +101,37 @@ class Room {
throw new Error('contact not found')
}
return Room.puppet.roomDelMember(this, contact)
.then(r => this.delLocal(contact))
}
delLocal(contact) {
log.verbose('Room', 'delLocal(%s)', contact)
const memberList = this.obj.memberList
if (!memberList || memberList.length === 0) {
return true // already in refreshing
}
let i
for (i=0; i<memberList.length; i++) {
// XXX
// console.log('########################')
// console.log(i)
// console.log(memberList[i].id)
// console.log(contact.get('id'))
// console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!')
if (memberList[i].id === contact.get('id')) {
break
}
}
// console.log('found i=' + i)
if (i < memberList.length) {
// console.log('splicing before: ' + memberList.length)
memberList.splice(i, 1)
// console.log('splicing after: ' + memberList.length)
return true
}
return false
}
quit() {
......@@ -116,6 +149,12 @@ class Room {
return Room.puppet.roomAddMember(this, contact)
}
modTopic(topic) {
log.verbose('Room', 'modTopic(%s)', topic)
return Room.puppet.roomModTopic(this, topic)
}
static create(contactList) {
log.verbose('Room', 'create(%s)', contactList.join(','))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册