summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib.rs66
1 files changed, 31 insertions, 35 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 505a97d..194a8d9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -26,8 +26,6 @@ use leptos::{
tachys::{dom::document, reactive_graph::bind::GetValue},
task::{spawn, spawn_local},
};
-use leptos_meta::Stylesheet;
-use leptos_use::{UseTextareaAutosizeReturn, use_textarea_autosize};
use reactive_stores::{ArcStore, Store, StoreField};
use stylance::import_style;
use thiserror::Error;
@@ -485,7 +483,7 @@ impl OpenChatsPanel {
#[derive(Store)]
pub struct UserPresences {
#[store(key: JID = |(jid, _)| jid.clone())]
- user_presences: HashMap<JID, RwSignal<Presences>>,
+ user_presences: HashMap<JID, ArcRwSignal<Presences>>,
}
impl UserPresences {
@@ -496,13 +494,13 @@ impl UserPresences {
}
// TODO: should be a bare jid
- pub fn get_user_presences(&mut self, user: &JID) -> RwSignal<Presences> {
+ pub fn get_user_presences(&mut self, user: &JID) -> ArcRwSignal<Presences> {
if let Some(presences) = self.user_presences.get(user) {
- *presences
+ presences.clone()
} else {
let presences = Presences::new();
- let signal = RwSignal::new(presences);
- self.user_presences.insert(user.clone(), signal);
+ let signal = ArcRwSignal::new(presences);
+ self.user_presences.insert(user.clone(), signal.clone());
signal
}
}
@@ -670,7 +668,7 @@ fn Macaw(
if let Some(resource) = from.resourcepart {
let mut presences = Presences::new();
presences.update_presence(resource, presence);
- user_presences.write().user_presences.insert(bare_jid, RwSignal::new(presences));
+ user_presences.write().user_presences.insert(bare_jid, ArcRwSignal::new(presences));
}
}
}
@@ -680,7 +678,7 @@ fn Macaw(
debug!("after got message");
spawn_local(async move {
message_subscriptions
- .write_untracked()
+ .write()
.broadcast(to, new_message)
.await
});
@@ -857,18 +855,16 @@ pub fn AvatarWithPresence(user: Store<User>) -> impl IntoView {
}).unwrap_or_default();
view! {
- <Transition fallback=|| view! { <img class="avatar" src=NO_AVATAR /> } >
- <div class="avatar-with-presence">
- <img class="avatar" src=move || avatar.read().as_deref().map(|avatar| avatar.clone()).unwrap_or_default() />
- {move || if let Some(icon) = show_icon() {
- view!{
- <IconComponent icon=icon class:presence-show-icon=true />
- }.into_any()
- } else {
- view! {}.into_any()
- }}
- </div>
- </Transition>
+ <div class="avatar-with-presence">
+ <img class="avatar" src=move || avatar.get() />
+ {move || if let Some(icon) = show_icon() {
+ view!{
+ <IconComponent icon=icon class:presence-show-icon=true />
+ }.into_any()
+ } else {
+ view! {}.into_any()
+ }}
+ </div>
}
}
@@ -903,7 +899,7 @@ pub fn MessageHistoryBuffer(chat: MacawChat) -> impl IntoView {
async move {
let client = use_context::<Client>().expect("client not in context");
let messages = client
- .get_messages_with_users(chat_chat.correspondent().get_untracked())
+ .get_messages_with_users(chat_chat.correspondent().get())
.await
.map_err(|e| e.to_string());
match messages {
@@ -937,7 +933,7 @@ pub fn MessageHistoryBuffer(chat: MacawChat) -> impl IntoView {
load_messages.await;
let (sub_id, mut new_messages) = new_messages_signal
.write()
- .subscribe_chat(chat_chat.correspondent().get_untracked());
+ .subscribe_chat(chat_chat.correspondent().get());
set_sub_id.set(Some(sub_id));
while let Some(new_message) = new_messages.recv().await {
debug!("got new message in let message buffer");
@@ -945,17 +941,17 @@ pub fn MessageHistoryBuffer(chat: MacawChat) -> impl IntoView {
if let Some((_, last)) = messages.last() {
if *<ArcStore<filamento::chat::Message> as Clone>::clone(&last.message)
.timestamp()
- .read_untracked()
+ .read()
< *<ArcStore<filamento::chat::Message> as Clone>::clone(&new_message)
.timestamp()
- .read_untracked()
+ .read()
{
messages.insert(
<ArcStore<filamento::chat::Message> as Clone>::clone(
&new_message.message,
)
.id()
- .get_untracked(),
+ .get(),
new_message,
);
debug!("set the new message in message buffer");
@@ -963,13 +959,13 @@ pub fn MessageHistoryBuffer(chat: MacawChat) -> impl IntoView {
let index = match messages.binary_search_by(|_, value| {
<ArcStore<filamento::chat::Message> as Clone>::clone(&value.message)
.timestamp()
- .read_untracked()
+ .read()
.cmp(
&<ArcStore<filamento::chat::Message> as Clone>::clone(
&new_message.message,
)
.timestamp()
- .read_untracked(),
+ .read(),
)
}) {
Ok(i) => i,
@@ -982,7 +978,7 @@ pub fn MessageHistoryBuffer(chat: MacawChat) -> impl IntoView {
&new_message.message,
)
.id()
- .get_untracked(),
+ .get(),
new_message,
);
debug!("set the new message in message buffer");
@@ -991,7 +987,7 @@ pub fn MessageHistoryBuffer(chat: MacawChat) -> impl IntoView {
messages.insert(
<ArcStore<filamento::chat::Message> as Clone>::clone(&new_message.message)
.id()
- .get_untracked(),
+ .get(),
new_message,
);
debug!("set the new message in message buffer");
@@ -1191,7 +1187,7 @@ pub fn Message(message: MacawMessage, major: bool, r#final: bool) -> impl IntoVi
<div class:final=r#final class="chat-message major">
<div class="left">
<Transition fallback=|| view! { <img class="avatar" src=NO_AVATAR /> } >
- <img class="avatar" src=move || avatar.read().as_deref().map(|avatar| avatar.clone()).unwrap_or_default() />
+ <img class="avatar" src=move || avatar.get() />
</Transition>
</div>
<div class="middle">
@@ -1233,11 +1229,11 @@ pub fn ChatViewMessageComposer(chat: JID) -> impl IntoView {
let value = chat.clone();
spawn_local(async move {
match client
- .read_untracked()
+ .read()
.send_message(
value,
Body {
- body: new_message.get_untracked(),
+ body: new_message.get(),
},
)
.await
@@ -1245,7 +1241,7 @@ pub fn ChatViewMessageComposer(chat: JID) -> impl IntoView {
Ok(_) => {
new_message.set("".to_string());
message_input
- .write_untracked()
+ .write()
.as_ref()
.expect("message input div not mounted")
.set_text_content(Some(""));
@@ -1288,7 +1284,7 @@ pub fn ChatViewMessageComposer(chat: JID) -> impl IntoView {
on:keydown=move |ev| {
match ev.key_code() {
16 => set_shift_pressed.set(true),
- 13 => if !shift_pressed.get_untracked() {
+ 13 => if !shift_pressed.get() {
ev.prevent_default();
send_message();
}