summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-03-01 19:09:58 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-03-01 20:35:21 +0100
commitad7d8bf63c49905a341039eac6c96d4f7fa33f29 (patch)
tree5d71065d6985c5491b961822be5dc7fe1a352e4c
parent91901fac9659694d6074ef3a3e2613d60c27088d (diff)
Optimize: Stop iteration for viewing on broken pipe error
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--lib/entry/libimagentryview/src/lib.rs1
-rw-r--r--lib/entry/libimagentryview/src/viewer.rs11
2 files changed, 10 insertions, 2 deletions
diff --git a/lib/entry/libimagentryview/src/lib.rs b/lib/entry/libimagentryview/src/lib.rs
index 328e5113..485aaec8 100644
--- a/lib/entry/libimagentryview/src/lib.rs
+++ b/lib/entry/libimagentryview/src/lib.rs
@@ -37,6 +37,7 @@
while_true,
)]
+#[macro_use] extern crate log;
extern crate toml;
extern crate textwrap;
extern crate failure;
diff --git a/lib/entry/libimagentryview/src/viewer.rs b/lib/entry/libimagentryview/src/viewer.rs
index ca599e15..1fa2271c 100644
--- a/lib/entry/libimagentryview/src/viewer.rs
+++ b/lib/entry/libimagentryview/src/viewer.rs
@@ -130,8 +130,15 @@ impl<'a, I, V, W, F, T> Iterator for ViewIter<'a, I, V, W, F, T>
fn next(&mut self) -> Option<Self::Item> {
if let Some(next) = self.inner.next() {
if let Some(entry) = (self.func)(&next) {
- if let Err(e) = self.viewer.view_entry(&entry, self.sink) {
- return Some(Err(e).map_err(failure::Error::from))
+ let r = self.viewer.view_entry(&entry, self.sink);
+ trace!("Viewing resulted in {:?}", r);
+ match r {
+ Ok(_) => { /* nothing */ },
+ Err(crate::error::Error::Io(ref e)) if e.kind() == std::io::ErrorKind::BrokenPipe => {
+ trace!("Stopping iteration, because of broken pipe error!");
+ return None
+ },
+ Err(e) => return Some(Err(failure::Error::from(e)))
}
}