feat: add search window (NIP-50) (#181)

* feat: add search window
* chore: improve search ui
This commit is contained in:
雨宮蓮
2024-04-23 15:34:08 +07:00
committed by GitHub
parent c00a7749b4
commit 174a3cc74e
22 changed files with 507 additions and 236 deletions

View File

@@ -57,11 +57,11 @@ fn main() {
client
.add_relay("wss://relayable.org")
.await
.expect("Cannot connect to relay.nostr.band, please try again later.");
.expect("Cannot connect to relayable.org, please try again later.");
client
.add_relay("wss://relay.damus.io")
.add_relay("wss://relay.nostr.band")
.await
.expect("Cannot connect to relay.damus.io, please try again later.");
.expect("Cannot connect to relay.nostr.band, please try again later.");
// Connect
client.connect().await;
@@ -129,6 +129,7 @@ fn main() {
nostr::event::get_event_thread,
nostr::event::publish,
nostr::event::repost,
nostr::event::search,
commands::folder::show_in_folder,
commands::folder::get_accounts,
commands::opg::fetch_opg,

View File

@@ -221,3 +221,26 @@ pub async fn repost(raw: &str, state: State<'_, Nostr>) -> Result<EventId, Strin
Err("Repost failed".into())
}
}
#[tauri::command]
pub async fn search(
content: &str,
limit: usize,
state: State<'_, Nostr>,
) -> Result<Vec<Event>, String> {
println!("search: {}", content);
let client = &state.client;
let filter = Filter::new()
.kinds(vec![Kind::TextNote, Kind::Metadata])
.search(content)
.limit(limit);
match client
.get_events_of(vec![filter], Some(Duration::from_secs(15)))
.await
{
Ok(events) => Ok(events),
Err(err) => Err(err.to_string()),
}
}

View File

@@ -10,6 +10,7 @@ pub fn create_tray<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
let menu = tauri::menu::MenuBuilder::new(app)
.item(&tauri::menu::MenuItem::with_id(app, "open", "Open Lume", true, None::<&str>).unwrap())
.item(&tauri::menu::MenuItem::with_id(app, "editor", "New Post", true, Some("cmd+n")).unwrap())
.item(&tauri::menu::MenuItem::with_id(app, "search", "Search", true, Some("cmd+k")).unwrap())
.separator()
.item(
&tauri::menu::MenuItem::with_id(
@@ -29,6 +30,7 @@ pub fn create_tray<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
.item(
&tauri::menu::MenuItem::with_id(app, "settings", "Settings...", true, Some("cmd+,")).unwrap(),
)
.separator()
.item(&tauri::menu::MenuItem::with_id(app, "quit", "Quit", true, None::<&str>).unwrap())
.build()
.unwrap();
@@ -74,6 +76,34 @@ pub fn create_tray<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
.unwrap();
}
}
"search" => {
if let Some(window) = app.get_window("search") {
if window.is_visible().unwrap_or_default() {
let _ = window.set_focus();
} else {
let _ = window.show();
let _ = window.set_focus();
};
} else {
#[cfg(target_os = "macos")]
let _ = WebviewWindowBuilder::new(app, "search", WebviewUrl::App(PathBuf::from("search")))
.title("Editor")
.inner_size(750., 470.)
.minimizable(false)
.resizable(false)
.title_bar_style(TitleBarStyle::Overlay)
.build()
.unwrap();
#[cfg(not(target_os = "macos"))]
let _ = WebviewWindowBuilder::new(app, "Search", WebviewUrl::App(PathBuf::from("search")))
.title("Search")
.inner_size(750., 470.)
.minimizable(false)
.resizable(false)
.build()
.unwrap();
}
}
"about" => {
app.shell().open("https://lume.nu", None).unwrap();
}
@@ -97,7 +127,6 @@ pub fn create_tray<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
)
.title("Settings")
.inner_size(800., 500.)
.hidden_title(true)
.title_bar_style(TitleBarStyle::Overlay)
.resizable(false)
.minimizable(false)