10 Commits

Author SHA1 Message Date
Ren Amamiya
cc4174a695 . 2026-04-04 09:15:31 +07:00
Ren Amamiya
ecd25d04da clean up 2026-04-04 09:09:02 +07:00
Ren Amamiya
0403d0e4ec . 2026-04-04 08:53:20 +07:00
Ren Amamiya
707533c145 refactor 2026-04-03 16:27:11 +07:00
Ren Amamiya
163865eb46 clean up 2026-04-03 15:23:26 +07:00
Ren Amamiya
fbc9883680 . 2026-04-02 19:33:29 +07:00
Ren Amamiya
d1f0373916 . 2026-04-02 17:12:55 +07:00
Ren Amamiya
216c877ebf . 2026-04-02 13:10:21 +07:00
Ren Amamiya
1b4aa02cc0 clean up 2026-04-01 15:19:05 +07:00
Ren Amamiya
b547776263 update deps 2026-04-01 15:13:11 +07:00
9 changed files with 164 additions and 691 deletions

759
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@ members = ["crates/*"]
default-members = ["crates/coop"]
[workspace.package]
version = "1.0.0-beta3"
version = "1.0.0-beta2"
edition = "2024"
publish = false
@@ -15,6 +15,7 @@ gpui_platform = { git = "https://github.com/zed-industries/zed", features = ["fo
gpui_linux = { git = "https://github.com/zed-industries/zed" }
gpui_windows = { git = "https://github.com/zed-industries/zed" }
gpui_macos = { git = "https://github.com/zed-industries/zed" }
gpui_web = { git = "https://github.com/zed-industries/zed" }
gpui_tokio = { git = "https://github.com/zed-industries/zed" }
reqwest_client = { git = "https://github.com/zed-industries/zed" }
@@ -42,7 +43,6 @@ smallvec = "1.14.0"
smol = "2"
tracing = "0.1.40"
webbrowser = "1.0.4"
tracing-subscriber = { version = "0.3.18", features = ["fmt", "env-filter"] }
[profile.release]
strip = true

View File

@@ -74,9 +74,6 @@ impl Signal {
}
}
type Dekey = bool;
type GiftWrapId = EventId;
/// Chat Registry
#[derive(Debug)]
pub struct ChatRegistry {
@@ -93,7 +90,7 @@ pub struct ChatRegistry {
seens: Arc<RwLock<HashMap<EventId, HashSet<RelayUrl>>>>,
/// Mapping of unwrapped event ids to their gift wrap event ids
event_map: Arc<RwLock<HashMap<EventId, (GiftWrapId, Dekey)>>>,
event_map: Arc<RwLock<HashMap<EventId, EventId>>>,
/// Tracking the status of unwrapping gift wrap events.
tracking_flag: Arc<AtomicBool>,
@@ -223,10 +220,7 @@ impl ChatRegistry {
};
match *message {
RelayMessage::Event {
event,
subscription_id,
} => {
RelayMessage::Event { event, .. } => {
// Keep track of which relays have seen this event
{
let mut seens = seens.write().await;
@@ -249,8 +243,7 @@ impl ChatRegistry {
// Map the rumor id to the gift wrap event id for later lookup
{
let mut event_map = event_map.write().await;
let dekey = subscription_id.as_ref() == &sub_id1;
event_map.insert(rumor.id.unwrap(), (event.id, dekey));
event_map.insert(rumor.id.unwrap(), event.id);
}
// Check if the rumor has a recipient
@@ -258,6 +251,8 @@ impl ChatRegistry {
let signal =
Signal::error(event.as_ref(), "Recipient is missing");
tx.send_async(signal).await?;
continue;
}
// Check if the rumor was created after the chat was initialized (for detecting new messages)
@@ -265,7 +260,6 @@ impl ChatRegistry {
let signal = Signal::message(event.id, rumor);
tx.send_async(signal).await?;
} else {
// Mark the chat still processing new messages
status.store(true, Ordering::Release);
}
}
@@ -545,7 +539,7 @@ impl ChatRegistry {
self.event_map
.read_blocking()
.get(id)
.map(|(id, _dekey)| self.seen_on(id))
.map(|id| self.seen_on(id))
}
/// Get the relays that have seen a given gift wrap id.
@@ -557,15 +551,6 @@ impl ChatRegistry {
.unwrap_or_default()
}
/// Check if a given rumor was encrypted by the dekey.
pub fn encrypted_by_dekey(&self, id: &EventId) -> bool {
self.event_map
.read_blocking()
.get(id)
.map(|(_, dekey)| *dekey)
.unwrap_or(false)
}
/// Add a new room to the start of list.
pub fn add_room<I>(&mut self, room: I, cx: &mut Context<Self>)
where

View File

@@ -471,12 +471,6 @@ impl ChatPanel {
self.reports_by_id.read(cx).get(id).is_some()
}
/// Check if a message was encrypted by the dekey
fn encrypted_by_dekey(&self, id: &EventId, cx: &App) -> bool {
let chat = ChatRegistry::global(cx);
chat.read(cx).encrypted_by_dekey(id)
}
/// Get all sent reports for a message by its ID
fn sent_reports(&self, id: &EventId, cx: &App) -> Option<Vec<SendReport>> {
self.reports_by_id.read(cx).get(id).cloned()
@@ -849,7 +843,6 @@ impl ChatPanel {
let replies = message.replies_to.as_slice();
let has_replies = !replies.is_empty();
let has_reports = self.has_reports(&id, cx);
let encrypted_by_dekey = self.encrypted_by_dekey(&id, cx);
// Hide avatar setting
let hide_avatar = AppSettings::get_hide_avatar(cx);
@@ -895,17 +888,6 @@ impl ChatPanel {
.text_color(cx.theme().text)
.child(author.name()),
)
.when(encrypted_by_dekey, |this| {
this.child(
Button::new(format!("dekey-{ix}"))
.icon(IconName::Shield)
.ghost()
.xsmall()
.px_4()
.tooltip("Encrypted by Dekey")
.disabled(true),
)
})
.child(message.created_at.to_human_time())
.when(has_reports, |this| {
this.child(deferred(self.render_sent_reports(&id, cx)))

View File

@@ -14,7 +14,7 @@ product-name = "Coop"
description = "Chat Freely, Stay Private on Nostr"
identifier = "su.reya.coop"
category = "SocialNetworking"
version = "1.0.0-beta3"
version = "1.0.0-beta2"
out-dir = "../../dist"
before-packaging-command = "cargo build --release"
resources = ["Cargo.toml", "src"]
@@ -62,9 +62,9 @@ smol.workspace = true
futures.workspace = true
oneshot.workspace = true
webbrowser.workspace = true
tracing-subscriber.workspace = true
indexset = "0.12.3"
tracing-subscriber = { version = "0.3.18", features = ["fmt", "env-filter"] }
[target.'cfg(target_os = "macos")'.dependencies]
# Temporary workaround https://github.com/zed-industries/zed/issues/47168

View File

@@ -1,36 +0,0 @@
[package]
name = "coop_mobile"
version.workspace = true
edition.workspace = true
publish.workspace = true
[dependencies]
assets = { path = "../assets" }
ui = { path = "../ui" }
theme = { path = "../theme" }
common = { path = "../common" }
state = { path = "../state" }
device = { path = "../device" }
chat = { path = "../chat" }
settings = { path = "../settings" }
person = { path = "../person" }
relay_auth = { path = "../relay_auth" }
gpui.workspace = true
gpui_platform.workspace = true
gpui_tokio.workspace = true
gpui-mobile = { git = "https://github.com/itsbalamurali/gpui-mobile" }
nostr-connect.workspace = true
nostr-sdk.workspace = true
anyhow.workspace = true
serde.workspace = true
serde_json.workspace = true
itertools.workspace = true
log.workspace = true
smallvec.workspace = true
smol.workspace = true
futures.workspace = true
oneshot.workspace = true
tracing-subscriber.workspace = true

View File

@@ -12,14 +12,15 @@ common = { path = "../common" }
state = { path = "../state" }
device = { path = "../device" }
chat = { path = "../chat" }
chat_ui = { path = "../chat_ui" }
settings = { path = "../settings" }
person = { path = "../person" }
relay_auth = { path = "../relay_auth" }
gpui.workspace = true
gpui_web.workspace = true
gpui_platform.workspace = true
gpui_tokio.workspace = true
gpui_web = { git = "https://github.com/zed-industries/zed" }
nostr-connect.workspace = true
nostr-sdk.workspace = true
@@ -34,8 +35,8 @@ smol.workspace = true
futures.workspace = true
oneshot.workspace = true
webbrowser.workspace = true
tracing-subscriber.workspace = true
tracing-subscriber = { version = "0.3.18", features = ["fmt", "env-filter"] }
console_error_panic_hook = "0.1"
tracing-wasm = "0.2"
console_log = "1.0"

View File

@@ -8,7 +8,5 @@ targets = [
"x86_64-unknown-linux-gnu",
"x86_64-pc-windows-msvc",
"aarch64-pc-windows-msvc",
"aarch64-apple-ios",
"aarch64-linux-android",
"wasm32-unknown-unknown"
]