feat(core): wire up show_icon and show_notification options
This commit is contained in:
		
							parent
							
								
									fa149471f2
								
							
						
					
					
						commit
						e8db703014
					
				| 
						 | 
					@ -42,7 +42,7 @@ use crate::{cli::worker::{context::Context, engine::{dispatch::executor::{clipbo
 | 
				
			||||||
          extension::{clipboard::ClipboardAdapter, form::FormProviderAdapter},
 | 
					          extension::{clipboard::ClipboardAdapter, form::FormProviderAdapter},
 | 
				
			||||||
          RendererAdapter,
 | 
					          RendererAdapter,
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
      }}, match_cache::{CombinedMatchCache, MatchCache}}, common_flags::{WORKER_START_REASON_CONFIG_CHANGED, WORKER_START_REASON_KEYBOARD_LAYOUT_CHANGED, WORKER_START_REASON_MANUAL}, preferences::Preferences};
 | 
					      }}, match_cache::{CombinedMatchCache, MatchCache}, ui::notification::NotificationManager}, common_flags::{WORKER_START_REASON_CONFIG_CHANGED, WORKER_START_REASON_KEYBOARD_LAYOUT_CHANGED, WORKER_START_REASON_MANUAL}, preferences::Preferences};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use super::secure_input::SecureInputEvent;
 | 
					use super::secure_input::SecureInputEvent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -217,19 +217,21 @@ pub fn initialize_and_spawn(
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // TODO: check config
 | 
					      let default_config = &*config_manager.default();
 | 
				
			||||||
 | 
					      let notification_manager = NotificationManager::new(&*ui_remote, default_config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      match start_reason.as_deref() {
 | 
					      match start_reason.as_deref() {
 | 
				
			||||||
        Some(flag) if flag == WORKER_START_REASON_CONFIG_CHANGED => {
 | 
					        Some(flag) if flag == WORKER_START_REASON_CONFIG_CHANGED => {
 | 
				
			||||||
          ui_remote.show_notification("Configuration reloaded! Espanso automatically loads new changes as soon as you save them.");
 | 
					          notification_manager.notify_config_reloaded(false);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        Some(flag) if flag == WORKER_START_REASON_MANUAL => {
 | 
					        Some(flag) if flag == WORKER_START_REASON_MANUAL => {
 | 
				
			||||||
          ui_remote.show_notification("Configuration reloaded!");
 | 
					          notification_manager.notify_config_reloaded(true);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        Some(flag) if flag == WORKER_START_REASON_KEYBOARD_LAYOUT_CHANGED => {
 | 
					        Some(flag) if flag == WORKER_START_REASON_KEYBOARD_LAYOUT_CHANGED => {
 | 
				
			||||||
          ui_remote.show_notification("Updated keyboard layout!");
 | 
					          notification_manager.notify_keyboard_layout_reloaded()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        _ => {
 | 
					        _ => {
 | 
				
			||||||
          ui_remote.show_notification("Espanso is running!");
 | 
					          notification_manager.notify_start();
 | 
				
			||||||
          
 | 
					          
 | 
				
			||||||
          if !preferences.has_displayed_welcome() {
 | 
					          if !preferences.has_displayed_welcome() {
 | 
				
			||||||
            super::ui::welcome::show_welcome_screen();
 | 
					            super::ui::welcome::show_welcome_screen();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,13 +98,12 @@ fn worker_main(args: CliModuleArgs) -> i32 {
 | 
				
			||||||
    crate::icon::load_icon_paths(&paths.runtime).expect("unable to initialize icons");
 | 
					    crate::icon::load_icon_paths(&paths.runtime).expect("unable to initialize icons");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let (remote, mut eventloop) = espanso_ui::create_ui(espanso_ui::UIOptions {
 | 
					  let (remote, mut eventloop) = espanso_ui::create_ui(espanso_ui::UIOptions {
 | 
				
			||||||
    // TODO: handle show icon
 | 
					    show_icon: config_store.default().show_icon(),
 | 
				
			||||||
    icon_paths: convert_icon_paths_to_tray_vec(&icon_paths),
 | 
					    icon_paths: convert_icon_paths_to_tray_vec(&icon_paths),
 | 
				
			||||||
    notification_icon_path: icon_paths
 | 
					    notification_icon_path: icon_paths
 | 
				
			||||||
      .logo
 | 
					      .logo
 | 
				
			||||||
      .as_ref()
 | 
					      .as_ref()
 | 
				
			||||||
      .map(|path| path.to_string_lossy().to_string()),
 | 
					      .map(|path| path.to_string_lossy().to_string()),
 | 
				
			||||||
    ..Default::default()
 | 
					 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
  .expect("unable to create tray icon UI module");
 | 
					  .expect("unable to create tray icon UI module");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,5 +17,6 @@
 | 
				
			||||||
 * along with espanso.  If not, see <https://www.gnu.org/licenses/>.
 | 
					 * along with espanso.  If not, see <https://www.gnu.org/licenses/>.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub mod notification;
 | 
				
			||||||
pub mod util;
 | 
					pub mod util;
 | 
				
			||||||
pub mod welcome;
 | 
					pub mod welcome;
 | 
				
			||||||
							
								
								
									
										56
									
								
								espanso/src/cli/worker/ui/notification.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								espanso/src/cli/worker/ui/notification.rs
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,56 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This file is part of espanso.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2019-2021 Federico Terzi
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * espanso is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					 * (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * espanso is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with espanso.  If not, see <https://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use espanso_config::config::Config;
 | 
				
			||||||
 | 
					use espanso_ui::UIRemote;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub struct NotificationManager<'a> {
 | 
				
			||||||
 | 
					  ui_remote: &'a dyn UIRemote,
 | 
				
			||||||
 | 
					  config: &'a dyn Config,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl<'a> NotificationManager<'a> {
 | 
				
			||||||
 | 
					  pub fn new(ui_remote: &'a dyn UIRemote, config: &'a dyn Config) -> Self {
 | 
				
			||||||
 | 
					    NotificationManager { ui_remote, config }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  fn notify(&self, text: &str) {
 | 
				
			||||||
 | 
					    if self.config.show_notifications() {
 | 
				
			||||||
 | 
					      self.ui_remote.show_notification(text);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pub fn notify_start(&self) {
 | 
				
			||||||
 | 
					    self.notify("Espanso is running!");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pub fn notify_config_reloaded(&self, is_manual_restart: bool) {
 | 
				
			||||||
 | 
					    if is_manual_restart {
 | 
				
			||||||
 | 
					      self.notify("Configuration reloaded!");
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      self.notify(
 | 
				
			||||||
 | 
					        "Configuration reloaded! Espanso automatically loads new changes as soon as you save them.",
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pub fn notify_keyboard_layout_reloaded(&self) {
 | 
				
			||||||
 | 
					    self.notify("Updated keyboard layout!");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -82,6 +82,18 @@ macro_rules! generate_patchable_config {
 | 
				
			||||||
        fn search_shortcut(&self) -> Option<String> {
 | 
					        fn search_shortcut(&self) -> Option<String> {
 | 
				
			||||||
          self.base.search_shortcut()
 | 
					          self.base.search_shortcut()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        fn show_icon(&self) -> bool {
 | 
				
			||||||
 | 
					          self.base.show_icon()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        fn show_notifications(&self) -> bool {
 | 
				
			||||||
 | 
					          self.base.show_notifications()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        fn secure_input_notification(&self) -> bool {
 | 
				
			||||||
 | 
					          self.base.secure_input_notification()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user