add client data cache for ip and username
This commit is contained in:
+25
-8
@@ -6,8 +6,9 @@ use render::Renderer;
|
||||
use winit::{event::WindowEvent, event_loop::ActiveEventLoop};
|
||||
|
||||
use crate::{
|
||||
client::ui::{Submit, main_view, msg_widget},
|
||||
client::ui::{Edited, Submit, main_view, msg_widget},
|
||||
net::{ClientMsg, ServerMsg, client::NetSender},
|
||||
rsc::{CLIENT_DATA, ClientData, DataDir},
|
||||
};
|
||||
|
||||
mod app;
|
||||
@@ -30,23 +31,30 @@ pub struct Client {
|
||||
channel: Option<WidgetId<Span>>,
|
||||
username: String,
|
||||
clipboard: Clipboard,
|
||||
dir: DataDir,
|
||||
data: ClientData,
|
||||
handle: AppHandle,
|
||||
}
|
||||
|
||||
impl Client {
|
||||
pub fn new(handle: AppHandle) -> Self {
|
||||
let renderer = Renderer::new(handle.window.clone());
|
||||
let dir = DataDir::default();
|
||||
|
||||
let ui = ui::ui(handle);
|
||||
|
||||
Self {
|
||||
let mut s = Self {
|
||||
handle,
|
||||
renderer,
|
||||
input: Input::default(),
|
||||
ui,
|
||||
ui: Ui::new(),
|
||||
data: dir.load(CLIENT_DATA),
|
||||
dir,
|
||||
channel: None,
|
||||
focus: None,
|
||||
username: "<unknown>".to_string(),
|
||||
clipboard: Clipboard::new().unwrap(),
|
||||
}
|
||||
};
|
||||
ui::init(&mut s);
|
||||
s
|
||||
}
|
||||
|
||||
pub fn event(&mut self, event: ClientEvent, _: &ActiveEventLoop) {
|
||||
@@ -104,20 +112,25 @@ impl Client {
|
||||
if let Some(sel) = &self.focus
|
||||
&& event.state.is_pressed()
|
||||
{
|
||||
let sel = &sel.clone();
|
||||
let mut text = self.ui.text(sel);
|
||||
match text.apply_event(&event, &self.input.modifiers) {
|
||||
TextInputResult::Unfocus => {
|
||||
self.focus = None;
|
||||
}
|
||||
TextInputResult::Submit => {
|
||||
self.run_event(&sel.clone(), Submit, ());
|
||||
self.run_event(sel, Submit, ());
|
||||
}
|
||||
TextInputResult::Paste => {
|
||||
if let Ok(t) = self.clipboard.get_text() {
|
||||
text.insert(&t);
|
||||
}
|
||||
self.run_event(sel, Edited, ());
|
||||
}
|
||||
TextInputResult::Unused | TextInputResult::Used => (),
|
||||
TextInputResult::Used => {
|
||||
self.run_event(sel, Edited, ());
|
||||
}
|
||||
TextInputResult::Unused => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -128,6 +141,10 @@ impl Client {
|
||||
}
|
||||
self.input.end_frame();
|
||||
}
|
||||
|
||||
pub fn exit(&mut self) {
|
||||
self.dir.save(CLIENT_DATA, &self.data);
|
||||
}
|
||||
}
|
||||
|
||||
impl UiCtx for Client {
|
||||
|
||||
Reference in New Issue
Block a user