Make Command implementations platform-specific

This allows us to introduce a platform-specific `Action` to both `iced_native`
and `iced_web` and remove the `Clipboard` from `Application::update` to maintain
purity.

Additionally, this should let us implement further actions to let users query
and modify the shell environment (e.g. window, clipboard, and more!)
This commit is contained in:
Héctor Ramón Jiménez 2021-09-01 19:21:49 +07:00
parent b7b7741578
commit 76698ff2b5
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
34 changed files with 363 additions and 342 deletions

View file

@ -1,5 +1,6 @@
//! Run commands and keep track of subscriptions.
use crate::{subscription, Command, Executor, Subscription};
use crate::BoxFuture;
use crate::{subscription, Executor, Subscription};
use futures::{channel::mpsc, Sink};
use std::marker::PhantomData;
@ -51,22 +52,18 @@ where
///
/// The resulting `Message` will be forwarded to the `Sender` of the
/// [`Runtime`].
pub fn spawn(&mut self, command: Command<Message>) {
pub fn spawn(&mut self, future: BoxFuture<Message>) {
use futures::{FutureExt, SinkExt};
let futures = command.futures();
let mut sender = self.sender.clone();
for future in futures {
let mut sender = self.sender.clone();
let future = future.then(|message| async move {
let _ = sender.send(message).await;
let future = future.then(|message| async move {
let _ = sender.send(message).await;
()
});
()
});
self.executor.spawn(future);
}
self.executor.spawn(future);
}
/// Tracks a [`Subscription`] in the [`Runtime`].