add client data cache for ip and username

This commit is contained in:
2025-11-17 17:57:41 -05:00
parent 510fafac9f
commit b3c833c667
8 changed files with 153 additions and 24 deletions
+25 -8
View File
@@ -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 {