aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2021-12-02 23:53:53 +0100
committerMax Audron <audron@cocaine.farm>2021-12-02 23:53:53 +0100
commit15a8623ec503324f623a34c86aaa7e358e537e56 (patch)
tree1533e5a37a4d485496735651b02359bf4d96b965 /src
parentadd coreinfo impl (diff)
add highlightrulemanager impl
Diffstat (limited to 'src')
-rw-r--r--src/message/signalproxy/objects/highlightrulemanager.rs180
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";