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},
 | 
			
		||||
          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;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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() {
 | 
			
		||||
        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 => {
 | 
			
		||||
          ui_remote.show_notification("Configuration reloaded!");
 | 
			
		||||
          notification_manager.notify_config_reloaded(true);
 | 
			
		||||
        }
 | 
			
		||||
        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() {
 | 
			
		||||
            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");
 | 
			
		||||
 | 
			
		||||
  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),
 | 
			
		||||
    notification_icon_path: icon_paths
 | 
			
		||||
      .logo
 | 
			
		||||
      .as_ref()
 | 
			
		||||
      .map(|path| path.to_string_lossy().to_string()),
 | 
			
		||||
    ..Default::default()
 | 
			
		||||
  })
 | 
			
		||||
  .expect("unable to create tray icon UI module");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,5 +17,6 @@
 | 
			
		|||
 * along with espanso.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
pub mod notification;
 | 
			
		||||
pub mod util;
 | 
			
		||||
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> {
 | 
			
		||||
          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