Skip to content

Commit 2d58b19

Browse files
committed
feat: on_conversaion_updated with total(optional)
1 parent 7cec3e2 commit 2d58b19

File tree

12 files changed

+490
-487
lines changed

12 files changed

+490
-487
lines changed

crates/restsend-wasm/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "restsend-wasm"
3-
version = "1.2.7"
3+
version = "1.2.8"
44
edition = "2021"
55
description = "Restsend Instant Messaging Javascript/Wasm SDK"
66
authors = ["Restsend Team <[email protected]>"]

crates/restsend-wasm/src/callback.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,13 +304,17 @@ impl restsend_sdk::callback::RsCallback for CallbackWasmWrap {
304304
.map(|e| web_sys::console::error_1(&e));
305305
}
306306
}
307-
fn on_conversations_updated(&self, conversations: Vec<Conversation>) {
307+
fn on_conversations_updated(&self, conversations: Vec<Conversation>, total: Option<i64>) {
308308
if let Some(cb) = self.cb_on_conversations_updated.borrow().as_ref() {
309309
let serializer = &serde_wasm_bindgen::Serializer::new().serialize_maps_as_objects(true);
310310
let conversations = conversations
311311
.serialize(serializer)
312312
.unwrap_or(JsValue::UNDEFINED);
313-
cb.call1(&JsValue::NULL, &conversations)
313+
let total = match total {
314+
Some(t) => JsValue::from_f64(t as f64),
315+
None => JsValue::UNDEFINED,
316+
};
317+
cb.call2(&JsValue::NULL, &conversations, &total)
314318
.err()
315319
.map(|e| web_sys::console::error_1(&e));
316320
}

crates/restsend/src/callback.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub trait RsCallback: Send + Sync {
4747
return ChatRequestStatus::default();
4848
}
4949
fn on_topic_read(&self, topic_id: String, message: ChatRequest) {}
50-
fn on_conversations_updated(&self, conversations: Vec<Conversation>) {}
50+
fn on_conversations_updated(&self, conversations: Vec<Conversation>, total: Option<i64>) {}
5151
fn on_conversation_removed(&self, conversation_id: String) {}
5252
}
5353
#[allow(unused_variables)]

crates/restsend/src/client/conversation.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ impl Client {
216216
.unwrap_or_default();
217217

218218
if let Some(cb) = store_ref.callback.read().unwrap().as_ref() {
219-
cb.on_conversations_updated(r.items);
219+
cb.on_conversations_updated(r.items, None);
220220
}
221221
if !r.has_more {
222222
break;
@@ -278,7 +278,7 @@ impl Client {
278278

279279
let new_conversations_count = new_conversations.len() as u32;
280280
if let Some(cb) = store_ref.callback.read().unwrap().as_ref() {
281-
cb.on_conversations_updated(new_conversations);
281+
cb.on_conversations_updated(new_conversations, Some(lr.total));
282282
}
283283

284284
log::info!(
@@ -472,7 +472,7 @@ impl Client {
472472
}
473473
// callback
474474
if let Some(cb) = self.store.callback.read().unwrap().as_ref() {
475-
cb.on_conversations_updated(updated_conversations.clone());
475+
cb.on_conversations_updated(updated_conversations.clone(), None);
476476
}
477477
// sync to store
478478
let t = self.store.message_storage.table::<Conversation>().await;

crates/restsend/src/client/store/conversations.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ impl ClientStore {
238238

239239
pub fn emit_conversation_update(&self, conversation: Conversation) -> Result<Conversation> {
240240
if let Some(cb) = self.callback.read().unwrap().as_ref() {
241-
cb.on_conversations_updated(vec![conversation.clone()]);
241+
cb.on_conversations_updated(vec![conversation.clone()], None);
242242
}
243243
Ok(conversation)
244244
}
@@ -497,7 +497,7 @@ impl ClientStore {
497497
}
498498
};
499499
if let Some(cb) = callback.read().unwrap().as_ref() {
500-
cb.on_conversations_updated(vec![c]);
500+
cb.on_conversations_updated(vec![c], None);
501501
};
502502
}
503503
Err(e) => {

crates/restsend/src/client/store/requests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ impl ClientStore {
180180
if !conversation.is_partial {
181181
if let Some(cb) = callback.read().unwrap().as_ref() {
182182
conversation.last_seq = req.seq; // don't use conversation.last_seq, it's may be newer
183-
cb.on_conversations_updated(vec![conversation]);
183+
cb.on_conversations_updated(vec![conversation], None);
184184
}
185185
} else {
186186
self.fetch_conversation(&topic_id, false).await;

crates/restsend/src/client/tests/test_client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ impl callback::RsCallback for TestCallbackImpl {
4040
fn on_topic_read(&self, topic_id: String, message: ChatRequest) {
4141
warn!("on_topic_read: topic_id:{} message:{:?}", topic_id, message);
4242
}
43-
fn on_conversations_updated(&self, conversations: Vec<Conversation>) {
43+
fn on_conversations_updated(&self, conversations: Vec<Conversation>, _total: Option<i64>) {
4444
debug!("on_conversation_updated: {:?}", conversations);
4545
*self.last_topic_id.lock().unwrap() = conversations[0].topic_id.clone();
4646
self.is_update_conversation.store(true, Ordering::Relaxed);

js/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"Restsend Team <[email protected]>"
66
],
77
"description": "Restsend Instant Messaging Javascript/Wasm SDK",
8-
"version": "1.2.7",
8+
"version": "1.2.8",
99
"files": [
1010
"restsend_wasm_bg.wasm",
1111
"restsend_wasm.js",

js/restsend_wasm.d.ts

Lines changed: 102 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/* tslint:disable */
22
/* eslint-disable */
3+
export function setLogging(level?: string | null): void;
34
/**
45
* Signin with userId and password or token
56
*/
@@ -16,22 +17,8 @@ export function guestLogin(endpoint: string, userId: string, extra: any): Promis
1617
* Logout with token
1718
*/
1819
export function logout(endpoint: string, token: string): Promise<void>;
19-
export function setLogging(level?: string | null): void;
2020
export class Client {
2121
free(): void;
22-
/**
23-
* Create a new client
24-
* # Arguments
25-
* * `info` - AuthInfo
26-
* * `db_name` - database name (optional), create an indexeddb when set it
27-
*/
28-
constructor(info: any, db_name?: string | null);
29-
/**
30-
* connect immediately if the connection is broken
31-
*/
32-
app_active(): void;
33-
shutdown(): Promise<void>;
34-
connect(): Promise<void>;
3522
/**
3623
* Create a new topic
3724
* #Arguments
@@ -188,49 +175,18 @@ export class Client {
188175
*/
189176
removeTopicMember(topicId: string, userId: string): Promise<void>;
190177
/**
191-
* Get user info
192-
* #Arguments
193-
* * `userId` - user id
194-
* * `blocking` - blocking fetch from server
195-
* #Return
196-
* User info
197-
*/
198-
getUser(userId: string, blocking?: boolean | null): Promise<any>;
199-
/**
200-
* Get multiple users info
201-
* #Arguments
202-
* * `userIds` - Array of user id
203-
* #Return
204-
* Array of user info
205-
*/
206-
getUsers(userIds: string[]): Promise<any>;
207-
/**
208-
* Set user remark name
209-
* #Arguments
210-
* * `userId` - user id
211-
* * `remark` - remark name
212-
*/
213-
setUserRemark(userId: string, remark: string): Promise<void>;
214-
/**
215-
* Set user star
216-
* #Arguments
217-
* * `userId` - user id
218-
* * `star` - star
219-
*/
220-
setUserStar(userId: string, star: boolean): Promise<void>;
221-
/**
222-
* Set user block
223-
* #Arguments
224-
* * `userId` - user id
225-
* * `block` - block
178+
* Create a new client
179+
* # Arguments
180+
* * `info` - AuthInfo
181+
* * `db_name` - database name (optional), create an indexeddb when set it
226182
*/
227-
setUserBlock(userId: string, block: boolean): Promise<void>;
183+
constructor(info: any, db_name?: string | null);
228184
/**
229-
* Set allow guest chat
230-
* #Arguments
231-
* * `allow` - allow
185+
* connect immediately if the connection is broken
232186
*/
233-
setAllowGuestChat(allow: boolean): Promise<void>;
187+
app_active(): void;
188+
shutdown(): Promise<void>;
189+
connect(): Promise<void>;
234190
/**
235191
*
236192
* Send message with content
@@ -557,24 +513,49 @@ export class Client {
557513
*/
558514
filterConversation(predicate: any, lastUpdatedAt: any, limit: any): Promise<any>;
559515
/**
560-
* get the current connection status
561-
* return: connecting, connected, broken, shutdown
516+
* Get user info
517+
* #Arguments
518+
* * `userId` - user id
519+
* * `blocking` - blocking fetch from server
520+
* #Return
521+
* User info
562522
*/
563-
readonly connectionStatus: string;
523+
getUser(userId: string, blocking?: boolean | null): Promise<any>;
564524
/**
565-
* get the last alive at
525+
* Get multiple users info
526+
* #Arguments
527+
* * `userIds` - Array of user id
528+
* #Return
529+
* Array of user info
566530
*/
567-
readonly lastAliveAt: bigint;
568-
readonly unreadCount: Promise<number>;
531+
getUsers(userIds: string[]): Promise<any>;
569532
/**
570-
* set the keepalive interval with seconds
533+
* Set user remark name
534+
* #Arguments
535+
* * `userId` - user id
536+
* * `remark` - remark name
571537
*/
572-
set keepalive(value: number);
538+
setUserRemark(userId: string, remark: string): Promise<void>;
573539
/**
574-
* set the ping interval with seconds (for health check with error logs)
575-
* default is 30 seconds
540+
* Set user star
541+
* #Arguments
542+
* * `userId` - user id
543+
* * `star` - star
576544
*/
577-
set ping_interval(value: number);
545+
setUserStar(userId: string, star: boolean): Promise<void>;
546+
/**
547+
* Set user block
548+
* #Arguments
549+
* * `userId` - user id
550+
* * `block` - block
551+
*/
552+
setUserBlock(userId: string, block: boolean): Promise<void>;
553+
/**
554+
* Set allow guest chat
555+
* #Arguments
556+
* * `allow` - allow
557+
*/
558+
setAllowGuestChat(allow: boolean): Promise<void>;
578559
/**
579560
* Set the callback when connection connected
580561
*/
@@ -725,6 +706,25 @@ export class Client {
725706
* ```
726707
*/
727708
set onconversationsremoved(value: any);
709+
/**
710+
* get the current connection status
711+
* return: connecting, connected, broken, shutdown
712+
*/
713+
readonly connectionStatus: string;
714+
/**
715+
* get the last alive at
716+
*/
717+
readonly lastAliveAt: bigint;
718+
readonly unreadCount: Promise<number>;
719+
/**
720+
* set the keepalive interval with seconds
721+
*/
722+
set keepalive(value: number);
723+
/**
724+
* set the ping interval with seconds (for health check with error logs)
725+
* default is 30 seconds
726+
*/
727+
set ping_interval(value: number);
728728
}
729729
export class IntoUnderlyingByteSource {
730730
private constructor();
@@ -753,16 +753,19 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl
753753

754754
export interface InitOutput {
755755
readonly memory: WebAssembly.Memory;
756-
readonly __wbg_client_free: (a: number, b: number) => void;
757-
readonly client_new: (a: any, b: number, c: number) => number;
758-
readonly client_connectionStatus: (a: number) => [number, number];
759-
readonly client_lastAliveAt: (a: number) => bigint;
760-
readonly client_unreadCount: (a: number) => any;
761-
readonly client_app_active: (a: number) => void;
762-
readonly client_set_keepalive: (a: number, b: number) => void;
763-
readonly client_shutdown: (a: number) => any;
764-
readonly client_connect: (a: number) => any;
765-
readonly client_set_ping_interval: (a: number, b: number) => void;
756+
readonly client_set_onconnected: (a: number, b: any) => void;
757+
readonly client_set_onconnecting: (a: number, b: any) => void;
758+
readonly client_set_ontokenexpired: (a: number, b: any) => void;
759+
readonly client_set_onbroken: (a: number, b: any) => void;
760+
readonly client_set_onkickoff: (a: number, b: any) => void;
761+
readonly client_set_onsystemrequest: (a: number, b: any) => void;
762+
readonly client_set_onunknownrequest: (a: number, b: any) => void;
763+
readonly client_set_ontopictyping: (a: number, b: any) => void;
764+
readonly client_set_ontopicmessage: (a: number, b: any) => void;
765+
readonly client_set_ontopicread: (a: number, b: any) => void;
766+
readonly client_set_onconversationsupdated: (a: number, b: any) => void;
767+
readonly client_set_onconversationsremoved: (a: number, b: any) => void;
768+
readonly setLogging: (a: number, b: number) => void;
766769
readonly client_createTopic: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => any;
767770
readonly client_joinTopic: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => any;
768771
readonly client_addMember: (a: number, b: number, c: number, d: number, e: number) => any;
@@ -783,16 +786,16 @@ export interface InitOutput {
783786
readonly client_acceptTopicJoin: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => any;
784787
readonly client_declineTopicJoin: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => any;
785788
readonly client_removeTopicMember: (a: number, b: number, c: number, d: number, e: number) => any;
786-
readonly client_getUser: (a: number, b: number, c: number, d: number) => any;
787-
readonly client_getUsers: (a: number, b: number, c: number) => any;
788-
readonly client_setUserRemark: (a: number, b: number, c: number, d: number, e: number) => any;
789-
readonly client_setUserStar: (a: number, b: number, c: number, d: number) => any;
790-
readonly client_setUserBlock: (a: number, b: number, c: number, d: number) => any;
791-
readonly client_setAllowGuestChat: (a: number, b: number) => any;
792-
readonly signin: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => any;
793-
readonly signup: (a: number, b: number, c: number, d: number, e: number, f: number) => any;
794-
readonly guestLogin: (a: number, b: number, c: number, d: number, e: any) => any;
795-
readonly logout: (a: number, b: number, c: number, d: number) => any;
789+
readonly __wbg_client_free: (a: number, b: number) => void;
790+
readonly client_new: (a: any, b: number, c: number) => number;
791+
readonly client_connectionStatus: (a: number) => [number, number];
792+
readonly client_lastAliveAt: (a: number) => bigint;
793+
readonly client_unreadCount: (a: number) => any;
794+
readonly client_app_active: (a: number) => void;
795+
readonly client_set_keepalive: (a: number, b: number) => void;
796+
readonly client_shutdown: (a: number) => any;
797+
readonly client_connect: (a: number) => any;
798+
readonly client_set_ping_interval: (a: number, b: number) => void;
796799
readonly client_doSend: (a: number, b: number, c: number, d: any, e: any) => any;
797800
readonly client_doTyping: (a: number, b: number, c: number) => any;
798801
readonly client_doRecall: (a: number, b: number, c: number, d: number, e: number, f: any) => any;
@@ -805,19 +808,6 @@ export interface InitOutput {
805808
readonly client_doSendText: (a: number, b: number, c: number, d: number, e: number, f: any) => any;
806809
readonly client_doSendImage: (a: number, b: number, c: number, d: any, e: any) => any;
807810
readonly client_doUpdateExtra: (a: number, b: number, c: number, d: number, e: number, f: any, g: any) => any;
808-
readonly client_set_onconnected: (a: number, b: any) => void;
809-
readonly client_set_onconnecting: (a: number, b: any) => void;
810-
readonly client_set_ontokenexpired: (a: number, b: any) => void;
811-
readonly client_set_onbroken: (a: number, b: any) => void;
812-
readonly client_set_onkickoff: (a: number, b: any) => void;
813-
readonly client_set_onsystemrequest: (a: number, b: any) => void;
814-
readonly client_set_onunknownrequest: (a: number, b: any) => void;
815-
readonly client_set_ontopictyping: (a: number, b: any) => void;
816-
readonly client_set_ontopicmessage: (a: number, b: any) => void;
817-
readonly client_set_ontopicread: (a: number, b: any) => void;
818-
readonly client_set_onconversationsupdated: (a: number, b: any) => void;
819-
readonly client_set_onconversationsremoved: (a: number, b: any) => void;
820-
readonly setLogging: (a: number, b: number) => void;
821811
readonly client_createChat: (a: number, b: number, c: number) => any;
822812
readonly client_cleanMessages: (a: number, b: number, c: number) => any;
823813
readonly client_removeMessages: (a: number, b: number, c: number, d: number, e: number) => any;
@@ -836,6 +826,16 @@ export interface InitOutput {
836826
readonly client_clearConversation: (a: number, b: number, c: number) => any;
837827
readonly client_setConversationExtra: (a: number, b: number, c: number, d: any) => any;
838828
readonly client_filterConversation: (a: number, b: any, c: any, d: any) => any;
829+
readonly signin: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => any;
830+
readonly signup: (a: number, b: number, c: number, d: number, e: number, f: number) => any;
831+
readonly guestLogin: (a: number, b: number, c: number, d: number, e: any) => any;
832+
readonly logout: (a: number, b: number, c: number, d: number) => any;
833+
readonly client_getUser: (a: number, b: number, c: number, d: number) => any;
834+
readonly client_getUsers: (a: number, b: number, c: number) => any;
835+
readonly client_setUserRemark: (a: number, b: number, c: number, d: number, e: number) => any;
836+
readonly client_setUserStar: (a: number, b: number, c: number, d: number) => any;
837+
readonly client_setUserBlock: (a: number, b: number, c: number, d: number) => any;
838+
readonly client_setAllowGuestChat: (a: number, b: number) => any;
839839
readonly __wbg_intounderlyingbytesource_free: (a: number, b: number) => void;
840840
readonly intounderlyingbytesource_type: (a: number) => [number, number];
841841
readonly intounderlyingbytesource_autoAllocateChunkSize: (a: number) => number;
@@ -856,10 +856,10 @@ export interface InitOutput {
856856
readonly __wbindgen_export_4: WebAssembly.Table;
857857
readonly __wbindgen_export_5: WebAssembly.Table;
858858
readonly __wbindgen_free: (a: number, b: number, c: number) => void;
859-
readonly _dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hafc7650d064a213f: (a: number, b: number) => void;
860-
readonly closure587_externref_shim: (a: number, b: number, c: any) => void;
861-
readonly closure847_externref_shim: (a: number, b: number, c: any) => void;
862-
readonly closure888_externref_shim: (a: number, b: number, c: any, d: any) => void;
859+
readonly closure603_externref_shim: (a: number, b: number, c: any) => void;
860+
readonly _dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1a9e3aace0878b63: (a: number, b: number) => void;
861+
readonly closure846_externref_shim: (a: number, b: number, c: any) => void;
862+
readonly closure887_externref_shim: (a: number, b: number, c: any, d: any) => void;
863863
readonly __wbindgen_start: () => void;
864864
}
865865

0 commit comments

Comments
 (0)