diff options
| author | Max Audron <audron@cocaine.farm> | 2025-02-23 17:44:12 +0100 |
|---|---|---|
| committer | Max Audron <audron@cocaine.farm> | 2025-02-23 17:44:12 +0100 |
| commit | b168e9489b33191168f940146e9fc3439f753e79 (patch) | |
| tree | 5c3ff43506df2fe60542c7b55533d38a4090b31f /src | |
| parent | move network config to it's own file and impl it's sync (diff) | |
add syncables for IrcUser
Diffstat (limited to 'src')
| -rw-r--r-- | src/message/signalproxy/objects/ircuser.rs | 35 | ||||
| -rw-r--r-- | src/session/mod.rs | 20 |
2 files changed, 53 insertions, 2 deletions
diff --git a/src/message/signalproxy/objects/ircuser.rs b/src/message/signalproxy/objects/ircuser.rs index 72f98be..6ddf0cc 100644 --- a/src/message/signalproxy/objects/ircuser.rs +++ b/src/message/signalproxy/objects/ircuser.rs @@ -89,7 +89,40 @@ impl IrcUser { } #[cfg(feature = "client")] -impl crate::message::StatefulSyncableClient for IrcUser {} +impl crate::message::StatefulSyncableClient for IrcUser { + fn sync_custom(&mut self, mut msg: crate::message::SyncMessage) + where + Self: Sized, + { + match msg.slot_name.as_str() { + "addUserModes" => self.add_user_modes(get_param!(msg)), + "joinChannel" => self.join_channel(get_param!(msg)), + "partChannel" => self.part_channel(get_param!(msg)), + "quit" => self.quit(), + "removeUserModes" => self.remove_user_modes(get_param!(msg)), + "setAccount" => self.set_account(get_param!(msg)), + "setAway" => self.set_away(get_param!(msg)), + "setAwayMessage" => self.set_away_message(get_param!(msg)), + "setEncrypted" => self.set_encrypted(get_param!(msg)), + "setHost" => self.set_host(get_param!(msg)), + "setIdleTime" => self.set_idle_time(get_param!(msg)), + "setIrcOperator" => self.set_irc_operator(get_param!(msg)), + // TODO + // "setLastAwayMessage" => self., + "setLastAwayMessageTime" => self.set_last_away_message_time(get_param!(msg)), + "setLoginTime" => self.set_login_time(get_param!(msg)), + "setNick" => self.set_nick(get_param!(msg)), + "setRealName" => self.set_real_name(get_param!(msg)), + "setServer" => self.set_server(get_param!(msg)), + "setSuserHost" => self.set_suser_host(get_param!(msg)), + "setUser" => self.set_user(get_param!(msg)), + "setUserModes" => self.set_user_modes(get_param!(msg)), + "setWhoisServiceReply" => self.set_whois_service_reply(get_param!(msg)), + "updateHostmask" => self.update_hostmask(get_param!(msg)), + _ => unimplemented!(), + } + } +} #[cfg(feature = "server")] impl crate::message::StatefulSyncableServer for IrcUser {} diff --git a/src/session/mod.rs b/src/session/mod.rs index f98cd04..be78a05 100644 --- a/src/session/mod.rs +++ b/src/session/mod.rs @@ -118,7 +118,25 @@ pub trait SessionManager { warn!("Could not find Network {:?}", network_id) } } - Class::IrcUser => (), + Class::IrcUser => { + let mut object_name = msg.object_name.split('/'); + let network_id: i32 = object_name.next().unwrap().parse().unwrap(); + let user = object_name.next().unwrap(); + + debug!("Syncing IrcUser {} in Network {:?}", user, network_id); + + if let Some(network) = self.network(network_id) { + if let Some(user) = network.irc_users.get_mut(user) { + user.sync(msg); + // TODO we probably need to deal with the quit here? + // and remove the user from the network + } else { + warn!("Could not find IrcUser {} in Network {:?}", user, network_id) + } + } else { + warn!("Could not find Network {:?}", network_id) + } + } Class::Unknown => (), } } |
