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,21 +221,26 @@ impl App {
// send content to selected peer, or change directories in the file explorer
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)
warn!("entering text is not yet supported");
} else {
let file = self.file_picker.current().path().clone();
if file.is_dir()
&& let Err(e) = self.file_picker.set_cwd(&file)
{
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()
&& let Err(e) = self.service.send_file(peer.to_owned(), file.clone()).await
{
error!("got error sending content: {e:?}");
debug!("sending {file:?}");
if let Err(e) = self.service.send_file(peer.to_owned(), file.clone()).await {
error!("got error sending content: {e:?}");
}
}
}
}

View file

@ -145,9 +145,10 @@ impl Widget for &mut App {
receive_requests(
&rx_reqs,
&mut self.receiving_state,
area.inner(subscreen_margin),
top.inner(subscreen_margin),
buf,
);
logger(bottom.inner(subscreen_margin), buf);
}
CurrentScreen::Sending(s) => {
match s {
@ -164,7 +165,9 @@ impl Widget for &mut App {
self.file_picker
.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);
}
_ => {

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::{
Json,
@ -58,23 +58,23 @@ impl JoecalService {
peer: String,
files: BTreeMap<String, FileMetadata>,
) -> 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);
}
};
let peer = self.peers.lock().await.get(&peer).unwrap().clone();
debug!("sending to peer at {addr:?}");
let response = self
.client
.post(format!(
"{}://{}/api/localsend/v2/prepare-upload",
peer.1.protocol,
peer.0.clone()
device.protocol, addr
))
.json(&PrepareUploadRequest {
info: self.device.clone(),
files: files.clone(),
})
.timeout(Duration::from_secs(30))
.send()
.await?;
@ -86,10 +86,10 @@ impl JoecalService {
session_id: response.session_id.clone(),
files,
file_tokens: response.files.clone(),
receiver: peer.1,
receiver: device,
sender: self.device.clone(),
status: SessionStatus::Active,
addr: peer.0,
addr,
};
self.sessions