use tokio oneshot channel

This commit is contained in:
Erica Z 2024-11-23 13:49:23 +01:00
parent cd3cb3aeb8
commit 215dc4cd13

View file

@ -153,8 +153,7 @@ impl Client {
&self,
request: reqwest_middleware::RequestBuilder,
) -> Result<ByteResponse, Error> {
// FIXME: is an entire channel per request overkill? maybe pool them?
let (sender, receiver) = async_channel::bounded(1);
let (sender, receiver) = tokio::sync::oneshot::channel();
// let tokio take care of the request + further json parsing
// this is because reqwest doesn't like the glib main loop
@ -198,11 +197,10 @@ impl Client {
// note that in general its fine not to cancel the tokio task when its corresponding
// mainloop task is dropped, since eg for song thumbnails there's already a semaphore
// limiting concurrent requests
let _ = sender.send(perform(future.await).await).await;
let _ = sender.send(perform(future.await).await);
});
receiver
.recv()
.await
.map_err(|_| Error::OtherError("failed to receive response from tokio loop"))?
}