@@ -50,36 +50,27 @@ impl eframe::App for DimosApp {
5050 }
5151}
5252
53- /// Extract `--ws-url <value>` from args, returning (ws_url, remaining_args).
54- /// This lets us handle our custom flag without conflicting with Rerun's own arg parsing.
55- fn extract_ws_url ( args : Vec < String > ) -> ( Option < String > , Vec < String > ) {
56- let mut ws_url = None ;
57- let mut remaining = Vec :: with_capacity ( args. len ( ) ) ;
58- let mut iter = args. into_iter ( ) ;
59- while let Some ( arg) = iter. next ( ) {
60- if arg == "--ws-url" {
61- ws_url = iter. next ( ) ;
62- } else if let Some ( val) = arg. strip_prefix ( "--ws-url=" ) {
63- ws_url = Some ( val. to_string ( ) ) ;
64- } else {
65- remaining. push ( arg) ;
66- }
67- }
68- ( ws_url, remaining)
69- }
70-
7153fn main ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
7254 let main_thread_token = re_viewer:: MainThreadToken :: i_promise_i_am_on_the_main_thread ( ) ;
7355 let build_info = re_viewer:: build_info ( ) ;
7456
75- // Extract --ws-url before passing remaining args to Rerun
76- let ( ws_url_arg, rerun_args) = extract_ws_url ( std:: env:: args ( ) . collect ( ) ) ;
57+ // Parse args (including --ws-url) via Rerun's clap Args, without consuming them.
58+ // We peek at the parsed value, then pass the original args to run_with_app_wrapper
59+ // which will parse them again.
60+ let parsed: rerun:: RerunArgs = clap:: Parser :: parse ( ) ;
61+ let ws_url = if std:: env:: var ( "DIMOS_VIEWER_WS_URL" ) . is_ok ( ) {
62+ // Env var overrides default but not an explicit CLI flag.
63+ // If the parsed value equals the default, check the env var.
64+ if parsed. ws_url == DEFAULT_WS_URL {
65+ std:: env:: var ( "DIMOS_VIEWER_WS_URL" ) . unwrap ( )
66+ } else {
67+ parsed. ws_url . clone ( )
68+ }
69+ } else {
70+ parsed. ws_url . clone ( )
71+ } ;
7772
7873 // Connect WebSocket publisher for click/keyboard events
79- // Priority: --ws-url flag > DIMOS_VIEWER_WS_URL env var > default
80- let ws_url = ws_url_arg
81- . or_else ( || std:: env:: var ( "DIMOS_VIEWER_WS_URL" ) . ok ( ) )
82- . unwrap_or_else ( || DEFAULT_WS_URL . to_string ( ) ) ;
8374 let ws_publisher = WsPublisher :: connect ( ws_url. clone ( ) ) ;
8475 re_log:: info!( "WebSocket client connecting to {ws_url}" ) ;
8576
@@ -165,7 +156,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
165156 main_thread_token,
166157 build_info,
167158 rerun:: CallSource :: Cli ,
168- rerun_args . into_iter ( ) ,
159+ std :: env :: args ( ) ,
169160 Some ( wrapper) ,
170161 Some ( startup_patch) ,
171162 ) ?;
0 commit comments