diff options
| author | Max Audron <audron@cocaine.farm> | 2021-12-02 23:53:53 +0100 |
|---|---|---|
| committer | Max Audron <audron@cocaine.farm> | 2021-12-02 23:53:53 +0100 |
| commit | 15a8623ec503324f623a34c86aaa7e358e537e56 (patch) | |
| tree | 1533e5a37a4d485496735651b02359bf4d96b965 /src | |
| parent | add coreinfo impl (diff) | |
add highlightrulemanager impl
Diffstat (limited to 'src')
| -rw-r--r-- | src/message/signalproxy/objects/highlightrulemanager.rs | 180 |
1 files changed, 178 insertions, 2 deletions
diff --git a/src/message/signalproxy/objects/highlightrulemanager.rs b/src/message/signalproxy/objects/highlightrulemanager.rs index 0459896..3bd09ad 100644 --- a/src/message/signalproxy/objects/highlightrulemanager.rs +++ b/src/message/signalproxy/objects/highlightrulemanager.rs @@ -1,3 +1,4 @@ +use libquassel_derive::sync; use num_derive::{FromPrimitive, ToPrimitive}; use num_traits::{FromPrimitive, ToPrimitive}; @@ -22,11 +23,186 @@ pub struct HighlightRuleManager { nicks_case_sensitive: bool, } +impl HighlightRuleManager { + /// Get a reference to a specific highlight rule by ID. + pub fn highlight_rule(&self, id: i32) -> Option<&HighlightRule> { + if let Some(position) = self + .highlight_rule_list + .iter() + .position(|rule| rule.id == id) + { + self.highlight_rule_list.get(position) + } else { + None + } + } + + /// Get a mutable reference to a specific highlight rule by ID. + pub fn highlight_rule_mut(&mut self, id: i32) -> Option<&mut HighlightRule> { + if let Some(position) = self + .highlight_rule_list + .iter() + .position(|rule| rule.id == id) + { + self.highlight_rule_list.get_mut(position) + } else { + None + } + } + + pub fn request_remove_highlight_rule(&self, id: i32) { + sync!("requestRemoveHighlightRule", [id]) + } + + pub fn request_toggle_highlight_rule(&self, id: i32) { + sync!("requestToggleHighlightRule", [id]) + } + + pub fn request_add_highlight_rule( + &self, + id: i32, + name: String, + is_regex: bool, + is_case_sensitive: bool, + is_enabled: bool, + is_inverse: bool, + sender: String, + channel: String, + ) { + sync!( + "requestAddHighlightRule", + [ + id, + name, + is_regex, + is_case_sensitive, + is_enabled, + is_inverse, + sender, + channel + ] + ) + } + + pub fn request_set_highlight_nick(&self, nick: HighlightNickType) { + sync!("requestSetHighlightNick", [nick.to_network()]) + } + + pub fn request_set_nicks_case_sensitive(&self, enabled: bool) { + sync!("requestSetNicksCaseSensitive", [enabled]) + } + + pub fn remove_highlight_rule(&mut self, id: i32) { + if let Some(position) = self + .highlight_rule_list + .iter() + .position(|rule| rule.id == id) + { + self.highlight_rule_list.remove(position); + } + + #[cfg(feature = "server")] + sync!("removeHighlightRule", [id]); + } + + pub fn toggle_highlight_rule(&mut self, id: i32) { + if let Some(rule) = self.highlight_rule_mut(id) { + rule.is_enabled = !rule.is_enabled; + } + + #[cfg(feature = "server")] + sync!("toggleHighlightRule", [id]) + } + + pub fn add_highlight_rule(&mut self, rule: HighlightRule) { + #[cfg(feature = "server")] + sync!( + "addHighlightRule", + [ + rule.id.clone(), + rule.name.clone(), + rule.is_regex.clone(), + rule.is_case_sensitive.clone(), + rule.is_enabled.clone(), + rule.is_inverse.clone(), + rule.sender.clone(), + rule.channel.clone() + ] + ); + + self.highlight_rule_list.push(rule); + } + + pub fn set_highlight_nick(&mut self, nick: HighlightNickType) { + #[cfg(feature = "server")] + sync!("setHighlightNick", [nick.to_network()]); + + self.highlight_nick = nick; + } + + pub fn set_nicks_case_sensitive(&mut self, enabled: bool) { + #[cfg(feature = "server")] + sync!("setNicksCaseSensitive", [enabled]); + + self.nicks_case_sensitive = enabled; + } +} + #[cfg(feature = "client")] -impl StatefulSyncableClient for HighlightRuleManager {} +impl StatefulSyncableClient for HighlightRuleManager { + fn sync_custom(&mut self, mut msg: crate::message::SyncMessage) + where + Self: Sized, + { + match msg.slot_name.as_str() { + "removeHighlightRule" => self.remove_highlight_rule(get_param!(msg)), + "toggleHighlightRule" => self.toggle_highlight_rule(get_param!(msg)), + "addHighlightRule" => self.add_highlight_rule(HighlightRule { + id: get_param!(msg), + name: get_param!(msg), + is_regex: get_param!(msg), + is_case_sensitive: get_param!(msg), + is_enabled: get_param!(msg), + is_inverse: get_param!(msg), + sender: get_param!(msg), + channel: get_param!(msg), + }), + "setHighlightNick" => { + self.set_highlight_nick(HighlightNickType::from_network(&mut get_param!(msg))) + } + "setNicksCaseSensitive" => self.set_nicks_case_sensitive(get_param!(msg)), + _ => (), + } + } +} #[cfg(feature = "server")] -impl StatefulSyncableServer for HighlightRuleManager {} +impl StatefulSyncableServer for HighlightRuleManager { + fn sync_custom(&mut self, mut msg: crate::message::SyncMessage) + where + Self: Sized, + { + match msg.slot_name.as_str() { + "requestRemoveHighlightRule" => self.remove_highlight_rule(get_param!(msg)), + "requestToggleHighlightRule" => self.toggle_highlight_rule(get_param!(msg)), + "requestAddHighlightRule" => self.add_highlight_rule(HighlightRule { + id: get_param!(msg), + name: get_param!(msg), + is_regex: get_param!(msg), + is_case_sensitive: get_param!(msg), + is_enabled: get_param!(msg), + is_inverse: get_param!(msg), + sender: get_param!(msg), + channel: get_param!(msg), + }), + "requestSetHighlightNick" => { + self.set_highlight_nick(HighlightNickType::from_network(&mut get_param!(msg))) + } + "requestSetNicksCaseSensitive" => self.set_nicks_case_sensitive(get_param!(msg)), + _ => (), + } + } +} impl Syncable for HighlightRuleManager { const CLASS: &'static str = "HighlightRuleManager"; |
