|
|
@ -5,6 +5,7 @@ import { ChatMessageViewModel } from "../viewmodel/ChatMessageViewModel"; |
|
|
|
import { ChatModelHelper } from "./ChatModelHelper"; |
|
|
|
import log = require('loglevel'); |
|
|
|
import { ObserverData } from "../observe/ObserverData"; |
|
|
|
import { ActiveUserViewModel } from "../viewmodel/ActiveUserViewModel"; |
|
|
|
|
|
|
|
interface Params { |
|
|
|
userName: string, |
|
|
@ -44,10 +45,11 @@ export class ChatModel implements Subject<ChatMessageViewModel> { |
|
|
|
|
|
|
|
private storeUserMessages(username: string, messages: ChatMessageViewModel[], op: string) { |
|
|
|
switch (op) { |
|
|
|
case "clear": this._messagesMap.set(username, []); |
|
|
|
case "clear": this._messagesMap.set(username, []); break; |
|
|
|
case "page": this._messagesMap.set(username, messages.concat(this.getStoredUserMessages(username))); break; |
|
|
|
// case "page": this._messagesMap.set(username, messages);
|
|
|
|
case "new": this._messagesMap.set(username, this.getStoredUserMessages(username).concat(messages)); break; |
|
|
|
case "update": this._messagesMap.set(username, this.getStoredUserMessages(username).concat(messages)); break; |
|
|
|
default: new Error("Invalid option"); |
|
|
|
} |
|
|
|
|
|
|
@ -86,6 +88,12 @@ export class ChatModel implements Subject<ChatMessageViewModel> { |
|
|
|
observer.update(od); |
|
|
|
} |
|
|
|
} break; |
|
|
|
case "update": { |
|
|
|
const od: ObserverData<ChatMessageViewModel> = { data: p.data, op: p.op } |
|
|
|
for (const observer of this._observers) { |
|
|
|
observer.update(od); |
|
|
|
} |
|
|
|
} break; |
|
|
|
default: { log.error("error") } |
|
|
|
} |
|
|
|
} |
|
|
@ -100,28 +108,31 @@ export class ChatModel implements Subject<ChatMessageViewModel> { |
|
|
|
this.notify({ userName: "", data: [], op: "clear" }) |
|
|
|
} |
|
|
|
|
|
|
|
public async getMessages(contactName: string, passphrase: string, lastMessageTime: string | null, op: string): Promise<ChatMessageViewModel[]> { |
|
|
|
if (this._messagePageMap.get(contactName) == null) |
|
|
|
this._messagePageMap.set(contactName, 0); |
|
|
|
public async getMessages(vm: ActiveUserViewModel, op: string): Promise<ChatMessageViewModel[]> { |
|
|
|
if (this._messagePageMap.get(vm.userName!) == null) |
|
|
|
this._messagePageMap.set(vm.userName!, 0); |
|
|
|
|
|
|
|
const pageNumber = this._messagePageMap.get(contactName) |
|
|
|
const cVMs = await this._chatModelHelper.getMessages(contactName, passphrase, pageNumber!, lastMessageTime, op); |
|
|
|
const pageNumber = this._messagePageMap.get(vm.userName!) |
|
|
|
const cVMs = await this._chatModelHelper.getMessages(vm.userName!, vm.passphrase, pageNumber!, vm.lastMessageTime!, op); |
|
|
|
if (cVMs != null) { |
|
|
|
log.info('Subject: My state has just changed') |
|
|
|
const existingMessages = this.getStoredUserMessages(contactName); |
|
|
|
const existingMessages = this.getStoredUserMessages(vm.userName!); |
|
|
|
log.debug('existing message:') |
|
|
|
log.debug(existingMessages); |
|
|
|
log.debug('new messages:') |
|
|
|
log.debug(cVMs); |
|
|
|
this.storeUserMessages(contactName, cVMs, op); |
|
|
|
this.notify({ userName: contactName, data: cVMs, op: op }); |
|
|
|
this.storeUserMessages(vm.userName!, cVMs, op); |
|
|
|
this.notify({ userName: vm.userName!, data: cVMs, op: op }); |
|
|
|
} |
|
|
|
else { |
|
|
|
log.error('Messages were null'); |
|
|
|
} |
|
|
|
|
|
|
|
if (cVMs.length != 0) { |
|
|
|
this._messagePageMap.set(contactName, this._messagePageMap.get(contactName)! + 1); |
|
|
|
if (cVMs.length != 0 && op == "update") vm.lastMessageTime = cVMs[cVMs.length - 1].messageTime; |
|
|
|
|
|
|
|
if (cVMs.length != 0 && op != "update") { |
|
|
|
|
|
|
|
this._messagePageMap.set(vm.userName!, this._messagePageMap.get(vm.userName!)! + 1); |
|
|
|
} |
|
|
|
|
|
|
|
return cVMs; |
|
|
|