Skip to main content

max / balanced_breakfast

5.0 KB · 124 lines History Blame Raw
1 //! Desktop application entry point
2 // Prevents additional console window on Windows in release
3 #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
4
5 #[cfg(not(any(target_os = "ios", target_os = "android")))]
6 use tauri::menu::{Menu, MenuItem, PredefinedMenuItem, Submenu};
7 #[cfg(not(any(target_os = "ios", target_os = "android")))]
8 use tauri::{Emitter, Manager};
9 use tracing::info;
10 use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
11
12 fn main() {
13 tracing_subscriber::registry()
14 .with(EnvFilter::try_from_default_env().unwrap_or_else(|_| {
15 "balanced_breakfast_desktop=info,bb_core=debug,bb_db=debug,warn".into()
16 }))
17 .with(tracing_subscriber::fmt::layer())
18 .init();
19
20 info!("Starting Balanced Breakfast");
21
22 let builder = balanced_breakfast_desktop::build_app();
23
24 #[cfg(not(any(target_os = "ios", target_os = "android")))]
25 let builder = builder
26 .menu(|app| {
27 #[cfg(target_os = "macos")]
28 let app_menu = Submenu::with_items(
29 app,
30 "BalancedBreakfast",
31 true,
32 &[
33 &MenuItem::with_id(app, "about", "About Balanced Breakfast", true, None::<&str>)?,
34 &PredefinedMenuItem::separator(app)?,
35 &PredefinedMenuItem::hide(app, Some("Hide Balanced Breakfast"))?,
36 &PredefinedMenuItem::hide_others(app, Some("Hide Others"))?,
37 &PredefinedMenuItem::show_all(app, Some("Show All"))?,
38 &PredefinedMenuItem::separator(app)?,
39 &PredefinedMenuItem::quit(app, Some("Quit Balanced Breakfast"))?,
40 ],
41 )?;
42
43 let file_menu = Submenu::with_items(
44 app,
45 "File",
46 true,
47 &[
48 &MenuItem::with_id(app, "refresh", "Refresh Feeds", true, Some("CmdOrCtrl+R"))?,
49 &MenuItem::with_id(app, "add_feed", "Add Feed...", true, Some("CmdOrCtrl+N"))?,
50 &PredefinedMenuItem::separator(app)?,
51 &MenuItem::with_id(app, "import_opml", "Import OPML...", true, Some("CmdOrCtrl+I"))?,
52 &MenuItem::with_id(app, "export_opml", "Export OPML...", true, Some("CmdOrCtrl+E"))?,
53 &PredefinedMenuItem::separator(app)?,
54 #[cfg(not(target_os = "macos"))]
55 &PredefinedMenuItem::quit(app, Some("Exit"))?,
56 &PredefinedMenuItem::close_window(app, Some("Close Window"))?,
57 ],
58 )?;
59
60 let edit_menu = Submenu::with_items(
61 app,
62 "Edit",
63 true,
64 &[
65 &PredefinedMenuItem::undo(app, Some("Undo"))?,
66 &PredefinedMenuItem::redo(app, Some("Redo"))?,
67 &PredefinedMenuItem::separator(app)?,
68 &PredefinedMenuItem::cut(app, Some("Cut"))?,
69 &PredefinedMenuItem::copy(app, Some("Copy"))?,
70 &PredefinedMenuItem::paste(app, Some("Paste"))?,
71 &PredefinedMenuItem::separator(app)?,
72 &PredefinedMenuItem::select_all(app, Some("Select All"))?,
73 ],
74 )?;
75
76 let view_menu = Submenu::with_items(
77 app,
78 "View",
79 true,
80 &[
81 &MenuItem::with_id(app, "view_all", "All Items", true, Some("CmdOrCtrl+1"))?,
82 &MenuItem::with_id(app, "view_unread", "Unread", true, Some("CmdOrCtrl+2"))?,
83 &MenuItem::with_id(app, "view_starred", "Starred", true, Some("CmdOrCtrl+3"))?,
84 ],
85 )?;
86
87 let help_menu = Submenu::with_items(
88 app,
89 "Help",
90 true,
91 &[
92 &MenuItem::with_id(app, "check_updates", "Check for Updates...", true, None::<&str>)?,
93 &PredefinedMenuItem::separator(app)?,
94 &MenuItem::with_id(app, "about", "About Balanced Breakfast", true, None::<&str>)?,
95 ],
96 )?;
97
98 #[cfg(target_os = "macos")]
99 {
100 Menu::with_items(
101 app,
102 &[&app_menu, &file_menu, &edit_menu, &view_menu, &help_menu],
103 )
104 }
105 #[cfg(not(target_os = "macos"))]
106 {
107 Menu::with_items(
108 app,
109 &[&file_menu, &edit_menu, &view_menu, &help_menu],
110 )
111 }
112 })
113 .on_menu_event(|app, event| {
114 let event_id = event.id().as_ref();
115 if let Some(window) = app.get_webview_window("main") {
116 let _: Result<(), _> = window.emit(&format!("menu:{}", event_id), ());
117 }
118 });
119
120 builder
121 .run(tauri::generate_context!())
122 .expect("error while running tauri application");
123 }
124