aboutsummaryrefslogtreecommitdiff
path: root/examples/statetracker/src/main.rs
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2021-09-28 17:57:08 +0200
committerMax Audron <audron@cocaine.farm>2021-09-28 18:15:50 +0200
commite72c83710442ec57410c4a523e003fdd37d3ffd8 (patch)
tree5760714679d446c60d326564aa6df5566fb1fdf6 /examples/statetracker/src/main.rs
parentstatetracker: first iteration of working rpc object (diff)
statetracker: cleanup code
Diffstat (limited to '')
-rw-r--r--examples/statetracker/src/main.rs43
1 files changed, 35 insertions, 8 deletions
diff --git a/examples/statetracker/src/main.rs b/examples/statetracker/src/main.rs
index 7213000..3177b39 100644
--- a/examples/statetracker/src/main.rs
+++ b/examples/statetracker/src/main.rs
@@ -1,14 +1,18 @@
#![feature(type_name_of_val)]
-use std::sync::Arc;
+use std::{ops::Deref, sync::Arc};
use aliasmanager::AliasManagerWidget;
use druid::{
+ lens,
widget::{Align, Either, Flex, Label, List, Split},
AppDelegate, Command,
};
use druid::{AppLauncher, Data, Env, Lens, LocalizedString, Widget, WidgetExt, WindowDesc};
+
use libquassel::message::objects::AliasManager;
+use libquassel::message::NetworkMap;
+
use tracing::debug;
use crate::server::{Message, ServerWidget};
@@ -31,7 +35,8 @@ struct StateTracker {
messages: Arc<Vec<server::Message>>,
alias_manager: Arc<AliasManager>,
connected: bool,
- test: i32,
+ #[data(ignore)]
+ syncer: Syncer,
}
impl StateTracker {
@@ -43,7 +48,7 @@ impl StateTracker {
aliases: Vec::new(),
}),
connected: false,
- test: 0,
+ syncer: Syncer {},
}
}
@@ -96,19 +101,43 @@ impl AppDelegate<StateTracker> for StateTrackerDelegate {
debug!("got ADD_MESSAGE command");
let list = Arc::make_mut(&mut data.messages);
- list.push(msg.clone());
+ list.push(msg.take().unwrap());
} else if let Some(alias) = cmd.get(command::ALIASMANAGER_ADD_ALIAS) {
let mut alias_manager = Arc::make_mut(&mut data.alias_manager).clone();
- alias_manager.add_alias(alias.to_owned());
+ alias_manager.add_alias(alias.take().unwrap());
data.alias_manager = Arc::new(alias_manager);
} else if let Some(alias_manager) = cmd.get(command::ALIASMANAGER_INIT) {
- data.alias_manager = Arc::new(alias_manager.to_owned());
+ data.alias_manager = Arc::new(alias_manager.take().unwrap());
+ } else if let Some(msg) = cmd.get(command::ALIASMANAGER_UPDATE) {
+ let syncer = data.syncer.clone();
+ let mut alias_manager = Arc::make_mut(&mut data.alias_manager).clone();
+ alias_manager.handle_syncmessage(syncer, msg.take().unwrap());
+ data.alias_manager = Arc::new(alias_manager);
}
druid::Handled::No
}
}
+// TODO make this somehow deref or smth
+#[derive(Clone)]
+pub struct Syncer;
+impl libquassel::message::SyncProxy for Syncer {
+ fn sync(
+ &self,
+ class_name: &str,
+ object_name: Option<&str>,
+ function: &str,
+ params: libquassel::primitive::VariantList,
+ ) {
+ todo!()
+ }
+
+ fn rpc(&self, function: &str, params: libquassel::primitive::VariantList) {
+ todo!()
+ }
+}
+
fn main() {
// pretty_env_logger::init();
@@ -120,8 +149,6 @@ fn main() {
// create the initial app state
let initial_state = StateTracker::new();
- // let state = Arc::new(RwLock::new(initial_state));
-
// start the application
AppLauncher::with_window(main_window)
.log_to_console()