aboutsummaryrefslogtreecommitdiff
path: root/src/message
diff options
context:
space:
mode:
Diffstat (limited to 'src/message')
-rw-r--r--src/message/signalproxy/mod.rs30
-rw-r--r--src/message/signalproxy/objects/aliasmanager.rs11
-rw-r--r--src/message/signalproxy/objects/backlogmanager.rs2
-rw-r--r--src/message/signalproxy/objects/buffersyncer.rs6
-rw-r--r--src/message/signalproxy/objects/bufferviewconfig.rs4
-rw-r--r--src/message/signalproxy/objects/bufferviewmanager.rs5
-rw-r--r--src/message/signalproxy/objects/certmanager.rs6
-rw-r--r--src/message/signalproxy/objects/coreinfo.rs50
-rw-r--r--src/message/signalproxy/objects/highlightrulemanager.rs63
-rw-r--r--src/message/signalproxy/objects/identity.rs5
-rw-r--r--src/message/signalproxy/objects/ignorelistmanager.rs6
-rw-r--r--src/message/signalproxy/objects/mod.rs2
-rw-r--r--src/message/signalproxy/objects/network.rs26
13 files changed, 156 insertions, 60 deletions
diff --git a/src/message/signalproxy/mod.rs b/src/message/signalproxy/mod.rs
index 6b96909..cc1fc54 100644
--- a/src/message/signalproxy/mod.rs
+++ b/src/message/signalproxy/mod.rs
@@ -37,11 +37,21 @@ pub struct SyncProxy {
/// SyncProxy sends sync and rpc messages
impl SyncProxy {
/// Initialize the global SYNC_PROXY object and return receiver ends for the SyncMessage and RpcCall channels
- pub fn init(cap: usize) -> (crossbeam_channel::Receiver<SyncMessage>, crossbeam_channel::Receiver<RpcCall>) {
+ pub fn init(
+ cap: usize,
+ ) -> (
+ crossbeam_channel::Receiver<SyncMessage>,
+ crossbeam_channel::Receiver<RpcCall>,
+ ) {
let (sync_tx, sync_rx) = crossbeam_channel::bounded(cap);
let (rpc_tx, rpc_rx) = crossbeam_channel::bounded(cap);
- SYNC_PROXY.set(SyncProxy { sync_channel: sync_tx, rpc_channel: rpc_tx }).unwrap();
+ SYNC_PROXY
+ .set(SyncProxy {
+ sync_channel: sync_tx,
+ rpc_channel: rpc_tx,
+ })
+ .unwrap();
(sync_rx, rpc_rx)
}
@@ -49,13 +59,13 @@ impl SyncProxy {
/// Send a SyncMessage
fn sync(
&self,
- class_name: &str,
+ class_name: Class,
object_name: Option<&str>,
function: &str,
params: VariantList,
) {
let msg = SyncMessage {
- class_name: class_name.to_string(),
+ class_name,
object_name: object_name.unwrap_or("").to_string(),
slot_name: function.to_string(),
params,
@@ -77,7 +87,7 @@ impl SyncProxy {
/// If the object name has to be set implement the send_sync() function.
pub trait Syncable {
/// The Class of the object as transmitted in the SyncMessage
- const CLASS: &'static str;
+ const CLASS: Class;
/// Send a SyncMessage.
fn send_sync(&self, function: &str, params: VariantList) {
@@ -96,6 +106,13 @@ pub trait Syncable {
.unwrap()
.rpc(function, params);
}
+
+ fn init(&mut self, data: Self)
+ where
+ Self: Sized,
+ {
+ *self = data
+ }
}
/// Methods for a Stateful Syncable object on the client side.
@@ -157,7 +174,8 @@ pub trait StatefulSyncableClient: Syncable + translation::NetworkMap {
}
}
- fn sync_custom(&mut self, msg: crate::message::SyncMessage)
+ #[allow(unused_mut)]
+ fn sync_custom(&mut self, mut msg: crate::message::SyncMessage)
where
Self: Sized,
{
diff --git a/src/message/signalproxy/objects/aliasmanager.rs b/src/message/signalproxy/objects/aliasmanager.rs
index 6aa7b06..489d8c8 100644
--- a/src/message/signalproxy/objects/aliasmanager.rs
+++ b/src/message/signalproxy/objects/aliasmanager.rs
@@ -1,5 +1,8 @@
+#[allow(unused_imports)]
+use libquassel_derive::sync;
use libquassel_derive::{NetworkList, NetworkMap};
+use crate::message::Class;
#[allow(unused_imports)]
use crate::message::StatefulSyncableClient;
#[allow(unused_imports)]
@@ -15,7 +18,7 @@ use crate::primitive::VariantMap;
/// AliasManager
/// keeps a list of all registered aliases
/// syncable
-#[derive(Clone, Debug, std::cmp::PartialEq, NetworkList, NetworkMap)]
+#[derive(Clone, Default, Debug, std::cmp::PartialEq, NetworkList, NetworkMap)]
pub struct AliasManager {
#[network(rename = "Aliases", variant = "VariantMap", network, map)]
pub aliases: Vec<Alias>,
@@ -23,7 +26,9 @@ pub struct AliasManager {
impl AliasManager {
pub fn add_alias(&mut self, alias: Alias) {
- // TODO check if name is equal
+ #[cfg(feature = "server")]
+ sync!("addAlias", [alias.to_network_map()]);
+
if !self.aliases.contains(&alias) {
self.aliases.push(alias)
}
@@ -49,7 +54,7 @@ impl StatefulSyncableServer for AliasManager {
}
impl Syncable for AliasManager {
- const CLASS: &'static str = "AliasManager";
+ const CLASS: Class = Class::AliasManager;
}
/// Alias
diff --git a/src/message/signalproxy/objects/backlogmanager.rs b/src/message/signalproxy/objects/backlogmanager.rs
index 86a7f61..7d6624d 100644
--- a/src/message/signalproxy/objects/backlogmanager.rs
+++ b/src/message/signalproxy/objects/backlogmanager.rs
@@ -52,7 +52,7 @@ use crate::primitive::VariantList;
/// Receive and Request Backlog
/// All "request" functions are Client to Server and all "receive" functions are Server to Client
-#[derive(Clone, Debug, std::cmp::PartialEq)]
+#[derive(Clone, Debug, std::cmp::PartialEq, Default)]
pub struct BacklogManager {}
impl BacklogManager {
diff --git a/src/message/signalproxy/objects/buffersyncer.rs b/src/message/signalproxy/objects/buffersyncer.rs
index ca68ade..9bca521 100644
--- a/src/message/signalproxy/objects/buffersyncer.rs
+++ b/src/message/signalproxy/objects/buffersyncer.rs
@@ -1,13 +1,13 @@
use std::collections::HashMap;
use crate::{
- message::{signalproxy::translation::Network, Syncable},
+ message::{signalproxy::translation::Network, Syncable, Class},
primitive::MessageType,
};
use libquassel_derive::{sync, NetworkList, NetworkMap};
-#[derive(Debug, Clone, PartialEq, NetworkList, NetworkMap)]
+#[derive(Default, Debug, Clone, PartialEq, NetworkList, NetworkMap)]
pub struct BufferSyncer {
#[network(rename = "Activities", network, variant = "VariantList")]
pub activities: HashMap<i32, MessageType>,
@@ -180,7 +180,7 @@ impl crate::message::StatefulSyncableServer for BufferSyncer {
}
impl Syncable for BufferSyncer {
- const CLASS: &'static str = "BufferSyncer";
+ const CLASS: Class = Class::BufferSyncer;
}
#[cfg(test)]
diff --git a/src/message/signalproxy/objects/bufferviewconfig.rs b/src/message/signalproxy/objects/bufferviewconfig.rs
index e413a5f..cdca0dc 100644
--- a/src/message/signalproxy/objects/bufferviewconfig.rs
+++ b/src/message/signalproxy/objects/bufferviewconfig.rs
@@ -7,7 +7,7 @@ use crate::message::signalproxy::translation::Network;
use crate::message::StatefulSyncableClient;
#[allow(unused_imports)]
use crate::message::StatefulSyncableServer;
-use crate::message::Syncable;
+use crate::message::{Syncable, Class};
use crate::primitive::VariantList;
@@ -206,7 +206,7 @@ impl StatefulSyncableServer for BufferViewConfig {
}
impl Syncable for BufferViewConfig {
- const CLASS: &'static str = "BufferViewConfig";
+ const CLASS: Class = Class::BufferViewConfig;
fn send_sync(&self, function: &str, params: VariantList) {
crate::message::signalproxy::SYNC_PROXY.get().unwrap().sync(
diff --git a/src/message/signalproxy/objects/bufferviewmanager.rs b/src/message/signalproxy/objects/bufferviewmanager.rs
index 63c48e4..0ea30f7 100644
--- a/src/message/signalproxy/objects/bufferviewmanager.rs
+++ b/src/message/signalproxy/objects/bufferviewmanager.rs
@@ -2,6 +2,7 @@ use std::collections::HashMap;
use libquassel_derive::sync;
+use crate::message::Class;
#[allow(unused_imports)]
use crate::message::StatefulSyncableClient;
#[allow(unused_imports)]
@@ -12,7 +13,7 @@ use crate::primitive::{Variant, VariantList, VariantMap};
use super::BufferViewConfig;
-#[derive(Debug, Clone, PartialEq)]
+#[derive(Debug, Clone, PartialEq, Default)]
pub struct BufferViewManager {
pub buffer_view_configs: HashMap<i32, BufferViewConfig>,
}
@@ -118,7 +119,7 @@ impl StatefulSyncableServer for BufferViewManager {
}
impl Syncable for BufferViewManager {
- const CLASS: &'static str = "BufferViewManager";
+ const CLASS: Class = Class::BufferViewManager;
}
impl super::NetworkList for BufferViewManager {
diff --git a/src/message/signalproxy/objects/certmanager.rs b/src/message/signalproxy/objects/certmanager.rs
index c82d06c..a518b7b 100644
--- a/src/message/signalproxy/objects/certmanager.rs
+++ b/src/message/signalproxy/objects/certmanager.rs
@@ -1,10 +1,10 @@
use libquassel_derive::{NetworkList, NetworkMap};
-use crate::message::Syncable;
+use crate::message::{Syncable, Class};
#[allow(unused_imports)]
use crate::primitive::Variant;
-#[derive(Debug, Clone, PartialEq, NetworkList, NetworkMap)]
+#[derive(Debug, Clone, PartialEq, NetworkList, NetworkMap, Default)]
pub struct CertManager {
#[network(rename = "sslKey", variant = "ByteArray")]
pub ssl_key: String,
@@ -46,5 +46,5 @@ impl crate::message::StatefulSyncableClient for CertManager {
impl crate::message::StatefulSyncableServer for CertManager {}
impl Syncable for CertManager {
- const CLASS: &'static str = "CertManager";
+ const CLASS: Class = Class::CertManager;
}
diff --git a/src/message/signalproxy/objects/coreinfo.rs b/src/message/signalproxy/objects/coreinfo.rs
index ac493f1..9bfa728 100644
--- a/src/message/signalproxy/objects/coreinfo.rs
+++ b/src/message/signalproxy/objects/coreinfo.rs
@@ -1,14 +1,14 @@
use libquassel_derive::{NetworkList, NetworkMap};
use crate::message::signalproxy::translation::NetworkMap;
-use crate::message::Syncable;
+use crate::message::{Syncable, Class};
use crate::primitive::{DateTime, StringList};
-#[derive(Debug, Clone, PartialEq, NetworkList, NetworkMap)]
+#[derive(Default, Debug, Clone, PartialEq, NetworkList, NetworkMap)]
#[network(repr = "map")]
pub struct CoreInfo {
#[network(rename = "coreData", variant = "VariantMap", network)]
- core_data: CoreData,
+ pub core_data: CoreData,
}
impl CoreInfo {
@@ -51,48 +51,60 @@ impl crate::message::StatefulSyncableServer for CoreInfo {
}
impl Syncable for CoreInfo {
- const CLASS: &'static str = "CoreInfo";
+ const CLASS: Class = Class::CoreInfo;
}
#[derive(Debug, Clone, PartialEq, NetworkMap)]
#[network(repr = "map")]
pub struct CoreData {
#[network(rename = "quasselVersion")]
- quassel_version: String,
+ pub quassel_version: String,
#[network(rename = "quasselBuildDate")]
- quassel_build_date: String,
+ pub quassel_build_date: String,
#[network(rename = "startTime")]
- start_time: DateTime,
+ pub start_time: DateTime,
#[network(rename = "sessionConnectedClients")]
- session_connected_clients: i32,
+ pub session_connected_clients: i32,
#[network(
rename = "sessionConnectedClientData",
variant = "VariantList",
network,
map
)]
- session_connected_client_data: Vec<ConnectedClient>,
+ pub session_connected_client_data: Vec<ConnectedClient>,
+}
+
+impl Default for CoreData {
+ fn default() -> Self {
+ Self {
+ quassel_version: Default::default(),
+ quassel_build_date: Default::default(),
+ start_time:DateTime::unix_epoch(),
+ session_connected_clients: Default::default(),
+ session_connected_client_data: Default::default(),
+ }
+ }
}
#[derive(Debug, Clone, PartialEq, NetworkMap)]
#[network(repr = "map")]
pub struct ConnectedClient {
#[network(rename = "id")]
- id: i32,
+ pub id: i32,
#[network(rename = "remoteAddress")]
- remote_address: String,
- #[network(rename = "location")]
- location: String,
+ pub remote_address: String,
+ // #[network(rename = "location")]
+ // location: String,
#[network(rename = "clientVersion")]
- client_version: String,
+ pub client_version: String,
#[network(rename = "clientVersionDate")]
- client_version_date: String,
+ pub client_version_date: String,
#[network(rename = "connectedSince")]
- connected_since: DateTime,
+ pub connected_since: DateTime,
#[network(rename = "secure")]
- secure: bool,
+ pub secure: bool,
#[network(rename = "features")]
- features: i32,
+ pub features: u32,
#[network(rename = "featureList")]
- feature_list: StringList,
+ pub feature_list: StringList,
}
diff --git a/src/message/signalproxy/objects/highlightrulemanager.rs b/src/message/signalproxy/objects/highlightrulemanager.rs
index 3bd09ad..dc1fff9 100644
--- a/src/message/signalproxy/objects/highlightrulemanager.rs
+++ b/src/message/signalproxy/objects/highlightrulemanager.rs
@@ -4,6 +4,7 @@ use num_traits::{FromPrimitive, ToPrimitive};
use libquassel_derive::{NetworkList, NetworkMap};
+use crate::message::Class;
use crate::message::signalproxy::translation::{Network, NetworkMap};
#[allow(unused_imports)]
@@ -13,7 +14,7 @@ use crate::message::StatefulSyncableServer;
use crate::message::Syncable;
-#[derive(Debug, Clone, PartialEq, NetworkList, NetworkMap)]
+#[derive(Default, Debug, Clone, PartialEq, NetworkList, NetworkMap)]
pub struct HighlightRuleManager {
#[network(rename = "HighlightRuleList", variant = "VariantMap", network, map)]
highlight_rule_list: Vec<HighlightRule>,
@@ -205,7 +206,7 @@ impl StatefulSyncableServer for HighlightRuleManager {
}
impl Syncable for HighlightRuleManager {
- const CLASS: &'static str = "HighlightRuleManager";
+ const CLASS: Class = Class::HighlightRuleManager;
}
#[derive(Debug, Clone, PartialEq, NetworkMap)]
@@ -214,13 +215,13 @@ pub struct HighlightRule {
id: i32,
#[network(variant = "StringList")]
name: String,
- #[network(rename = "isRegEx")]
+ #[quassel(name = "isRegEx")]
is_regex: bool,
- #[network(rename = "isCaseSensitive")]
+ #[quassel(name = "isCaseSensitive")]
is_case_sensitive: bool,
- #[network(rename = "isEnabled")]
+ #[quassel(name = "isEnabled")]
is_enabled: bool,
- #[network(rename = "isInverse")]
+ #[quassel(name = "isInverse")]
is_inverse: bool,
#[network(variant = "StringList")]
sender: String,
@@ -228,8 +229,9 @@ pub struct HighlightRule {
channel: String,
}
-#[derive(Debug, Clone, PartialEq, FromPrimitive, ToPrimitive)]
+#[derive(Default, Debug, Clone, PartialEq, FromPrimitive, ToPrimitive)]
pub enum HighlightNickType {
+ #[default]
NoNick = 0x00,
CurrentNick = 0x01,
AllNicks = 0x02,
@@ -253,20 +255,20 @@ mod tests {
use crate::message::signalproxy::translation::NetworkList;
use crate::primitive::{Variant, VariantList};
- use pretty_assertions::assert_eq;
+ // use pretty_assertions::assert_eq;
fn get_network() -> VariantList {
vec![
Variant::ByteArray(s!("HighlightRuleList")),
Variant::VariantMap(map! {
- s!("isInverse") => Variant::VariantList(vec![Variant::bool(false)]),
+ s!("id") => Variant::VariantList(vec![Variant::i32(1)]),
+ s!("name") => Variant::StringList(vec![s!("testrule")]),
+ s!("isRegEx") => Variant::VariantList(vec![Variant::bool(false)]),
+ s!("isCaseSensitive") => Variant::VariantList(vec![Variant::bool(false)]),
s!("isEnabled") => Variant::VariantList(vec![Variant::bool(true)]),
- s!("channel") => Variant::StringList(vec![s!("#test")]),
+ s!("isInverse") => Variant::VariantList(vec![Variant::bool(false)]),
s!("sender") => Variant::StringList(vec![s!("testuser")]),
- s!("isCaseSensitive") => Variant::VariantList(vec![Variant::bool(false)]),
- s!("isRegEx") => Variant::VariantList(vec![Variant::bool(false)]),
- s!("name") => Variant::StringList(vec![s!("testrule")]),
- s!("id") => Variant::VariantList(vec![Variant::i32(1)]),
+ s!("channel") => Variant::StringList(vec![s!("#test")]),
}),
Variant::ByteArray(s!("highlightNick")),
Variant::i32(1),
@@ -275,6 +277,39 @@ mod tests {
]
}
+
+
+// [
+// ByteArray("HighlightRuleList"),
+// VariantMap({
+// "isCaseSensitive": VariantList([bool(false)]),
+// "isEnabled": VariantList([bool(true)]),
+// "": StringList(["#test"]),
+// "isRegEx": VariantList([bool(false)]),
+// "isInverse": VariantList([bool(false)])}),
+// ByteArray("highlightNick"),
+// i32(1),
+// ByteArray("nicksCaseSensitive"),
+// bool(false)
+// ]
+
+// [
+// ByteArray("HighlightRuleList"),
+// VariantMap({
+// "name": StringList(["testrule"]),
+// "isEnabled": VariantList([bool(true)]),
+// "sender": StringList(["testuser"]),
+// "isInverse": VariantList([bool(false)]),
+// "isCaseSensitive": VariantList([bool(false)]),
+// "isRegEx": VariantList([bool(false)]),
+// "id": VariantList([i32(1)]),
+// "channel": StringList(["#test"])}),
+// ByteArray("highlightNick"),
+// i32(1),
+// ByteArray("nicksCaseSensitive"),
+// bool(false)
+// ]
+
fn get_runtime() -> HighlightRuleManager {
HighlightRuleManager {
highlight_rule_list: vec![HighlightRule {
diff --git a/src/message/signalproxy/objects/identity.rs b/src/message/signalproxy/objects/identity.rs
index de89105..a61c8d2 100644
--- a/src/message/signalproxy/objects/identity.rs
+++ b/src/message/signalproxy/objects/identity.rs
@@ -2,6 +2,7 @@
use libquassel_derive::sync;
use libquassel_derive::{NetworkList, NetworkMap, Setters};
+use crate::message::Class;
#[allow(unused_imports)]
use crate::message::StatefulSyncableClient;
#[allow(unused_imports)]
@@ -12,7 +13,7 @@ use crate::message::Syncable;
#[allow(unused_imports)]
use crate::message::signalproxy::translation::NetworkMap;
-#[derive(Debug, Clone, PartialEq, NetworkMap, NetworkList, Setters)]
+#[derive(Default, Debug, Clone, PartialEq, NetworkMap, NetworkList, Setters)]
pub struct Identity {
#[quassel(name = "identityId")]
identity_id: i32,
@@ -100,7 +101,7 @@ impl StatefulSyncableClient for Identity {
impl StatefulSyncableServer for Identity {}
impl Syncable for Identity {
- const CLASS: &'static str = "Identity";
+ const CLASS: Class = Class::Identity;
fn send_sync(&self, function: &str, params: crate::primitive::VariantList) {
crate::message::signalproxy::SYNC_PROXY.get().unwrap().sync(
diff --git a/src/message/signalproxy/objects/ignorelistmanager.rs b/src/message/signalproxy/objects/ignorelistmanager.rs
index a58de04..19d07d5 100644
--- a/src/message/signalproxy/objects/ignorelistmanager.rs
+++ b/src/message/signalproxy/objects/ignorelistmanager.rs
@@ -1,11 +1,11 @@
use crate::message::{
signalproxy::translation::{Network, NetworkMap},
- Syncable,
+ Syncable, Class,
};
use libquassel_derive::{sync, NetworkList, NetworkMap};
-#[derive(Debug, Clone, PartialEq, NetworkList, NetworkMap)]
+#[derive(Default, Debug, Clone, PartialEq, NetworkList, NetworkMap)]
pub struct IgnoreListManager {
#[quassel(name = "IgnoreList")]
#[network(variant = "VariantMap", network, map)]
@@ -175,7 +175,7 @@ impl crate::message::StatefulSyncableServer for IgnoreListManager {
}
impl Syncable for IgnoreListManager {
- const CLASS: &'static str = "IgnoreListManager";
+ const CLASS: Class = Class::IgnoreListManager;
}
#[derive(Debug, Clone, PartialEq, NetworkMap)]
diff --git a/src/message/signalproxy/objects/mod.rs b/src/message/signalproxy/objects/mod.rs
index 664d46c..521a591 100644
--- a/src/message/signalproxy/objects/mod.rs
+++ b/src/message/signalproxy/objects/mod.rs
@@ -1,5 +1,6 @@
mod aliasmanager;
mod buffersyncer;
+mod backlogmanager;
mod bufferviewmanager;
mod bufferviewconfig;
mod certmanager;
@@ -14,6 +15,7 @@ mod networkinfo;
pub use aliasmanager::*;
pub use buffersyncer::*;
+pub use backlogmanager::*;
pub use bufferviewmanager::*;
pub use bufferviewconfig::*;
pub use certmanager::*;
diff --git a/src/message/signalproxy/objects/network.rs b/src/message/signalproxy/objects/network.rs
index 4985bd9..266a1be 100644
--- a/src/message/signalproxy/objects/network.rs
+++ b/src/message/signalproxy/objects/network.rs
@@ -29,6 +29,14 @@ pub struct Network {
}
impl Network {
+ pub fn get_channel_mode_type(&self, mode: char) -> ChannelModeType {
+ if let Some((mode_type, _)) = self.channel_modes.iter().find(|(_, v)| v.contains(mode)) {
+ *mode_type
+ } else {
+ ChannelModeType::NotAChanmode
+ }
+ }
+
/// The `channel_modes` field is populated by the ``supports["CHANMODES"]` string,
/// which is represented as the channel mode types a,b,c,d in a comma sepperated string.
fn determine_channel_mode_types(&mut self) {
@@ -383,6 +391,20 @@ mod tests {
}
#[test]
+ fn network_get_channel_mode_type() {
+ let mut network = Network::default();
+
+ network.supports.insert(s!("CHANMODES"), s!("IXZbegw,k,FHJLWdfjlx,ABCDKMNOPQRSTcimnprstuz"));
+ network.determine_channel_mode_types();
+
+ assert_eq!(network.get_channel_mode_type('b'), ChannelModeType::AChanmode);
+ assert_eq!(network.get_channel_mode_type('k'), ChannelModeType::BChanmode);
+ assert_eq!(network.get_channel_mode_type('W'), ChannelModeType::CChanmode);
+ assert_eq!(network.get_channel_mode_type('D'), ChannelModeType::DChanmode);
+ assert_eq!(network.get_channel_mode_type('E'), ChannelModeType::NotAChanmode);
+ }
+
+ #[test]
fn network_determine_prefixes() {
let mut network = Network::default();
network.determine_prefixes();
@@ -418,9 +440,9 @@ impl Default for ConnectionState {
}
#[allow(dead_code)]
-#[derive(Debug, Clone, Eq, Hash, PartialEq, FromPrimitive, ToPrimitive)]
+#[derive(Debug, Copy, Clone, Eq, Hash, PartialEq, FromPrimitive, ToPrimitive)]
#[repr(C)]
-enum ChannelModeType {
+pub enum ChannelModeType {
NotAChanmode = 0x00,
AChanmode = 0x01,
BChanmode = 0x02,