notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit f7c1a39bc159360c3419cb93b07f555e22080171
parent e09df3e7c3c12158a70c385e5825f646e71345cf
Author: William Casarin <jb55@jb55.com>
Date:   Sat, 22 Feb 2025 19:46:23 -0800

args: add search column argument

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mcrates/notedeck_columns/src/args.rs | 18+++++++++++++++---
Mcrates/notedeck_columns/src/search.rs | 4++++
Mcrates/notedeck_columns/src/timeline/kind.rs | 4++++
3 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/crates/notedeck_columns/src/args.rs b/crates/notedeck_columns/src/args.rs @@ -73,15 +73,27 @@ impl ColumnsArgs { res.columns .push(ArgColumn::Timeline(TimelineKind::contact_list( deck_author.to_owned(), - ))) + ))); } else { - panic!("No accounts available, could not handle implicit pubkey contacts column") + panic!("No accounts available, could not handle implicit pubkey contacts column"); } + } else if column_name == "search" { + i += 1; + let search = if let Some(next_arg) = args.get(i) { + next_arg + } else { + error!("search filter argument missing?"); + continue; + }; + + res.columns.push(ArgColumn::Timeline(TimelineKind::search( + search.to_string(), + ))); } else if let Some(notif_pk_str) = column_name.strip_prefix("notifications:") { if let Ok(pubkey) = Pubkey::parse(notif_pk_str) { info!("got notifications column for user {}", pubkey.hex()); res.columns - .push(ArgColumn::Timeline(TimelineKind::notifications(pubkey))) + .push(ArgColumn::Timeline(TimelineKind::notifications(pubkey))); } else { error!("error parsing notifications pubkey {}", notif_pk_str); continue; diff --git a/crates/notedeck_columns/src/search.rs b/crates/notedeck_columns/src/search.rs @@ -24,6 +24,10 @@ impl TokenSerializable for SearchQuery { } impl SearchQuery { + pub fn new(search: String) -> Self { + let author: Option<Pubkey> = None; + Self { search, author } + } /// Convert the query to a filter-compatible MessagePack value fn to_msgpack_value(&self) -> Value { let mut values: Vec<(Value, Value)> = Vec::with_capacity(2); diff --git a/crates/notedeck_columns/src/timeline/kind.rs b/crates/notedeck_columns/src/timeline/kind.rs @@ -406,6 +406,10 @@ impl TimelineKind { TimelineKind::List(ListKind::contact_list(pk)) } + pub fn search(s: String) -> Self { + TimelineKind::Search(SearchQuery::new(s)) + } + pub fn is_contacts(&self) -> bool { matches!(self, TimelineKind::List(ListKind::Contact(_))) }