//! Desktop application entry point // Prevents additional console window on Windows in release #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] #[cfg(not(any(target_os = "ios", target_os = "android")))] use tauri::menu::{Menu, MenuItem, PredefinedMenuItem, Submenu}; #[cfg(not(any(target_os = "ios", target_os = "android")))] use tauri::{Emitter, Manager}; use tracing::info; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter}; fn main() { tracing_subscriber::registry() .with(EnvFilter::try_from_default_env().unwrap_or_else(|_| { "balanced_breakfast_desktop=info,bb_core=debug,bb_db=debug,warn".into() })) .with(tracing_subscriber::fmt::layer()) .init(); info!("Starting Balanced Breakfast"); let builder = balanced_breakfast_desktop::build_app(); #[cfg(not(any(target_os = "ios", target_os = "android")))] let builder = builder .menu(|app| { #[cfg(target_os = "macos")] let app_menu = Submenu::with_items( app, "BalancedBreakfast", true, &[ &MenuItem::with_id(app, "about", "About Balanced Breakfast", true, None::<&str>)?, &PredefinedMenuItem::separator(app)?, &PredefinedMenuItem::hide(app, Some("Hide Balanced Breakfast"))?, &PredefinedMenuItem::hide_others(app, Some("Hide Others"))?, &PredefinedMenuItem::show_all(app, Some("Show All"))?, &PredefinedMenuItem::separator(app)?, &PredefinedMenuItem::quit(app, Some("Quit Balanced Breakfast"))?, ], )?; let file_menu = Submenu::with_items( app, "File", true, &[ &MenuItem::with_id(app, "refresh", "Refresh Feeds", true, Some("CmdOrCtrl+R"))?, &MenuItem::with_id(app, "add_feed", "Add Feed...", true, Some("CmdOrCtrl+N"))?, &PredefinedMenuItem::separator(app)?, &MenuItem::with_id(app, "import_opml", "Import OPML...", true, Some("CmdOrCtrl+I"))?, &MenuItem::with_id(app, "export_opml", "Export OPML...", true, Some("CmdOrCtrl+E"))?, &PredefinedMenuItem::separator(app)?, #[cfg(not(target_os = "macos"))] &PredefinedMenuItem::quit(app, Some("Exit"))?, &PredefinedMenuItem::close_window(app, Some("Close Window"))?, ], )?; let edit_menu = Submenu::with_items( app, "Edit", true, &[ &PredefinedMenuItem::undo(app, Some("Undo"))?, &PredefinedMenuItem::redo(app, Some("Redo"))?, &PredefinedMenuItem::separator(app)?, &PredefinedMenuItem::cut(app, Some("Cut"))?, &PredefinedMenuItem::copy(app, Some("Copy"))?, &PredefinedMenuItem::paste(app, Some("Paste"))?, &PredefinedMenuItem::separator(app)?, &PredefinedMenuItem::select_all(app, Some("Select All"))?, ], )?; let view_menu = Submenu::with_items( app, "View", true, &[ &MenuItem::with_id(app, "view_all", "All Items", true, Some("CmdOrCtrl+1"))?, &MenuItem::with_id(app, "view_unread", "Unread", true, Some("CmdOrCtrl+2"))?, &MenuItem::with_id(app, "view_starred", "Starred", true, Some("CmdOrCtrl+3"))?, ], )?; let help_menu = Submenu::with_items( app, "Help", true, &[ &MenuItem::with_id(app, "check_updates", "Check for Updates...", true, None::<&str>)?, &PredefinedMenuItem::separator(app)?, &MenuItem::with_id(app, "about", "About Balanced Breakfast", true, None::<&str>)?, ], )?; #[cfg(target_os = "macos")] { Menu::with_items( app, &[&app_menu, &file_menu, &edit_menu, &view_menu, &help_menu], ) } #[cfg(not(target_os = "macos"))] { Menu::with_items( app, &[&file_menu, &edit_menu, &view_menu, &help_menu], ) } }) .on_menu_event(|app, event| { let event_id = event.id().as_ref(); if let Some(window) = app.get_webview_window("main") { let _: Result<(), _> = window.emit(&format!("menu:{}", event_id), ()); } }); builder .run(tauri::generate_context!()) .expect("error while running tauri application"); }