diff options
| author | Max Audron <audron@cocaine.farm> | 2023-12-18 22:54:23 +0100 |
|---|---|---|
| committer | Max Audron <audron@cocaine.farm> | 2023-12-18 22:54:23 +0100 |
| commit | 0e2854fe885178764b2675acf63d8dd20fbc1e4f (patch) | |
| tree | c28c93dbc6dd60cbfbc1c5550f614bda388fe474 /src/message/signalproxy | |
| parent | update quasselproxy deps (diff) | |
implement sync for IrcUser
Diffstat (limited to 'src/message/signalproxy')
| -rw-r--r-- | src/message/signalproxy/objects/ircuser.rs | 101 |
1 files changed, 89 insertions, 12 deletions
diff --git a/src/message/signalproxy/objects/ircuser.rs b/src/message/signalproxy/objects/ircuser.rs index 6b14c70..833a162 100644 --- a/src/message/signalproxy/objects/ircuser.rs +++ b/src/message/signalproxy/objects/ircuser.rs @@ -1,41 +1,117 @@ -use crate::primitive::{DateTime, StringList}; +use crate::{ + message::{Syncable, Class}, + primitive::{DateTime, StringList}, +}; #[allow(unused_imports)] use crate::message::signalproxy::Network; -use libquassel_derive::NetworkMap; + +use itertools::Itertools; +#[cfg(feature = "server")] +use libquassel_derive::sync; +use libquassel_derive::{NetworkMap, Setters}; #[allow(dead_code)] -#[derive(Debug, Clone, PartialEq, NetworkMap)] +#[derive(Debug, Clone, PartialEq, NetworkMap, Setters)] #[network(repr = "maplist")] pub struct IrcUser { pub user: String, pub host: String, pub nick: String, - #[network(rename = "realName")] + #[quassel(name = "realName")] pub real_name: String, pub account: String, pub away: bool, - #[network(rename = "awayMessage")] + #[quassel(name = "awayMessage")] pub away_message: String, - #[network(rename = "idleTime")] + #[quassel(name = "idleTime")] pub idle_time: DateTime, - #[network(rename = "loginTime")] + #[quassel(name = "loginTime")] pub login_time: DateTime, pub server: String, - #[network(rename = "ircOperator")] + #[quassel(name = "ircOperator")] pub irc_operator: String, - #[network(rename = "lastAwayMessageTime")] + // #[quassel(name = "lastAwayMessage")] + // pub last_away_message: i32, + #[quassel(name = "lastAwayMessageTime")] pub last_away_message_time: DateTime, - #[network(rename = "whoisServiceReply")] + #[quassel(name = "whoisServiceReply")] pub whois_service_reply: String, - #[network(rename = "suserHost")] + #[quassel(name = "suserHost")] pub suser_host: String, pub encrypted: bool, pub channels: StringList, - #[network(rename = "userModes")] + #[quassel(name = "userModes")] pub user_modes: String, } +impl IrcUser { + pub fn add_user_modes(&mut self, modes: String) { + for mode in modes.chars() { + if ! self.user_modes.contains(mode) { + self.user_modes.push(mode); + } + } + + #[cfg(feature = "server")] + sync!("addUserModes", [modes]); + } + + pub fn remove_user_modes(&mut self, modes: String) { + for mode in modes.chars() { + if self.user_modes.contains(mode) { + self.user_modes = self.user_modes.chars().filter(|c| *c != mode).collect(); + } + } + + #[cfg(feature = "server")] + sync!("removeUserModes", [modes]); + } + + pub fn update_hostmask(&mut self, mask: String) { + + } + + pub fn join_channel(&mut self, channel: String) { + if ! self.channels.contains(&channel) { + self.channels.push(channel.clone()) + } + + #[cfg(feature = "server")] + sync!("partChannel", [channel]); + } + + pub fn part_channel(&mut self, channel: String) { + if let Some((i, _)) = self.channels.iter().find_position(|c| **c == channel) { + self.channels.remove(i); + } + + #[cfg(feature = "server")] + sync!("partChannel", [channel]); + } + + pub fn quit(&mut self) {} +} + +#[cfg(feature = "client")] +impl crate::message::StatefulSyncableClient for IrcUser {} + +#[cfg(feature = "server")] +impl crate::message::StatefulSyncableServer for IrcUser {} + +impl Syncable for IrcUser { + const CLASS: Class = Class::IrcUser; + + fn send_sync(&self, function: &str, params: crate::primitive::VariantList) { + crate::message::signalproxy::SYNC_PROXY.get().unwrap().sync( + Self::CLASS, + None, + function, + params, + ); + } +} + #[cfg(test)] mod tests { use crate::message::signalproxy::NetworkMap; @@ -57,6 +133,7 @@ mod tests { login_time: OffsetDateTime::unix_epoch(), server: s!(""), irc_operator: s!(""), + // last_away_message: 0, last_away_message_time: OffsetDateTime::unix_epoch(), whois_service_reply: s!(""), suser_host: s!(""), |
