aboutsummaryrefslogtreecommitdiffstats
path: root/mumlib/src/state.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2020-10-21 03:08:21 +0200
committerGustav Sörnäs <gustav@sornas.net>2020-10-21 03:08:21 +0200
commit685eb0ebb072ce2f3da562e828a6ab89c2b0fa65 (patch)
treea9cefffc0fcfea36fc024e865b5a8431dcd28177 /mumlib/src/state.rs
parent1c18f57afe3eae3d61ad44c899d57332e0f71e0c (diff)
parentf98c4d84b24698187102bcc3660246b2a1acb23d (diff)
downloadmum-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.rs66
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
+ }
+}