diff options
Diffstat (limited to 'src/message/signalproxy')
| -rw-r--r-- | src/message/signalproxy/objects/bufferviewmanager.rs | 26 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/mod.rs | 6 |
2 files changed, 27 insertions, 5 deletions
diff --git a/src/message/signalproxy/objects/bufferviewmanager.rs b/src/message/signalproxy/objects/bufferviewmanager.rs index 0ea30f7..50265dc 100644 --- a/src/message/signalproxy/objects/bufferviewmanager.rs +++ b/src/message/signalproxy/objects/bufferviewmanager.rs @@ -15,7 +15,7 @@ use super::BufferViewConfig; #[derive(Debug, Clone, PartialEq, Default)] pub struct BufferViewManager { - pub buffer_view_configs: HashMap<i32, BufferViewConfig>, + pub buffer_view_configs: HashMap<i32, Option<BufferViewConfig>>, } // TODO initialize the BufferViewConfigs from somewhere @@ -67,6 +67,14 @@ impl BufferViewManager { #[cfg(feature = "server")] sync!("deleteBufferViewConfig", [id]) } + + pub fn init_buffer_view_config(&mut self, config: BufferViewConfig) { + if let Some(stored) = self.buffer_view_configs.get_mut(&config.buffer_view_id) { + *stored = Some(config); + } else { + self.buffer_view_configs.insert(config.buffer_view_id, Some(config)); + } + } } #[cfg(feature = "client")] @@ -137,10 +145,22 @@ impl super::NetworkList for BufferViewManager { return res; } - fn from_network_list(_input: &mut VariantList) -> Self { + fn from_network_list(input: &mut VariantList) -> Self { + let mut i = input.iter(); + i.position(|x| *x == Variant::ByteArray(String::from("BufferViewIds"))) + .expect(format!("failed to get field BufferViewIds").as_str()); + + let ids = match i.next().expect("failed to get next field") { + libquassel::primitive::Variant::VariantList(var) => var.clone(), + _ => panic!("network::list::from: wrong variant type"), + }; + // TODO Somehow do the initrequests for all the IDs we get here Self { - buffer_view_configs: HashMap::new(), + buffer_view_configs: ids + .into_iter() + .map(|id| (i32::try_from(id).unwrap(), Option::None)) + .collect(), } } } diff --git a/src/message/signalproxy/objects/mod.rs b/src/message/signalproxy/objects/mod.rs index 521a591..5ef746a 100644 --- a/src/message/signalproxy/objects/mod.rs +++ b/src/message/signalproxy/objects/mod.rs @@ -91,7 +91,7 @@ impl Types { } } - pub fn from_network(class_name: &str, _object_name: &str, input: &mut VariantList) -> Self { + pub fn from_network(class_name: &str, object_name: &str, input: &mut VariantList) -> Self { debug!( "converting {} from network object: {:#?}", class_name, input @@ -100,7 +100,9 @@ impl Types { "AliasManager" => Types::AliasManager(AliasManager::from_network_list(input)), "BufferSyncer" => Types::BufferSyncer(BufferSyncer::from_network_list(input)), "BufferViewConfig" => { - Types::BufferViewConfig(BufferViewConfig::from_network_list(input)) + let mut config = BufferViewConfig::from_network_list(input); + config.buffer_view_id = object_name.parse().unwrap(); + Types::BufferViewConfig(config) } "BufferViewManager" => { Types::BufferViewManager(BufferViewManager::from_network_list(input)) |
