| 1 |
|
| 2 |
|
| 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 |
|