notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

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 }