fixed deadlock, needs https

This commit is contained in:
Joe Ardent 2025-08-03 15:45:38 -07:00
parent 58fca36bd8
commit 9ea3a3a1d6
3 changed files with 23 additions and 15 deletions

View file

@ -221,25 +221,30 @@ impl App {
// send content to selected peer, or change directories in the file explorer // send content to selected peer, or change directories in the file explorer
async fn send_content(&mut self) { async fn send_content(&mut self) {
if let Some(_bytes) = self.content.iter().next().cloned() { debug!("sending content");
if let Some(_bytes) = self.content.to_owned() {
// self.service.send_bytes(session_id, content_id, token, body) // self.service.send_bytes(session_id, content_id, token, body)
warn!("entering text is not yet supported"); warn!("entering text is not yet supported");
} else { } else {
let file = self.file_picker.current().path().clone(); let file = self.file_picker.current().path().clone();
if file.is_dir() if file.is_dir()
&& let Err(e) = self.file_picker.set_cwd(&file) && let Err(e) = self.file_picker.set_cwd(&file)
{ {
error!("could not list directory {file:?}: {e}"); error!("could not list directory {file:?}: {e}");
} else if let Some((peer, _)) = self.service.peers.lock().await.first_key_value() }
if let Some((_, (_, peer))) = self.peers.first_key_value()
&& file.is_file() && file.is_file()
&& let Err(e) = self.service.send_file(peer.to_owned(), file.clone()).await
{ {
debug!("sending {file:?}");
if let Err(e) = self.service.send_file(peer.to_owned(), file.clone()).await {
error!("got error sending content: {e:?}"); error!("got error sending content: {e:?}");
} }
} }
} }
} }
}
fn change_log_level(delta: isize) { fn change_log_level(delta: isize) {
let level = log::max_level() as isize; let level = log::max_level() as isize;

View file

@ -145,9 +145,10 @@ impl Widget for &mut App {
receive_requests( receive_requests(
&rx_reqs, &rx_reqs,
&mut self.receiving_state, &mut self.receiving_state,
area.inner(subscreen_margin), top.inner(subscreen_margin),
buf, buf,
); );
logger(bottom.inner(subscreen_margin), buf);
} }
CurrentScreen::Sending(s) => { CurrentScreen::Sending(s) => {
match s { match s {
@ -164,7 +165,9 @@ impl Widget for &mut App {
self.file_picker self.file_picker
.widget() .widget()
.render(top.inner(subscreen_margin), buf); .render(header_left.inner(header_margin), buf);
logger(header_right.inner(header_margin), buf);
peers.render(bottom.inner(subscreen_margin), buf); peers.render(bottom.inner(subscreen_margin), buf);
} }
_ => { _ => {

View file

@ -1,4 +1,4 @@
use std::{collections::BTreeMap, net::SocketAddr, path::PathBuf}; use std::{collections::BTreeMap, net::SocketAddr, path::PathBuf, time::Duration};
use axum::{ use axum::{
Json, Json,
@ -58,23 +58,23 @@ impl JoecalService {
peer: String, peer: String,
files: BTreeMap<String, FileMetadata>, files: BTreeMap<String, FileMetadata>,
) -> Result<PrepareUploadResponse> { ) -> Result<PrepareUploadResponse> {
if !self.peers.lock().await.contains_key(&peer) { let Some((addr, device)) = self.peers.lock().await.get(&peer).cloned() else {
return Err(LocalSendError::PeerNotFound); return Err(LocalSendError::PeerNotFound);
} };
let peer = self.peers.lock().await.get(&peer).unwrap().clone(); debug!("sending to peer at {addr:?}");
let response = self let response = self
.client .client
.post(format!( .post(format!(
"{}://{}/api/localsend/v2/prepare-upload", "{}://{}/api/localsend/v2/prepare-upload",
peer.1.protocol, device.protocol, addr
peer.0.clone()
)) ))
.json(&PrepareUploadRequest { .json(&PrepareUploadRequest {
info: self.device.clone(), info: self.device.clone(),
files: files.clone(), files: files.clone(),
}) })
.timeout(Duration::from_secs(30))
.send() .send()
.await?; .await?;
@ -86,10 +86,10 @@ impl JoecalService {
session_id: response.session_id.clone(), session_id: response.session_id.clone(),
files, files,
file_tokens: response.files.clone(), file_tokens: response.files.clone(),
receiver: peer.1, receiver: device,
sender: self.device.clone(), sender: self.device.clone(),
status: SessionStatus::Active, status: SessionStatus::Active,
addr: peer.0, addr,
}; };
self.sessions self.sessions