Phase 2: E2EE for DM + Slint migration + dead code cleanup

- E2EE crypto (src/e2ee.rs) with X25519 key derivation from Ed25519,
  HKDF shared secret, ChaCha20-Poly1305 encrypt/decrypt
- E2EE net layer: PID 0x0071-0x0074, JSON payloads, dispatch, session handlers
- E2EE UI: lock icons in DM header and sidebar
- Slint migration: all .slint files, bridge.rs, update.rs, main.rs
- Removed egui UI (~50 files), cleaned all dead code
- Clean cargo clippy -- -D warnings
This commit is contained in:
loki5512344 2026-07-14 13:25:15 +02:00
parent f361b037cb
commit 03d94e0465
Signed by: boba
GPG key ID: 253067914055423B
83 changed files with 5055 additions and 9202 deletions

View file

@ -1,7 +1,6 @@
use std::collections::{HashMap, HashSet};
use std::time::Instant;
use std::collections::HashMap;
use super::models::{default_bookmarks, now_utc_hms};
use super::models::default_bookmarks;
use super::types::{ConnState, UiState, VoiceUiState};
impl Default for UiState {
@ -16,131 +15,42 @@ impl Default for UiState {
active_channel: None,
messages: Default::default(),
chat_input: String::new(),
editing_message_id: None,
replying_to: None,
context_menu_message_id: None,
scroll_bottom: false,
voice: VoiceUiState::Off,
voice_joined_at: None,
user_names: Default::default(),
server_channel: None,
rtt_ms: None,
settings_open: false,
settings_page: Default::default(),
mic_enabled: true,
deafen: false,
noise_suppress: true,
echo_cancel: true,
vad_mode: 0,
vad_threshold: 40.0,
voice_bitrate: 64.0,
packet_interval: 1,
mic_device: 0,
input_volume: 80.0,
input_device_labels: vec!["Default".into()],
input_device_metas: Vec::new(),
output_device_labels: vec!["Default".into()],
output_device_metas: Vec::new(),
last_device_scan: None,
output_device: 0,
output_volume: 90.0,
jitter_size: 1,
adaptive_buffer: true,
overlay_enabled: false,
overlay_speakers: true,
overlay_latency: true,
relay_enabled: true,
relay_address: "relay.nightcore.lnex".into(),
auto_relay: true,
force_relay: false,
udp_port: "7700".into(),
auto_reconnect: true,
ui_scale: 100.0,
kb_ptt: "mouse4".into(),
kb_mute: "ctrl+m".into(),
kb_deafen: "ctrl+d".into(),
kb_overlay: "ctrl+shift+o".into(),
log_level: 0,
log_voice_packets: false,
show_packet_stats: false,
disable_encryption: false,
guilds: Vec::new(),
active_guild_id: None,
presences: Default::default(),
presence_status: Some("online".into()),
custom_status: None,
activity_type: None,
activity_text: None,
friends: Vec::new(),
pending_friend_requests: Vec::new(),
blocked_users: Vec::new(),
block_input: None,
block_list_fetched_at: None,
dm_conversations: Vec::new(),
dm_messages: Default::default(),
active_dm_id: None,
new_dm_input: None,
add_server_open: false,
add_server_input: String::new(),
invite_accept_open: false,
invite_accept_code: String::new(),
create_guild_open: false,
create_guild_input: String::new(),
create_channel_open: false,
create_channel_input: String::new(),
create_channel_kind: "text".into(),
vault_set_open: false,
vault_remove_open: false,
vault_passphrase_input: String::new(),
vault_passphrase_confirm: String::new(),
vault_error: None,
export_keyfile_open: false,
export_keyfile_pass: String::new(),
export_keyfile_confirm: String::new(),
export_keyfile_output: String::new(),
export_keyfile_error: None,
import_keyfile_open: false,
import_keyfile_input: String::new(),
import_keyfile_pass: String::new(),
import_keyfile_error: None,
audit_log_open: false,
audit_log_guild_id: None,
audit_log_entries: Vec::new(),
guild_members_open: false,
guild_member_list_guild_id: None,
guild_member_list: Vec::new(),
guild_role_list_guild_id: None,
guild_role_list: Vec::new(),
add_friend_open: false,
add_friend_input: String::new(),
dm_search_query: String::new(),
user_colors: HashMap::new(),
per_user_volumes: Default::default(),
kb_listening: None,
private_mode: false,
collapsed_categories: HashSet::new(),
startup_time_str: now_utc_hms(),
typing_users: HashMap::new(),
last_typing_send: Instant::now(),
read_receipts: HashMap::new(),
friends_tab: "all".into(),
local_speaking: false,