Skip to content

Commit

Permalink
Merge relay debug view fixes & more strict args #711
Browse files Browse the repository at this point in the history
Ken Sedgwick (5):
      drive-by compiler warning fixes
      drive-by clippy fixes
      add derive Debug to some things
      panic on unknown CLI arguments
      move RelayDebugView to notedeck crate and restore --relay-debug

William Casarin (4):
      clippy: fix lint
      args: skip creation of vec
      nix: fix android build

Link: #711
  • Loading branch information
jb55 committed Feb 11, 2025
2 parents 7f0d010 + 353a3c8 commit d82d7fd
Show file tree
Hide file tree
Showing 13 changed files with 129 additions and 17 deletions.
22 changes: 18 additions & 4 deletions crates/notedeck/src/app.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
use crate::persist::{AppSizeHandler, ZoomHandler};
use crate::{
Accounts, AppContext, Args, DataPath, DataPathType, Directory, FileKeyStorage, ImageCache,
KeyStorageType, NoteCache, ThemeHandler, UnknownIds,
KeyStorageType, NoteCache, RelayDebugView, ThemeHandler, UnknownIds,
};
use egui::ThemePreference;
use enostr::RelayPool;
use nostrdb::{Config, Ndb, Transaction};
use std::cell::RefCell;
use std::collections::BTreeSet;
use std::path::Path;
use std::rc::Rc;
use tracing::{error, info};
Expand All @@ -29,6 +30,7 @@ pub struct Notedeck {
app: Option<Rc<RefCell<dyn App>>>,
zoom: ZoomHandler,
app_size: AppSizeHandler,
unrecognized_args: BTreeSet<String>,
}

fn margin_top(narrow: bool) -> f32 {
Expand Down Expand Up @@ -82,8 +84,14 @@ impl eframe::App for Notedeck {
self.zoom.try_save_zoom_factor(ctx);
self.app_size.try_save_app_size(ctx);

if self.args.relay_debug && self.pool.debug.is_none() {
self.pool.use_debug();
if self.args.relay_debug {
if self.pool.debug.is_none() {
self.pool.use_debug();
}

if let Some(debug) = &mut self.pool.debug {
RelayDebugView::window(ctx, debug);
}
}

#[cfg(feature = "profiling")]
Expand All @@ -106,7 +114,8 @@ impl Notedeck {
#[cfg(feature = "profiling")]
setup_profiling();

let parsed_args = Args::parse(args);
// Skip the first argument, which is the program name.
let (parsed_args, unrecognized_args) = Args::parse(&args[1..]);

let data_path = parsed_args
.datapath
Expand Down Expand Up @@ -203,6 +212,7 @@ impl Notedeck {
app: None,
zoom,
app_size,
unrecognized_args,
}
}

Expand Down Expand Up @@ -236,4 +246,8 @@ impl Notedeck {
pub fn theme(&self) -> ThemePreference {
self.theme.load()
}

pub fn unrecognized_args(&self) -> &BTreeSet<String> {
&self.unrecognized_args
}
}
10 changes: 8 additions & 2 deletions crates/notedeck/src/args.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use std::collections::BTreeSet;

use enostr::{Keypair, Pubkey, SecretKey};
use tracing::error;

Expand All @@ -18,7 +20,9 @@ pub struct Args {
}

impl Args {
pub fn parse(args: &[String]) -> Self {
// parse arguments, return set of unrecognized args
pub fn parse(args: &[String]) -> (Self, BTreeSet<String>) {
let mut unrecognized_args = BTreeSet::new();
let mut res = Args {
relays: vec![],
is_mobile: None,
Expand Down Expand Up @@ -112,11 +116,13 @@ impl Args {
res.use_keystore = false;
} else if arg == "--relay-debug" {
res.relay_debug = true;
} else {
unrecognized_args.insert(arg.clone());
}

i += 1;
}

res
(res, unrecognized_args)
}
}
2 changes: 2 additions & 0 deletions crates/notedeck/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ mod muted;
pub mod note;
mod notecache;
mod persist;
pub mod relay_debug;
pub mod relayspec;
mod result;
pub mod storage;
Expand All @@ -34,6 +35,7 @@ pub use muted::{MuteFun, Muted};
pub use note::{NoteRef, RootIdError, RootNoteId, RootNoteIdBuf};
pub use notecache::{CachedNote, NoteCache};
pub use persist::*;
pub use relay_debug::RelayDebugView;
pub use relayspec::RelaySpec;
pub use result::Result;
pub use storage::{
Expand Down
File renamed without changes.
13 changes: 13 additions & 0 deletions crates/notedeck_chrome/src/android.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,19 @@ pub async fn android_main(app: AndroidApp) {
setup_chrome(ctx, &notedeck.args(), notedeck.theme());

let damus = Damus::new(&mut notedeck.app_context(), &app_args);

// ensure we recognized all the arguments
let completely_unrecognized: Vec<String> = notedeck
.unrecognized_args()
.intersection(damus.unrecognized_args())
.cloned()
.collect();
assert!(
completely_unrecognized.is_empty(),
"unrecognized args: {:?}",
completely_unrecognized
);

notedeck.set_app(damus);

Ok(Box::new(notedeck))
Expand Down
64 changes: 62 additions & 2 deletions crates/notedeck_chrome/src/notedeck.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,19 @@ async fn main() {
setup_chrome(ctx, notedeck.args(), notedeck.theme());

let damus = Damus::new(&mut notedeck.app_context(), &args);

// ensure we recognized all the arguments
let completely_unrecognized: Vec<String> = notedeck
.unrecognized_args()
.intersection(damus.unrecognized_args())
.cloned()
.collect();
assert!(
completely_unrecognized.is_empty(),
"unrecognized args: {:?}",
completely_unrecognized
);

// TODO: move "chrome" frame over Damus app somehow
notedeck.set_app(damus);

Expand Down Expand Up @@ -135,7 +148,7 @@ mod tests {
async fn test_dbpath() {
let datapath = create_tmp_dir();
let dbpath = create_tmp_dir();
let args: Vec<String> = vec![
let args: Vec<String> = [
"--testrunner",
"--datapath",
&datapath.to_str().unwrap(),
Expand All @@ -161,7 +174,7 @@ mod tests {
async fn test_column_args() {
let tmpdir = create_tmp_dir();
let npub = "npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s";
let args: Vec<String> = vec![
let args: Vec<String> = [
"--testrunner",
"--no-keystore",
"--pub",
Expand All @@ -177,9 +190,21 @@ mod tests {

let ctx = egui::Context::default();
let mut notedeck = Notedeck::new(&ctx, &tmpdir, &args);
let unrecognized_args = notedeck.unrecognized_args().clone();
let mut app_ctx = notedeck.app_context();
let app = Damus::new(&mut app_ctx, &args);

// ensure we recognized all the arguments
let completely_unrecognized: Vec<String> = unrecognized_args
.intersection(app.unrecognized_args())
.cloned()
.collect();
assert!(
completely_unrecognized.is_empty(),
"unrecognized args: {:?}",
completely_unrecognized
);

assert_eq!(app.columns(app_ctx.accounts).columns().len(), 2);

let tl1 = app
Expand All @@ -204,4 +229,39 @@ mod tests {

rmrf(tmpdir);
}

#[tokio::test]
async fn test_unknown_args() {
let tmpdir = create_tmp_dir();
let npub = "npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s";
let args: Vec<String> = [
"--testrunner",
"--no-keystore",
"--unknown-arg", // <-- UNKNOWN
"--pub",
npub,
"-c",
"notifications",
"-c",
"contacts",
]
.iter()
.map(|s| s.to_string())
.collect();

let ctx = egui::Context::default();
let mut notedeck = Notedeck::new(&ctx, &tmpdir, &args);
let mut app_ctx = notedeck.app_context();
let app = Damus::new(&mut app_ctx, &args);

// ensure we recognized all the arguments
let completely_unrecognized: Vec<String> = notedeck
.unrecognized_args()
.intersection(app.unrecognized_args())
.cloned()
.collect();
assert_eq!(completely_unrecognized, ["--unknown-arg"]);

rmrf(tmpdir);
}
}
5 changes: 5 additions & 0 deletions crates/notedeck_chrome/src/preview.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ impl PreviewRunner {
let ctx = &cc.egui_ctx;

let mut notedeck = Notedeck::new(ctx, &base_path, &args);
assert!(
notedeck.unrecognized_args().is_empty(),
"unrecognized args: {:?}",
notedeck.unrecognized_args()
);
setup_chrome(ctx, notedeck.args(), notedeck.theme());

notedeck.set_app(PreviewApp::new(preview));
Expand Down
12 changes: 10 additions & 2 deletions crates/notedeck_columns/src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use egui_extras::{Size, StripBuilder};

use nostrdb::{Ndb, Transaction};

use std::collections::HashMap;
use std::collections::{BTreeSet, HashMap};
use std::path::Path;
use std::time::Duration;
use tracing::{debug, error, info, trace, warn};
Expand Down Expand Up @@ -51,6 +51,8 @@ pub struct Damus {
pub debug: bool,
pub since_optimize: bool,
pub textmode: bool,

pub unrecognized_args: BTreeSet<String>,
}

fn handle_key_events(input: &egui::InputState, columns: &mut Columns) {
Expand Down Expand Up @@ -358,7 +360,7 @@ impl Damus {
pub fn new(ctx: &mut AppContext<'_>, args: &[String]) -> Self {
// arg parsing

let parsed_args = ColumnsArgs::parse(
let (parsed_args, unrecognized_args) = ColumnsArgs::parse(
args,
ctx.accounts
.get_selected_account()
Expand Down Expand Up @@ -434,6 +436,7 @@ impl Damus {
support,
decks_cache,
debug,
unrecognized_args,
}
}

Expand Down Expand Up @@ -476,12 +479,17 @@ impl Damus {
view_state: ViewState::default(),
support,
decks_cache,
unrecognized_args: BTreeSet::default(),
}
}

pub fn subscriptions(&mut self) -> &mut HashMap<String, SubKind> {
&mut self.subscriptions.subs
}

pub fn unrecognized_args(&self) -> &BTreeSet<String> {
&self.unrecognized_args
}
}

/*
Expand Down
9 changes: 7 additions & 2 deletions crates/notedeck_columns/src/args.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use std::collections::BTreeSet;

use crate::timeline::TimelineKind;
use enostr::{Filter, Pubkey};
use tracing::{debug, error, info};
Expand All @@ -9,7 +11,8 @@ pub struct ColumnsArgs {
}

impl ColumnsArgs {
pub fn parse(args: &[String], deck_author: Option<&Pubkey>) -> Self {
pub fn parse(args: &[String], deck_author: Option<&Pubkey>) -> (Self, BTreeSet<String>) {
let mut unrecognized_args = BTreeSet::new();
let mut res = Self {
columns: vec![],
since_optimize: true,
Expand Down Expand Up @@ -132,12 +135,14 @@ impl ColumnsArgs {
} else {
error!("failed to parse filter in '{}'", filter_file);
}
} else {
unrecognized_args.insert(arg.clone());
}

i += 1;
}

res
(res, unrecognized_args)
}
}

Expand Down
4 changes: 2 additions & 2 deletions crates/notedeck_columns/src/column.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use notedeck::NoteCache;
use std::iter::Iterator;
use tracing::warn;

#[derive(Clone)]
#[derive(Clone, Debug)]
pub struct Column {
router: Router<Route>,
}
Expand All @@ -29,7 +29,7 @@ impl Column {
}
}

#[derive(Default)]
#[derive(Default, Debug)]
pub struct Columns {
/// Columns are simply routers into settings, timelines, etc
columns: Vec<Column>,
Expand Down
2 changes: 1 addition & 1 deletion crates/notedeck_columns/src/route.rs
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ impl Route {

// TODO: add this to egui-nav so we don't have to deal with returning
// and navigating headaches
#[derive(Clone)]
#[derive(Clone, Debug)]
pub struct Router<R: Clone> {
routes: Vec<R>,
pub returning: bool,
Expand Down
1 change: 0 additions & 1 deletion crates/notedeck_columns/src/ui/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ pub mod note;
pub mod preview;
pub mod profile;
pub mod relay;
pub mod relay_debug;
pub mod search_results;
pub mod side_panel;
pub mod support;
Expand Down
2 changes: 1 addition & 1 deletion shell.nix
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ mkShell ({
cmdline-tools-latest
build-tools-34-0-0
platform-tools
platforms-android-31
platforms-android-30
ndk-27-2-12479018
#ndk-24-0-8215888
] ++ lib.optional android_emulator [ emulator ]);
Expand Down

0 comments on commit d82d7fd

Please sign in to comment.