wip: refactor

This commit is contained in:
2024-12-27 09:56:56 +07:00
parent 7fd9f22b4a
commit 2ddd2d3b17
17 changed files with 294 additions and 46 deletions

View File

@@ -1,8 +1,10 @@
use gpui::*;
use nostr_sdk::prelude::*;
use rnglib::{Language, RNG};
use serde::Deserialize;
use std::sync::{Arc, RwLock};
use super::metadata::MetadataRegistry;
use crate::utils::get_room_id;
#[derive(Clone, PartialEq, Eq, Deserialize)]
@@ -12,31 +14,40 @@ pub struct Room {
pub members: Vec<PublicKey>,
pub last_seen: Timestamp,
pub title: Option<SharedString>,
pub metadata: Option<Metadata>,
}
impl Room {
pub fn new(event: &Event) -> Self {
pub fn new(event: &Event, cx: &mut WindowContext<'_>) -> Self {
let owner = event.pubkey;
let last_seen = event.created_at;
// Get all members from event's tag
let members: Vec<PublicKey> = event.tags.public_keys().copied().collect();
// Get title from event's tag
let title = if let Some(tag) = event.tags.find(TagKind::Title) {
tag.content().map(|s| s.to_owned().into())
} else {
// TODO: create random name?
None
let rng = RNG::from(&Language::Roman);
let name = rng.generate_names(2, true).join("-").to_lowercase();
Some(name.into())
};
// Get unique id based on members
let id = get_room_id(&owner, &members).into();
// Get metadata for all members if exists
let metadata = cx.global::<MetadataRegistry>().get(&owner);
Self {
id,
title,
members,
last_seen,
owner,
metadata,
}
}
}