Merge pull request #36 from status-im/remove-warnings

This commit is contained in:
Franck Royer 2021-10-06 14:18:06 +11:00 committed by GitHub
commit a2859e1e03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 95 additions and 14 deletions

View File

@ -74,7 +74,7 @@ export function useMessenger(chatId: string, chatIdList: string[]) {
const addNewMessage = useCallback( const addNewMessage = useCallback(
(msg: ApplicationMetadataMessage, id: string) => { (msg: ApplicationMetadataMessage, id: string) => {
if (msg.signer && msg.chatMessage?.text) { if (msg.signer && msg.chatMessage?.text && msg.chatMessage.clock) {
const content = msg.chatMessage.text; const content = msg.chatMessage.text;
const date = new Date(msg.chatMessage.clock); const date = new Date(msg.chatMessage.clock);
addNewMessageRaw(msg.signer, content, date, id); addNewMessageRaw(msg.signer, content, date, id);

View File

@ -14,7 +14,7 @@ export class Chat {
/** /**
* Create a public chat room. * Create a public chat room.
*/ */
public static async create(id: string) { public static async create(id: string): Promise<Chat> {
const symKey = await createSymKeyFromPassword(id); const symKey = await createSymKeyFromPassword(id);
return new Chat(id, symKey); return new Chat(id, symKey);
@ -34,7 +34,7 @@ export class Chat {
return message; return message;
} }
public handleNewMessage(message: ChatMessage) { public handleNewMessage(message: ChatMessage): void {
this._updateClockFromMessage(message); this._updateClockFromMessage(message);
} }
@ -52,11 +52,18 @@ export class Chat {
} }
private _updateClockFromMessage(message: ChatMessage): void { private _updateClockFromMessage(message: ChatMessage): void {
if (!this.lastMessage || this.lastMessage.clock <= message.clock) { if (
!this.lastMessage ||
!this.lastMessage.clock ||
(message.clock && this.lastMessage.clock <= message.clock)
) {
this.lastMessage = message; this.lastMessage = message;
} }
if (!this.lastClockValue || this.lastClockValue < message.clock) { if (
!this.lastClockValue ||
(message.clock && this.lastClockValue < message.clock)
) {
this.lastClockValue = message.clock; this.lastClockValue = message.clock;
} }
} }

View File

@ -1,7 +1,12 @@
import { Reader } from "protobufjs"; import { Reader } from "protobufjs";
import * as proto from "./proto/communities/v1/chat_message"; import * as proto from "./proto/communities/v1/chat_message";
import { ChatMessage_ContentType } from "./proto/communities/v1/chat_message"; import {
AudioMessage,
ChatMessage_ContentType,
ImageMessage,
StickerMessage,
} from "./proto/communities/v1/chat_message";
import { MessageType } from "./proto/communities/v1/enums"; import { MessageType } from "./proto/communities/v1/enums";
export class ChatMessage { export class ChatMessage {
@ -15,7 +20,7 @@ export class ChatMessage {
timestamp: number, timestamp: number,
text: string, text: string,
chatId: string chatId: string
) { ): ChatMessage {
const proto = { const proto = {
clock, // ms? clock, // ms?
timestamp, //ms? timestamp, //ms?
@ -50,11 +55,80 @@ export class ChatMessage {
return proto.ChatMessage.encode(this.proto).finish(); return proto.ChatMessage.encode(this.proto).finish();
} }
public get clock() { /** Lamport timestamp of the chat message */
public get clock(): number | undefined {
return this.proto.clock; return this.proto.clock;
} }
get text(): string | undefined { /**
* Unix timestamps in milliseconds, currently not used as we use whisper as more reliable, but here
* so that we don't rely on it
*/
public get timestamp(): number | undefined {
return this.proto.timestamp;
}
/**
* Text of the message
*/
public get text(): string | undefined {
return this.proto.text; return this.proto.text;
} }
/**
* Id of the message that we are replying to
*/
public get responseTo(): string | undefined {
return this.proto.responseTo;
}
/**
* Ens name of the sender
*/
public get ensName(): string | undefined {
return this.proto.ensName;
}
/**
* Chat id, this field is symmetric for public-chats and private group chats,
* but asymmetric in case of one-to-ones, as the sender will use the chat-id
* of the received, while the receiver will use the chat-id of the sender.
* Probably should be the concatenation of sender-pk & receiver-pk in alphabetical order
*/
public get chatId(): string {
return this.proto.chatId;
}
/**
* The type of message (public/one-to-one/private-group-chat)
*/
public get messageType(): MessageType | undefined {
return this.proto.messageType;
}
/**
* The type of the content of the message
*/
public get contentType(): ChatMessage_ContentType | undefined {
return this.proto.contentType;
}
public get sticker(): StickerMessage | undefined {
return this.proto.sticker;
}
public get image(): ImageMessage | undefined {
return this.proto.image;
}
public get audio(): AudioMessage | undefined {
return this.proto.audio;
}
/**
* Used when sharing a community via a chat message.
*/
public get community(): Uint8Array | undefined {
return this.proto.community;
}
} }

View File

@ -28,7 +28,7 @@ export class Messenger {
public static async create( public static async create(
identity: Identity, identity: Identity,
wakuOptions?: WakuCreateOptions wakuOptions?: WakuCreateOptions
) { ): Promise<Messenger> {
const _wakuOptions = Object.assign({ bootstrap: true }, wakuOptions); const _wakuOptions = Object.assign({ bootstrap: true }, wakuOptions);
const waku = await Waku.create(_wakuOptions); const waku = await Waku.create(_wakuOptions);
return new Messenger(identity, waku); return new Messenger(identity, waku);
@ -39,7 +39,7 @@ export class Messenger {
* *
* Use `addListener` to get messages received on this chat. * Use `addListener` to get messages received on this chat.
*/ */
public async joinChat(chatId: string) { public async joinChat(chatId: string): Promise<void> {
if (this.chatsById.has(chatId)) if (this.chatsById.has(chatId))
throw `Failed to join chat, it is already joined: ${chatId}`; throw `Failed to join chat, it is already joined: ${chatId}`;
@ -102,7 +102,7 @@ export class Messenger {
public addObserver( public addObserver(
observer: (message: ApplicationMetadataMessage) => void, observer: (message: ApplicationMetadataMessage) => void,
chatId: string chatId: string
) { ): void {
// Not sure this is the best design here. Maybe `addObserver` and `joinChat` should be merged. // Not sure this is the best design here. Maybe `addObserver` and `joinChat` should be merged.
if (!this.chatsById.has(chatId)) if (!this.chatsById.has(chatId))
@ -153,7 +153,7 @@ export class Messenger {
if (!chat) if (!chat)
throw `Failed to retrieve messages, chat is not joined: ${chatId}`; throw `Failed to retrieve messages, chat is not joined: ${chatId}`;
const _callback = (wakuMessages: WakuMessage[]) => { const _callback = (wakuMessages: WakuMessage[]): void => {
const isDefined = ( const isDefined = (
msg: ApplicationMetadataMessage | undefined msg: ApplicationMetadataMessage | undefined
): msg is ApplicationMetadataMessage => { ): msg is ApplicationMetadataMessage => {
@ -187,7 +187,7 @@ export class Messenger {
private _handleNewChatMessage( private _handleNewChatMessage(
chat: Chat, chat: Chat,
message: ApplicationMetadataMessage message: ApplicationMetadataMessage
) { ): void {
if (!message.payload || !message.type || !message.signature) return; if (!message.payload || !message.type || !message.signature) return;
const chatMessage = ChatMessage.decode(message.payload); const chatMessage = ChatMessage.decode(message.payload);