fixed deadlock, needs https
This commit is contained in:
parent
58fca36bd8
commit
9ea3a3a1d6
3 changed files with 23 additions and 15 deletions
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue