UNPKG

@hsaadawy/ngx-chat

Version:
51 lines (50 loc) 2.42 kB
import { BehaviorSubject, Observable } from 'rxjs'; import { Recipient } from '../../../../core/recipient'; import { ChatMessageListRegistryService } from '../../../chat-message-list-registry.service'; import { XmppChatAdapter } from '../xmpp-chat-adapter.service'; import { AbstractXmppPlugin } from './abstract-xmpp-plugin'; import { EntityTimePlugin } from './entity-time.plugin'; import { MultiUserChatPlugin } from './multi-user-chat.plugin'; import { PublishSubscribePlugin } from './publish-subscribe.plugin'; export declare type JidToNumber = Map<string, number>; /** * Unofficial plugin using XEP-0163 / PubSub to track count of unread messages per recipient * * It publishes entries to a private PubSub-Node 'ngxchat:unreadmessagedate' * The stored elements look like this: * <item id="current"> * <entries> * <last-read jid="user1@host1.tld" date="1546419050584"/> * <last-read jid="user2@host1.tld" date="1546419050000"/> * </entries> * </item> */ export declare class UnreadMessageCountPlugin extends AbstractXmppPlugin { private chatService; private chatMessageListRegistry; private publishSubscribePlugin; private entityTimePlugin; private multiUserChatPlugin; /** * already debounced to prevent the issues described in {@link UnreadMessageCountPlugin.jidToUnreadCount$}. */ readonly unreadMessageCountSum$: Observable<number>; /** * emits as soon as the unread message count changes, you might want to debounce it with e.g. half a a second, as * new messages might be acknowledged in another session. */ readonly jidToUnreadCount$: BehaviorSubject<JidToNumber>; private readonly jidToLastReadTimestamp; private readonly recipientIdToMessageSubscription; constructor(chatService: XmppChatAdapter, chatMessageListRegistry: ChatMessageListRegistryService, publishSubscribePlugin: PublishSubscribePlugin, entityTimePlugin: EntityTimePlugin, multiUserChatPlugin: MultiUserChatPlugin); private checkForUnreadCountChange; onBeforeOnline(): Promise<any>; onOffline(): void; private fetchLastSeenDates; private parseLastSeenDates; updateContactUnreadMessageState(recipient: Recipient): void; private calculateUnreadMessageCount; private persistLastSeenDates; private handlePubSubEvent; private mergeJidToDates; }