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:
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(_)))
}