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

refactoring RoomPayload to use id instead of the instance

上级 910434da
...@@ -255,7 +255,7 @@ export class PuppetMock extends Puppet { ...@@ -255,7 +255,7 @@ export class PuppetMock extends Puppet {
const payload: RoomPayload = { const payload: RoomPayload = {
topic : 'mock topic', topic : 'mock topic',
memberList : [], memberIdList : [],
nameMap : {} as any, nameMap : {} as any,
roomAliasMap : {} as any, roomAliasMap : {} as any,
contactAliasMap: {} as any, contactAliasMap: {} as any,
......
...@@ -835,7 +835,7 @@ export class PuppetPuppeteer extends Puppet { ...@@ -835,7 +835,7 @@ export class PuppetPuppeteer extends Puppet {
// encryId: rawPayload.EncryChatRoomId, // ??? // encryId: rawPayload.EncryChatRoomId, // ???
topic: Misc.plainText(rawPayload.NickName || ''), topic: Misc.plainText(rawPayload.NickName || ''),
// ownerUin: rawPayload.OwnerUin, // ownerUin: rawPayload.OwnerUin,
memberList, memberIdList: memberList.map(c => c.id),
nameMap, nameMap,
roomAliasMap, roomAliasMap,
......
...@@ -57,9 +57,9 @@ export interface RoomQueryFilter { ...@@ -57,9 +57,9 @@ export interface RoomQueryFilter {
export interface RoomPayload { export interface RoomPayload {
// id: string, // id: string,
// encryId: string, // encryId: string,
topic: string, topic : string,
memberList: Contact[], memberIdList : string[],
owner?: Contact, ownerId? : string,
nameMap: Map<string, string>, nameMap: Map<string, string>,
roomAliasMap: Map<string, string>, roomAliasMap: Map<string, string>,
...@@ -173,11 +173,10 @@ export class Room extends PuppetAccessory implements Sayable { ...@@ -173,11 +173,10 @@ export class Room extends PuppetAccessory implements Sayable {
* @private * @private
* About the Generic: https://stackoverflow.com/q/43003970/1123955 * About the Generic: https://stackoverflow.com/q/43003970/1123955
*/ */
public static load<T extends typeof Room>(this: T, id: string): T['prototype'] { public static load<T extends typeof Room>(
if (!id) { this : T,
throw new Error('no id') id : string,
} ): T['prototype'] {
if (!this.pool) { if (!this.pool) {
this.pool = new Map<string, Room>() this.pool = new Map<string, Room>()
} }
...@@ -192,6 +191,15 @@ export class Room extends PuppetAccessory implements Sayable { ...@@ -192,6 +191,15 @@ export class Room extends PuppetAccessory implements Sayable {
return newRoom return newRoom
} }
// public load(
// this : Room,
// id : string,
// ): Room {
// const klass = instanceToClass(this, Room)
// const room = klass.load(id)
// return room
// }
/** /**
* *
* *
...@@ -250,9 +258,9 @@ export class Room extends PuppetAccessory implements Sayable { ...@@ -250,9 +258,9 @@ export class Room extends PuppetAccessory implements Sayable {
const payload = await this.puppet.roomPayload(this.id) const payload = await this.puppet.roomPayload(this.id)
await Promise.all( await Promise.all(
payload.memberList.map( payload.memberIdList
contact => contact.ready(), .map(id => this.puppet.Contact.load(id))
), .map(contact => contact.ready()),
) )
log.silly('Room', 'ready() this.payload="%s"', log.silly('Room', 'ready() this.payload="%s"',
util.inspect(payload), util.inspect(payload),
...@@ -265,7 +273,7 @@ export class Room extends PuppetAccessory implements Sayable { ...@@ -265,7 +273,7 @@ export class Room extends PuppetAccessory implements Sayable {
* @private * @private
*/ */
public isReady(): boolean { public isReady(): boolean {
return !!(this.payload && this.payload.memberList && this.payload.memberList.length) return !!(this.payload && this.payload.memberIdList && this.payload.memberIdList.length)
} }
public say(text: string) : Promise<void> public say(text: string) : Promise<void>
...@@ -453,11 +461,11 @@ export class Room extends PuppetAccessory implements Sayable { ...@@ -453,11 +461,11 @@ export class Room extends PuppetAccessory implements Sayable {
private delLocal(contact: Contact): void { private delLocal(contact: Contact): void {
log.verbose('Room', 'delLocal(%s)', contact) log.verbose('Room', 'delLocal(%s)', contact)
const memberList = this.payload && this.payload.memberList const memberIdList = this.payload && this.payload.memberIdList
if (memberList && memberList.length > 0) { if (memberIdList && memberIdList.length > 0) {
for (let i = 0; i < memberList.length; i++) { for (let i = 0; i < memberIdList.length; i++) {
if (memberList[i].id === contact.id) { if (memberIdList[i] === contact.id) {
memberList.splice(i, 1) memberIdList.splice(i, 1)
break break
} }
} }
...@@ -581,11 +589,11 @@ export class Room extends PuppetAccessory implements Sayable { ...@@ -581,11 +589,11 @@ export class Room extends PuppetAccessory implements Sayable {
* } * }
*/ */
public has(contact: Contact): boolean { public has(contact: Contact): boolean {
if (!this.payload || !this.payload.memberList) { if (!this.payload || !this.payload.memberIdList) {
return false return false
} }
return this.payload.memberList return this.payload.memberIdList
.filter(c => c.id === contact.id) .filter(id => id === contact.id)
.length > 0 .length > 0
} }
...@@ -637,7 +645,7 @@ export class Room extends PuppetAccessory implements Sayable { ...@@ -637,7 +645,7 @@ export class Room extends PuppetAccessory implements Sayable {
throw new Error('Room member find queryArg only support one key. multi key support is not availble now.') throw new Error('Room member find queryArg only support one key. multi key support is not availble now.')
} }
if (!this.payload || !this.payload.memberList) { if (!this.payload || !this.payload.memberIdList) {
log.warn('Room', 'member() not ready') log.warn('Room', 'member() not ready')
return [] return []
} }
...@@ -738,7 +746,7 @@ export class Room extends PuppetAccessory implements Sayable { ...@@ -738,7 +746,7 @@ export class Room extends PuppetAccessory implements Sayable {
public memberList(): Contact[] { public memberList(): Contact[] {
log.verbose('Room', 'memberList') log.verbose('Room', 'memberList')
if (!this.payload || !this.payload.memberList || this.payload.memberList.length < 1) { if (!this.payload || !this.payload.memberIdList || this.payload.memberIdList.length < 1) {
log.warn('Room', 'memberList() not ready') log.warn('Room', 'memberList() not ready')
log.verbose('Room', 'memberList() trying call refresh() to update') log.verbose('Room', 'memberList() trying call refresh() to update')
this.sync().then(() => { this.sync().then(() => {
...@@ -746,7 +754,8 @@ export class Room extends PuppetAccessory implements Sayable { ...@@ -746,7 +754,8 @@ export class Room extends PuppetAccessory implements Sayable {
}) })
return [] return []
} }
return this.payload.memberList const memberList = this.payload.memberIdList.map(id => this.puppet.Contact.load(id))
return memberList
} }
/** /**
...@@ -782,7 +791,13 @@ export class Room extends PuppetAccessory implements Sayable { ...@@ -782,7 +791,13 @@ export class Room extends PuppetAccessory implements Sayable {
public owner(): Contact | null { public owner(): Contact | null {
log.info('Room', 'owner()') log.info('Room', 'owner()')
return this.payload && this.payload.owner || null const ownerId = this.payload && this.payload.ownerId
if (!ownerId) {
return null
}
const owner = this.puppet.Contact.load(ownerId)
return owner
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册