diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2020-10-21 03:08:21 +0200 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2020-10-21 03:08:21 +0200 |
| commit | 685eb0ebb072ce2f3da562e828a6ab89c2b0fa65 (patch) | |
| tree | a9cefffc0fcfea36fc024e865b5a8431dcd28177 /mumlib/src/state.rs | |
| parent | 1c18f57afe3eae3d61ad44c899d57332e0f71e0c (diff) | |
| parent | f98c4d84b24698187102bcc3660246b2a1acb23d (diff) | |
| download | mum-685eb0ebb072ce2f3da562e828a6ab89c2b0fa65.tar.gz | |
Merge branch 'audio-new-clients' into 'main'
Parse user state diff and handle connecting clients
Closes #37 and #36
See merge request gustav/mum!14
Diffstat (limited to 'mumlib/src/state.rs')
| -rw-r--r-- | mumlib/src/state.rs | 66 |
1 files changed, 65 insertions, 1 deletions
diff --git a/mumlib/src/state.rs b/mumlib/src/state.rs index b09726e..b6b4039 100644 --- a/mumlib/src/state.rs +++ b/mumlib/src/state.rs @@ -1,3 +1,4 @@ +use mumble_protocol::control::msgs; use serde::export::Formatter; use serde::{Deserialize, Serialize}; use std::fmt::Display; @@ -116,7 +117,7 @@ impl<'a> Iterator for UsersIter<'a> { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct User { - pub comment: Option<String>, + pub comment: Option<String>, //TODO not option, empty string instead pub hash: Option<String>, pub name: String, pub priority_speaker: bool, @@ -134,3 +135,66 @@ impl Display for User { write!(f, "{}", self.name) } } + +#[derive(Debug, Default)] +pub struct UserDiff { + pub comment: Option<String>, + pub hash: Option<String>, + pub name: Option<String>, + pub priority_speaker: Option<bool>, + pub recording: Option<bool>, + + pub suppress: Option<bool>, // by me + pub self_mute: Option<bool>, // by self + pub self_deaf: Option<bool>, // by self + pub mute: Option<bool>, // by admin + pub deaf: Option<bool>, // by admin + + pub channel_id: Option<u32>, +} + +impl UserDiff { + pub fn new() -> Self { + UserDiff::default() + } +} + +impl From<msgs::UserState> for UserDiff { + fn from(mut msg: msgs::UserState) -> Self { + let mut ud = UserDiff::new(); + if msg.has_comment() { + ud.comment = Some(msg.take_comment()); + } + if msg.has_hash() { + ud.hash = Some(msg.take_hash()); + } + if msg.has_name() { + ud.name = Some(msg.take_name()); + } + if msg.has_priority_speaker() { + ud.priority_speaker = Some(msg.get_priority_speaker()); + } + if msg.has_recording() { + ud.recording = Some(msg.get_recording()); + } + if msg.has_suppress() { + ud.suppress = Some(msg.get_suppress()); + } + if msg.has_self_mute() { + ud.self_mute = Some(msg.get_self_mute()); + } + if msg.has_self_deaf() { + ud.self_deaf = Some(msg.get_self_deaf()); + } + if msg.has_mute() { + ud.mute = Some(msg.get_mute()); + } + if msg.has_deaf() { + ud.deaf = Some(msg.get_deaf()); + } + if msg.has_channel_id() { + ud.channel_id = Some(msg.get_channel_id()); + } + ud + } +} |
