fix: highly improved GUI performance

This commit is contained in:
2026-01-02 03:59:05 +03:00
parent c5086189d6
commit a7af1caace
3 changed files with 39 additions and 13 deletions
+3 -1
View File
@@ -115,7 +115,9 @@ async fn main() -> Result<(), Box<dyn Error>> {
}, },
}; };
let response = make_request(request).await?; let response = make_request(request)
.await
.map_err(|e| e as Box<dyn Error>)?;
println!("{} : {}", response.status, response.message); println!("{} : {}", response.status, response.message);
Ok(()) Ok(())
+1 -1
View File
@@ -124,7 +124,7 @@ pub async fn wait_for_daemon() -> Result<(), Box<dyn Error>> {
Ok(()) Ok(())
} }
pub async fn make_request(request: Request) -> Result<Response, Box<dyn Error>> { pub async fn make_request(request: Request) -> Result<Response, Box<dyn Error + Send + Sync>> {
let socket_path = get_runtime_dir().join("daemon.sock"); let socket_path = get_runtime_dir().join("daemon.sock");
let mut stream = UnixStream::connect(socket_path).await?; let mut stream = UnixStream::connect(socket_path).await?;
+35 -11
View File
@@ -25,7 +25,9 @@ pub fn get_gui_config() -> GuiConfig {
pub fn make_request_sync(request: Request) -> Result<Response, Box<dyn Error>> { pub fn make_request_sync(request: Request) -> Result<Response, Box<dyn Error>> {
tokio::task::block_in_place(|| { tokio::task::block_in_place(|| {
tokio::runtime::Handle::current().block_on(make_request(request)) tokio::runtime::Handle::current()
.block_on(make_request(request))
.map_err(|e| e as Box<dyn Error>)
}) })
} }
@@ -42,7 +44,7 @@ pub fn format_time_pair(position: f32, duration: f32) -> String {
pub fn start_app_state_thread(audio_player_state_shared: Arc<Mutex<AudioPlayerState>>) { pub fn start_app_state_thread(audio_player_state_shared: Arc<Mutex<AudioPlayerState>>) {
tokio::spawn(async move { tokio::spawn(async move {
let sleep_duration = Duration::from_millis(100); let sleep_duration = Duration::from_secs_f32(1.0 / 60.0);
loop { loop {
wait_for_daemon().await.ok(); wait_for_daemon().await.ok();
@@ -57,15 +59,37 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc<Mutex<AudioPlayerSt
let all_inputs_req = Request::get_inputs(); let all_inputs_req = Request::get_inputs();
let looped_req = Request::get_loop(); let looped_req = Request::get_loop();
let state_res = make_request(state_req).await.unwrap_or_default(); let (
let file_path_res = make_request(file_path_req).await.unwrap_or_default(); state_res,
let is_paused_res = make_request(is_paused_req).await.unwrap_or_default(); file_path_res,
let volume_res = make_request(volume_req).await.unwrap_or_default(); is_paused_res,
let position_res = make_request(position_req).await.unwrap_or_default(); volume_res,
let duration_res = make_request(duration_req).await.unwrap_or_default(); position_res,
let current_input_res = make_request(current_input_req).await.unwrap_or_default(); duration_res,
let all_inputs_res = make_request(all_inputs_req).await.unwrap_or_default(); current_input_res,
let looped_res = make_request(looped_req).await.unwrap_or_default(); all_inputs_res,
looped_res,
) = tokio::join!(
make_request(state_req),
make_request(file_path_req),
make_request(is_paused_req),
make_request(volume_req),
make_request(position_req),
make_request(duration_req),
make_request(current_input_req),
make_request(all_inputs_req),
make_request(looped_req),
);
let state_res = state_res.unwrap_or_default();
let file_path_res = file_path_res.unwrap_or_default();
let is_paused_res = is_paused_res.unwrap_or_default();
let volume_res = volume_res.unwrap_or_default();
let position_res = position_res.unwrap_or_default();
let duration_res = duration_res.unwrap_or_default();
let current_input_res = current_input_res.unwrap_or_default();
let all_inputs_res = all_inputs_res.unwrap_or_default();
let looped_res = looped_res.unwrap_or_default();
let state = match state_res.status { let state = match state_res.status {
true => serde_json::from_str::<PlayerState>(&state_res.message).unwrap(), true => serde_json::from_str::<PlayerState>(&state_res.message).unwrap(),