From 7212bbcf61e097b35a7ab341e19e9daefd2edf95 Mon Sep 17 00:00:00 2001 From: Jake Stanger Date: Wed, 1 Mar 2023 23:09:01 +0000 Subject: [PATCH 1/2] refactor(dynamic string): use vec instead of indexmap --- src/dynamic_string.rs | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/dynamic_string.rs b/src/dynamic_string.rs index e767af4..43cb20e 100644 --- a/src/dynamic_string.rs +++ b/src/dynamic_string.rs @@ -1,7 +1,6 @@ use crate::script::{OutputStream, Script}; use crate::{lock, send}; use gtk::prelude::*; -use indexmap::IndexMap; use std::sync::{Arc, Mutex}; use tokio::spawn; @@ -60,13 +59,13 @@ impl DynamicString { chars.drain(..skip); } - let label_parts = Arc::new(Mutex::new(IndexMap::new())); + let label_parts = Arc::new(Mutex::new(Vec::new())); let (tx, rx) = glib::MainContext::channel(glib::PRIORITY_DEFAULT); for (i, segment) in segments.into_iter().enumerate() { match segment { DynamicStringSegment::Static(str) => { - lock!(label_parts).insert(i, str); + lock!(label_parts).push(str); } DynamicStringSegment::Dynamic(script) => { let tx = tx.clone(); @@ -78,13 +77,9 @@ impl DynamicString { if let OutputStream::Stdout(out) = out { let mut label_parts = lock!(label_parts); - label_parts.insert(i, out); - - let string = label_parts - .iter() - .map(|(_, part)| part.as_str()) - .collect::(); + let _ = std::mem::replace(&mut label_parts[i], out); + let string = label_parts.join(""); send!(tx, string); } }) @@ -96,11 +91,7 @@ impl DynamicString { // initialize { - let label_parts = lock!(label_parts) - .iter() - .map(|(_, part)| part.as_str()) - .collect::(); - + let label_parts = lock!(label_parts).join(""); send!(tx, label_parts); } From 8cbb73b75e7aca1aa163406f4583273e6ff4bac2 Mon Sep 17 00:00:00 2001 From: Jake Stanger Date: Wed, 1 Mar 2023 23:09:34 +0000 Subject: [PATCH 2/2] fix(dynamic string): dynamic sections not respecting ordering Fixes #69. --- src/dynamic_string.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/dynamic_string.rs b/src/dynamic_string.rs index 43cb20e..f3aa8ed 100644 --- a/src/dynamic_string.rs +++ b/src/dynamic_string.rs @@ -71,6 +71,9 @@ impl DynamicString { let tx = tx.clone(); let label_parts = label_parts.clone(); + // insert blank value to preserve segment order + lock!(label_parts).push(String::new()); + spawn(async move { script .run(|(out, _)| {