preview.rs (3156B)
1 use notedeck::{DataPath, Notedeck}; 2 use notedeck_chrome::setup::{generate_native_options, setup_chrome}; 3 use notedeck_columns::ui::configure_deck::ConfigureDeckView; 4 use notedeck_columns::ui::edit_deck::EditDeckView; 5 use notedeck_columns::ui::profile::EditProfileView; 6 use notedeck_columns::ui::{ 7 account_login_view::AccountLoginView, PostView, Preview, PreviewApp, PreviewConfig, 8 ProfilePreview, RelayView, 9 }; 10 use std::env; 11 12 struct PreviewRunner {} 13 14 impl PreviewRunner { 15 fn new() -> Self { 16 PreviewRunner {} 17 } 18 19 async fn run<P>(self, preview: P) 20 where 21 P: notedeck::App + 'static, 22 { 23 tracing_subscriber::fmt::init(); 24 25 let base_path = DataPath::default_base_or_cwd(); 26 let path = DataPath::new(&base_path); 27 28 let _res = eframe::run_native( 29 "Notedeck Preview", 30 generate_native_options(path), 31 Box::new(|cc| { 32 let args: Vec<String> = std::env::args().collect(); 33 let ctx = &cc.egui_ctx; 34 35 let mut notedeck = Notedeck::new(ctx, &base_path, &args); 36 assert!( 37 notedeck.unrecognized_args().is_empty(), 38 "unrecognized args: {:?}", 39 notedeck.unrecognized_args() 40 ); 41 setup_chrome( 42 ctx, 43 notedeck.args(), 44 notedeck.theme(), 45 notedeck.note_body_font_size(), 46 notedeck.zoom_factor(), 47 ); 48 49 notedeck.set_app(PreviewApp::new(preview)); 50 51 Ok(Box::new(notedeck)) 52 }), 53 ); 54 } 55 } 56 57 macro_rules! previews { 58 // Accept a runner and name variable, followed by one or more identifiers for the views 59 ($runner:expr, $name:expr, $is_mobile:expr, $($view:ident),* $(,)?) => { 60 match $name.as_ref() { 61 $( 62 stringify!($view) => { 63 $runner.run($view::preview(PreviewConfig { is_mobile: $is_mobile })).await; 64 } 65 )* 66 _ => println!("Component not found."), 67 } 68 }; 69 } 70 71 #[tokio::main] 72 async fn main() { 73 let mut name: Option<String> = None; 74 let mut is_mobile: Option<bool> = None; 75 let mut light_mode: bool = false; 76 77 for arg in env::args() { 78 if arg == "--mobile" { 79 is_mobile = Some(true); 80 } else if arg == "--light" { 81 light_mode = true; 82 } else { 83 name = Some(arg); 84 } 85 } 86 87 let name = if let Some(name) = name { 88 name 89 } else { 90 println!("Please specify a component to test"); 91 return; 92 }; 93 94 println!( 95 "light mode previews: {}", 96 if light_mode { "enabled" } else { "disabled" } 97 ); 98 let is_mobile = is_mobile.unwrap_or(notedeck::ui::is_compiled_as_mobile()); 99 let runner = PreviewRunner::new(); 100 101 previews!( 102 runner, 103 name, 104 is_mobile, 105 RelayView, 106 AccountLoginView, 107 ProfilePreview, 108 PostView, 109 ConfigureDeckView, 110 EditDeckView, 111 EditProfileView, 112 ); 113 }