@hsaadawy/ngx-chat
Version:
51 lines (50 loc) • 2.42 kB
TypeScript
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;
}