commit af90ed537f9f1e9c03a64d80acd8f66041a3f29e
parent 8adf22a7e978b5a9f4438391aa16dee7d223b99c
Author: kernelkind <kernelkind@gmail.com>
Date: Tue, 24 Feb 2026 17:55:57 -0500
feat(outbox-int): Notedeck::init pass along `OutboxSession`
Signed-off-by: kernelkind <kernelkind@gmail.com>
Diffstat:
4 files changed, 55 insertions(+), 29 deletions(-)
diff --git a/crates/notedeck/src/app.rs b/crates/notedeck/src/app.rs
@@ -207,7 +207,7 @@ impl Notedeck {
self.android_app = Some(context);
}
- pub fn new<P: AsRef<Path>>(ctx: &egui::Context, data_path: P, args: &[String]) -> Self {
+ pub fn init<P: AsRef<Path>>(ctx: &egui::Context, data_path: P, args: &[String]) -> NotedeckCtx {
#[cfg(feature = "puffin")]
setup_puffin();
@@ -270,8 +270,9 @@ impl Notedeck {
try_swap_compacted_db(&dbpath_str);
let mut ndb = Ndb::new(&dbpath_str, &config).expect("ndb");
let txn = Transaction::new(&ndb).expect("txn");
- let scoped_sub_state = ScopedSubsState::default();
- let pool = OutboxPool::default();
+ let mut scoped_sub_state = ScopedSubsState::default();
+ let mut pool = OutboxPool::default();
+ let outbox_session = OutboxSessionHandler::new(&mut pool, EguiWakeup::new(ctx.clone()));
let mut accounts = Accounts::new(
keystore,
@@ -302,6 +303,12 @@ impl Notedeck {
if let Some(first) = parsed_args.keys.first() {
accounts.select_account(&first.pubkey, &mut ndb, &txn, &mut legacy_pool, ctx);
}
+ let outbox_session = if let Some(first) = parsed_args.keys.first() {
+ let remote = RemoteApi::new(outbox_session, &mut scoped_sub_state);
+ remote.export_session()
+ } else {
+ outbox_session.export()
+ };
let img_cache = Images::new(img_cache_dir);
let note_cache = NoteCache::default();
@@ -338,7 +345,7 @@ impl Notedeck {
let (send_new_jobs, receive_new_jobs) = std::sync::mpsc::channel();
let media_job_cache = JobCache::new(receive_new_jobs, send_new_jobs);
- Self {
+ let notedeck = Self {
ndb,
img_cache,
unknown_ids,
@@ -363,6 +370,11 @@ impl Notedeck {
i18n,
#[cfg(target_os = "android")]
android_app: None,
+ };
+
+ NotedeckCtx {
+ notedeck,
+ outbox_session,
}
}
@@ -659,3 +671,8 @@ fn try_swap_compacted_db(dbpath: &str) {
let _ = std::fs::remove_dir_all(&compact_path);
info!("compact swap: success! {old_size} -> {compact_size} bytes");
}
+
+pub struct NotedeckCtx {
+ pub notedeck: Notedeck,
+ pub outbox_session: OutboxSession,
+}
diff --git a/crates/notedeck_chrome/src/android.rs b/crates/notedeck_chrome/src/android.rs
@@ -66,13 +66,18 @@ pub async fn android_main(android_app: AndroidApp) {
Box::new(move |cc| {
let ctx = &cc.egui_ctx;
- let mut notedeck = Notedeck::new(ctx, path, &app_args);
- notedeck.set_android_context(android_app);
- notedeck.setup(ctx);
- let chrome = Chrome::new_with_apps(cc, &app_args, &mut notedeck)?;
- notedeck.set_app(chrome);
-
- Ok(Box::new(notedeck))
+ let mut notedeck_ctx = Notedeck::init(ctx, path, &app_args);
+ notedeck_ctx.notedeck.set_android_context(android_app);
+ notedeck_ctx.notedeck.setup(ctx);
+ let chrome = Chrome::new_with_apps(
+ cc,
+ &app_args,
+ &mut notedeck_ctx.notedeck,
+ notedeck_ctx.outbox_session,
+ )?;
+ notedeck_ctx.notedeck.set_app(chrome);
+
+ Ok(Box::new(notedeck_ctx.notedeck))
}),
);
}
diff --git a/crates/notedeck_chrome/src/chrome.rs b/crates/notedeck_chrome/src/chrome.rs
@@ -13,6 +13,7 @@ use egui_extras::{Size, StripBuilder};
use egui_nav::RouteResponse;
use egui_nav::{NavAction, NavDrawer};
use nostrdb::{ProfileRecord, Transaction};
+use notedeck::enostr::OutboxSession;
use notedeck::fonts::get_font_size;
use notedeck::name::get_display_name;
use notedeck::ui::is_compiled_as_mobile;
@@ -151,10 +152,11 @@ impl Chrome {
cc: &CreationContext,
app_args: &[String],
notedeck: &mut Notedeck,
+ outbox_session: OutboxSession,
) -> Result<Self, Error> {
stop_debug_mode(notedeck.options());
- let notedeck_ref = &mut notedeck.notedeck_ref(&cc.egui_ctx, None);
+ let notedeck_ref = &mut notedeck.notedeck_ref(&cc.egui_ctx, Some(outbox_session));
let dave = Dave::new(
cc.wgpu_render_state.as_ref(),
notedeck_ref.app_ctx.ndb.clone(),
diff --git a/crates/notedeck_chrome/src/notedeck.rs b/crates/notedeck_chrome/src/notedeck.rs
@@ -87,12 +87,17 @@ async fn main() {
let args: Vec<String> = std::env::args().collect();
let ctx = &cc.egui_ctx;
- let mut notedeck = Notedeck::new(ctx, base_path, &args);
- notedeck.setup(ctx);
- let chrome = Chrome::new_with_apps(cc, &args, &mut notedeck)?;
- notedeck.set_app(chrome);
-
- Ok(Box::new(notedeck))
+ let mut notedeck_ctx = Notedeck::init(ctx, base_path, &args);
+ notedeck_ctx.notedeck.setup(ctx);
+ let chrome = Chrome::new_with_apps(
+ cc,
+ &args,
+ &mut notedeck_ctx.notedeck,
+ notedeck_ctx.outbox_session,
+ )?;
+ notedeck_ctx.notedeck.set_app(chrome);
+
+ Ok(Box::new(notedeck_ctx.notedeck))
}),
);
}
@@ -155,7 +160,7 @@ mod tests {
.collect();
let ctx = egui::Context::default();
- let _app = Notedeck::new(&ctx, &datapath, &args);
+ let _app = Notedeck::init(&ctx, &datapath, &args);
assert!(Path::new(&dbpath.join("data.mdb")).exists());
assert!(Path::new(&dbpath.join("lock.mdb")).exists());
@@ -184,8 +189,8 @@ mod tests {
.collect();
let ctx = egui::Context::default();
- let mut notedeck = Notedeck::new(&ctx, &tmpdir, &args);
- let mut app_ctx = notedeck.app_context(&ctx);
+ let mut notedeck_ctx = Notedeck::init(&ctx, &tmpdir, &args);
+ let mut app_ctx = notedeck_ctx.notedeck.app_context(&ctx);
let app = Damus::new(&mut app_ctx, &args);
assert_eq!(app.columns(app_ctx.accounts).columns().len(), 2);
@@ -233,17 +238,14 @@ mod tests {
.collect();
let ctx = egui::Context::default();
- let mut notedeck = Notedeck::new(&ctx, &tmpdir, &args);
- let unrecognized_args = {
- let mut app_ctx = notedeck.app_context(&ctx);
- let app = Damus::new(&mut app_ctx, &args);
- app.unrecognized_args().clone()
- };
+ let mut notedeck_ctx = Notedeck::init(&ctx, &tmpdir, &args);
+ let app = Damus::new(&mut notedeck_ctx.notedeck.app_context(&ctx), &args);
// ensure we recognized all the arguments
- let completely_unrecognized: Vec<String> = notedeck
+ let completely_unrecognized: Vec<String> = notedeck_ctx
+ .notedeck
.unrecognized_args()
- .intersection(&unrecognized_args)
+ .intersection(app.unrecognized_args())
.cloned()
.collect();
assert_eq!(completely_unrecognized, ["--unknown-arg"]);