diff options
Diffstat (limited to 'src/message/signalproxy/objects/bufferview.rs')
| -rw-r--r-- | src/message/signalproxy/objects/bufferview.rs | 255 |
1 files changed, 211 insertions, 44 deletions
diff --git a/src/message/signalproxy/objects/bufferview.rs b/src/message/signalproxy/objects/bufferview.rs index 0e3c904..5b4ab3c 100644 --- a/src/message/signalproxy/objects/bufferview.rs +++ b/src/message/signalproxy/objects/bufferview.rs @@ -1,9 +1,16 @@ use std::{collections::HashMap, convert::TryFrom, convert::TryInto}; +use libquassel_derive::sync; use libquassel_derive::{NetworkList, NetworkMap}; use crate::message::signalproxy::translation::Network; -use crate::message::{StatefulSyncableClient, StatefulSyncableServer, SyncProxy, Syncable}; + +#[allow(unused_imports)] +use crate::message::StatefulSyncableClient; +#[allow(unused_imports)] +use crate::message::StatefulSyncableServer; +use crate::message::Syncable; + use crate::primitive::{Variant, VariantList}; #[derive(Debug, Clone, PartialEq)] @@ -53,7 +60,7 @@ impl super::NetworkList for BufferViewManager { } } -#[derive(Debug, Clone, PartialEq, NetworkList, NetworkMap)] +#[derive(Debug, Default, Clone, PartialEq, NetworkList, NetworkMap)] pub struct BufferViewConfig { #[network(rename = "BufferList", network, variant = "VariantList")] pub buffers: Vec<i32>, @@ -78,8 +85,9 @@ pub struct BufferViewConfig { pub hide_inactive_networks: bool, #[network(rename = "disableDecoration")] pub disable_decoration: bool, + // TODO use bitflags for buffertypes #[network(rename = "allowedBufferTypes")] - pub allowed_buffers_types: i32, + pub allowed_buffer_types: i32, #[network(rename = "minimumActivity")] pub minimum_activity: i32, #[network(rename = "showSearch")] @@ -88,35 +96,11 @@ pub struct BufferViewConfig { #[allow(dead_code)] impl BufferViewConfig { - // TODO add sync to all functions - // TODO requestAddBuffer(bufferId: BufferId, pos: Int) - // TODO requestMoveBuffer(bufferId: BufferId, pos: Int) - // TODO requestRemoveBuffer(bufferId: BufferId) - // TODO requestRemoveBufferPermanently(bufferId: BufferId) - // TODO requestSetBufferViewName(bufferViewName: QString) - // /** - // * Replaces all properties of the object with the content of the - // * "properties" parameter. This parameter is in network representation. - // */ - // DONE requestUpdate(properties: QVariantMap) + pub fn request_add_buffer(&self, id: i32, pos: usize) { + sync!("requestAddBuffer", [id, (pos as i32)]); + } - // // S->C calls - // DONE addBuffer(bufferId: BufferId, pos: Int) - // DONE moveBuffer(bufferId: BufferId, pos: Int) - // DONE removeBuffer(bufferId: BufferId) - // DONE removeBufferPermanently(bufferId: BufferId) - // TODO setAddNewBuffersAutomatically(addNewBuffersAutomatically: Bool) - // TODO setAllowedBufferTypes(bufferTypes: Int) - // TODO setBufferViewName(bufferViewName: QString) - // TODO setDisableDecoration(disableDecoration: Bool) - // TODO setHideInactiveBuffers(hideInactiveBuffers: Bool) - // TODO setHideInactiveNetworks(hideInactiveNetworks: Bool) - // TODO setMinimumActivity(activity: Int) - // TODO setNetworkId(networkId: NetworkId) - // TODO setShowSearch(showSearch: Bool) - // TODO setSortAlphabetically(sortAlphabetically: Bool) - - fn add_buffer(&mut self, id: i32, pos: usize) { + pub fn add_buffer(&mut self, id: i32, pos: usize) { if !self.buffers.contains(&id) { self.buffers.insert(pos, id) } @@ -125,28 +109,36 @@ impl BufferViewConfig { self.removed_buffers.remove(old_pos); } - if let Some(old_pos) = self.temporarily_removed_buffers.iter().position(|&x| x == id) { + if let Some(old_pos) = self + .temporarily_removed_buffers + .iter() + .position(|&x| x == id) + { self.temporarily_removed_buffers.remove(old_pos); } #[cfg(feature = "server")] - { - // TODO replace the None with self.buffer_view_id - self.send_sync( - Some(&self.buffer_view_id.to_string()), - "addBuffer", - vec![id.into(), (pos as i32).into()], - ) - } + sync!("addBuffer", [id, (pos as i32)]); } - fn move_buffer(&mut self, id: i32, pos: usize) { + pub fn request_move_buffer(&self, id: i32, pos: usize) { + sync!("requestMoveBuffer", [id, (pos as i32)]); + } + + pub fn move_buffer(&mut self, id: i32, pos: usize) { let old_pos = self.buffers.iter().position(|&x| x == id).unwrap(); self.buffers.remove(old_pos); self.buffers.insert(pos, id); + + #[cfg(feature = "server")] + sync!("moveBuffer", [id, (pos as i32)]); } - fn remove_buffer(&mut self, id: i32) { + pub fn request_remove_buffer(&mut self, id: i32) { + sync!("requestRemoveBuffer", [id]); + } + + pub fn remove_buffer(&mut self, id: i32) { if let Some(old_pos) = self.buffers.iter().position(|&x| x == id) { self.buffers.remove(old_pos); } @@ -158,20 +150,34 @@ impl BufferViewConfig { if !self.temporarily_removed_buffers.contains(&id) { self.temporarily_removed_buffers.push(id) } + + #[cfg(feature = "server")] + sync!("removeBuffer", [id]); } - fn remove_buffer_permanently(&mut self, id: i32) { + pub fn request_remove_buffer_permanently(&mut self, id: i32) { + sync!("requestRemoveBufferPermanently", [id]); + } + + pub fn remove_buffer_permanently(&mut self, id: i32) { if let Some(old_pos) = self.buffers.iter().position(|&x| x == id) { self.buffers.remove(old_pos); } - if let Some(old_pos) = self.temporarily_removed_buffers.iter().position(|&x| x == id) { + if let Some(old_pos) = self + .temporarily_removed_buffers + .iter() + .position(|&x| x == id) + { self.temporarily_removed_buffers.remove(old_pos); } if !self.removed_buffers.contains(&id) { self.removed_buffers.push(id) } + + #[cfg(feature = "server")] + sync!("removeBufferPermanently", [id]); } } @@ -207,6 +213,42 @@ impl StatefulSyncableServer for BufferViewConfig { Self: Sized, { match msg.slot_name.as_str() { + "requestAddBuffer" => self.add_buffer( + msg.params.remove(0).try_into().unwrap(), + i32::try_from(msg.params.remove(0)).unwrap() as usize, + ), + "requestMoveBuffer" => self.move_buffer( + msg.params.remove(0).try_into().unwrap(), + i32::try_from(msg.params.remove(0)).unwrap() as usize, + ), + "requestRemoveBuffer" => self.remove_buffer(msg.params.remove(0).try_into().unwrap()), + "requestRemoveBufferPermanently" => { + self.remove_buffer_permanently(msg.params.remove(0).try_into().unwrap()) + } + "setAddNewBuffersAutomatically" => { + self.add_new_buffers_automatically = msg.params.remove(0).try_into().unwrap() + } + "setAllowedBufferTypes" => { + self.allowed_buffer_types = msg.params.remove(0).try_into().unwrap() + } + "setBufferViewName" => self.buffer_view_name = msg.params.remove(0).try_into().unwrap(), + "setDisableDecoration" => { + self.disable_decoration = msg.params.remove(0).try_into().unwrap() + } + "setHideInactiveBuffers" => { + self.hide_inactive_buffers = msg.params.remove(0).try_into().unwrap() + } + "setHideInactiveNetworks" => { + self.hide_inactive_networks = msg.params.remove(0).try_into().unwrap() + } + "setMinimumActivity" => { + self.minimum_activity = msg.params.remove(0).try_into().unwrap() + } + "setNetworkId" => self.network_id = msg.params.remove(0).try_into().unwrap(), + "setShowSearch" => self.show_search = msg.params.remove(0).try_into().unwrap(), + "setSortAlphabetically" => { + self.sort_alphabetically = msg.params.remove(0).try_into().unwrap() + } _ => (), } } @@ -214,4 +256,129 @@ impl StatefulSyncableServer for BufferViewConfig { impl Syncable for BufferViewConfig { const CLASS: &'static str = "BufferViewConfig"; + + fn send_sync(&self, function: &str, params: VariantList) { + crate::message::signalproxy::SYNC_PROXY.get().unwrap().sync( + Self::CLASS, + Some(&self.buffer_view_id.to_string()), + function, + params, + ); + } +} + +#[cfg(test)] +mod tests { + use super::*; + + fn bufferviewconfig_sample() -> BufferViewConfig { + BufferViewConfig { + buffers: vec![1, 2, 3], + removed_buffers: vec![4, 5], + temporarily_removed_buffers: vec![6, 7], + ..Default::default() + } + } + + #[test] + fn bufferviewconfig_add_buffer() { + // Add existing buffer, no change + let mut buffer_view_config = bufferviewconfig_sample(); + buffer_view_config.add_buffer(1, 2); + assert_eq!(bufferviewconfig_sample(), buffer_view_config); + + // Add new buffer + let mut buffer_view_config = bufferviewconfig_sample(); + buffer_view_config.add_buffer(10, 1); + assert_eq!( + BufferViewConfig { + buffers: vec![1, 10, 2, 3], + removed_buffers: vec![4, 5], + temporarily_removed_buffers: vec![6, 7], + ..Default::default() + }, + buffer_view_config + ); + + // Add new buffer, remove from removed buffers + let mut buffer_view_config = BufferViewConfig { + buffers: vec![1, 2, 3], + removed_buffers: vec![4, 5, 10], + temporarily_removed_buffers: vec![6, 7, 10], + ..Default::default() + }; + buffer_view_config.add_buffer(10, 1); + assert_eq!( + BufferViewConfig { + buffers: vec![1, 10, 2, 3], + removed_buffers: vec![4, 5], + temporarily_removed_buffers: vec![6, 7], + ..Default::default() + }, + buffer_view_config + ); + } + + #[test] + fn bufferviewconfig_remove_buffer() { + // Remove already removed buffer + let mut buffer_view_config = bufferviewconfig_sample(); + buffer_view_config.remove_buffer(6); + assert_eq!(bufferviewconfig_sample(), buffer_view_config); + + // Remove buffer + let mut buffer_view_config = bufferviewconfig_sample(); + buffer_view_config.remove_buffer(1); + assert_eq!( + BufferViewConfig { + buffers: vec![2, 3], + removed_buffers: vec![4, 5], + temporarily_removed_buffers: vec![6, 7, 1], + ..Default::default() + }, + buffer_view_config + ); + } + + #[test] + fn bufferviewconfig_remove_buffer_permanently() { + // Remove already removed buffer + let mut buffer_view_config = bufferviewconfig_sample(); + buffer_view_config.remove_buffer_permanently(4); + assert_eq!(bufferviewconfig_sample(), buffer_view_config); + + // Remove buffer + let mut buffer_view_config = bufferviewconfig_sample(); + buffer_view_config.remove_buffer_permanently(1); + assert_eq!( + BufferViewConfig { + buffers: vec![2, 3], + removed_buffers: vec![4, 5, 1], + temporarily_removed_buffers: vec![6, 7], + ..Default::default() + }, + buffer_view_config + ); + } + + #[test] + fn bufferviewconfig_move_buffer() { + // Do nothing + let mut buffer_view_config = bufferviewconfig_sample(); + buffer_view_config.move_buffer(1, 0); + assert_eq!(bufferviewconfig_sample(), buffer_view_config); + + // Move buffer + let mut buffer_view_config = bufferviewconfig_sample(); + buffer_view_config.move_buffer(1, 1); + assert_eq!( + BufferViewConfig { + buffers: vec![2, 1, 3], + removed_buffers: vec![4, 5], + temporarily_removed_buffers: vec![6, 7], + ..Default::default() + }, + buffer_view_config + ); + } } |
