Radish alpha
r
Radicle terminal user interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
Introduce batched message updates
Erik Kundt committed 2 years ago
commit 5ad3593cba0840732d1c0c26c62d1013c35734b2
parent 930f27792a4379a889baa55943c741d96d436e4d
1 file changed +18 -4
modified src/app.rs
@@ -54,10 +54,10 @@ pub enum Cid {
}

/// Messages handled by this application.
-
#[derive(Debug, Eq, PartialEq)]
+
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum HomeMessage {}

-
#[derive(Debug, Eq, PartialEq)]
+
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum IssueMessage {
    Show(IssueId),
    Changed(IssueId),
@@ -65,13 +65,13 @@ pub enum IssueMessage {
    Leave,
}

-
#[derive(Debug, Eq, PartialEq)]
+
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum PatchMessage {
    Show(PatchId),
    Leave,
}

-
#[derive(Debug, Eq, PartialEq)]
+
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum Message {
    Home(HomeMessage),
    Issue(IssueMessage),
@@ -79,6 +79,7 @@ pub enum Message {
    NavigationChanged(u16),
    Tick,
    Quit,
+
    Batch(Vec<Message>),
}

#[allow(dead_code)]
@@ -159,6 +160,19 @@ impl App {
    ) -> Result<Option<Message>> {
        let theme = theme::default_dark();
        match message {
+
            Message::Batch(messages) => {
+
                let mut results = vec![];
+
                for message in messages {
+
                    if let Some(result) = self.process(app, message)? {
+
                        results.push(result);
+
                    }
+
                }
+
                match results.len() {
+
                    0 => Ok(None),
+
                    1 => Ok(Some(results[0].to_owned())),
+
                    _ => Ok(Some(Message::Batch(results))),
+
                }
+
            }
            Message::Issue(IssueMessage::Show(id)) => {
                self.view_issue(app, id, &theme)?;
                Ok(None)