From e2398abcfa6d368389456b79723d87842ee5e33f Mon Sep 17 00:00:00 2001 From: Alex Pasmantier <47638216+alexpasmantier@users.noreply.github.com> Date: Tue, 7 Jan 2025 00:35:14 +0100 Subject: [PATCH] feat(channels): allow sending currently selected entries to other channels (#235) Related to #229 --- .../television-channels/src/channels/dirs.rs | 12 +++++-- .../television-channels/src/channels/files.rs | 18 ++++++++-- .../television-channels/src/channels/text.rs | 34 ++++++++++++++----- 3 files changed, 50 insertions(+), 14 deletions(-) diff --git a/crates/television-channels/src/channels/dirs.rs b/crates/television-channels/src/channels/dirs.rs index b5df262..d01e47a 100644 --- a/crates/television-channels/src/channels/dirs.rs +++ b/crates/television-channels/src/channels/dirs.rs @@ -37,7 +37,11 @@ impl From<&mut TelevisionChannel> for Channel { fn from(value: &mut TelevisionChannel) -> Self { match value { c @ TelevisionChannel::GitRepos(_) => { - let entries = c.results(c.result_count(), 0); + let entries = if c.selected_entries().is_empty() { + c.results(c.result_count(), 0) + } else { + c.selected_entries().iter().cloned().collect() + }; Self::new( entries .iter() @@ -46,7 +50,11 @@ impl From<&mut TelevisionChannel> for Channel { ) } c @ TelevisionChannel::Dirs(_) => { - let entries = c.results(c.result_count(), 0); + let entries = if c.selected_entries().is_empty() { + c.results(c.result_count(), 0) + } else { + c.selected_entries().iter().cloned().collect() + }; Self::new( entries .iter() diff --git a/crates/television-channels/src/channels/files.rs b/crates/television-channels/src/channels/files.rs index e1b200b..5d866f1 100644 --- a/crates/television-channels/src/channels/files.rs +++ b/crates/television-channels/src/channels/files.rs @@ -37,7 +37,11 @@ impl From<&mut TelevisionChannel> for Channel { fn from(value: &mut TelevisionChannel) -> Self { match value { c @ TelevisionChannel::GitRepos(_) => { - let entries = c.results(c.result_count(), 0); + let entries = if c.selected_entries().is_empty() { + c.results(c.result_count(), 0) + } else { + c.selected_entries().iter().cloned().collect() + }; Self::new( entries .iter() @@ -46,7 +50,11 @@ impl From<&mut TelevisionChannel> for Channel { ) } c @ TelevisionChannel::Files(_) => { - let entries = c.results(c.result_count(), 0); + let entries = if c.selected_entries().is_empty() { + c.results(c.result_count(), 0) + } else { + c.selected_entries().iter().cloned().collect() + }; Self::new( entries .iter() @@ -55,7 +63,11 @@ impl From<&mut TelevisionChannel> for Channel { ) } c @ TelevisionChannel::Text(_) => { - let entries = c.results(c.result_count(), 0); + let entries = if c.selected_entries().is_empty() { + c.results(c.result_count(), 0) + } else { + c.selected_entries().iter().cloned().collect() + }; Self::new( entries .iter() diff --git a/crates/television-channels/src/channels/text.rs b/crates/television-channels/src/channels/text.rs index 0d034a6..84f7879 100644 --- a/crates/television-channels/src/channels/text.rs +++ b/crates/television-channels/src/channels/text.rs @@ -124,12 +124,16 @@ impl From<&mut TelevisionChannel> for Channel { fn from(value: &mut TelevisionChannel) -> Self { match value { c @ TelevisionChannel::Files(_) => { - let entries = c.results( - c.result_count().min( - u32::try_from(MAX_PIPED_FILES).unwrap_or(u32::MAX), - ), - 0, - ); + let entries = if c.selected_entries().is_empty() { + c.results( + c.result_count().min( + u32::try_from(MAX_PIPED_FILES).unwrap_or(u32::MAX), + ), + 0, + ) + } else { + c.selected_entries().iter().cloned().collect() + }; Self::from_file_paths( entries .iter() @@ -140,7 +144,11 @@ impl From<&mut TelevisionChannel> for Channel { ) } c @ TelevisionChannel::GitRepos(_) => { - let entries = c.results(c.result_count(), 0); + let entries = if c.selected_entries().is_empty() { + c.results(c.result_count(), 0) + } else { + c.selected_entries().iter().cloned().collect() + }; Self::new( entries .iter() @@ -151,11 +159,19 @@ impl From<&mut TelevisionChannel> for Channel { ) } c @ TelevisionChannel::Text(_) => { - let entries = c.results(c.result_count(), 0); + let entries = if c.selected_entries().is_empty() { + c.results(c.result_count(), 0) + } else { + c.selected_entries().iter().cloned().collect() + }; Self::from_text_entries(entries) } c @ TelevisionChannel::Dirs(_) => { - let entries = c.results(c.result_count(), 0); + let entries = if c.selected_entries().is_empty() { + c.results(c.result_count(), 0) + } else { + c.selected_entries().iter().cloned().collect() + }; Self::new( entries .iter()