diff --git a/Cargo.toml b/Cargo.toml index a28bf2a3..b28eb781 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,7 +42,6 @@ members = [ "lib/entry/libimagentryfilter", "lib/entry/libimagentrygps", "lib/entry/libimagentrylink", - "lib/entry/libimagentrylist", "lib/entry/libimagentrymarkdown", "lib/entry/libimagentryref", "lib/entry/libimagentrytag", diff --git a/bin/core/imag-ref/Cargo.toml b/bin/core/imag-ref/Cargo.toml index 9a0b2dae..d42ffaaa 100644 --- a/bin/core/imag-ref/Cargo.toml +++ b/bin/core/imag-ref/Cargo.toml @@ -28,7 +28,6 @@ libimagstore = { version = "0.7.0", path = "../../../lib/core/libimagstore libimagrt = { version = "0.7.0", path = "../../../lib/core/libimagrt" } libimagerror = { version = "0.7.0", path = "../../../lib/core/libimagerror" } libimagentryref = { version = "0.7.0", path = "../../../lib/entry/libimagentryref" } -libimagentrylist = { version = "0.7.0", path = "../../../lib/entry/libimagentrylist" } libimaginteraction = { version = "0.7.0", path = "../../../lib/etc/libimaginteraction" } libimagutil = { version = "0.7.0", path = "../../../lib/etc/libimagutil" } diff --git a/bin/core/imag-ref/src/main.rs b/bin/core/imag-ref/src/main.rs index ce24b2f3..d806ff95 100644 --- a/bin/core/imag-ref/src/main.rs +++ b/bin/core/imag-ref/src/main.rs @@ -39,7 +39,6 @@ extern crate libimagstore; #[macro_use] extern crate libimagrt; extern crate libimagentryref; extern crate libimagerror; -extern crate libimagentrylist; extern crate libimaginteraction; extern crate libimagutil; diff --git a/bin/domain/imag-diary/Cargo.toml b/bin/domain/imag-diary/Cargo.toml index 35f81803..9ebfb820 100644 --- a/bin/domain/imag-diary/Cargo.toml +++ b/bin/domain/imag-diary/Cargo.toml @@ -32,7 +32,6 @@ libimagstore = { version = "0.7.0", path = "../../../lib/core/libimagstore libimagrt = { version = "0.7.0", path = "../../../lib/core/libimagrt" } libimagdiary = { version = "0.7.0", path = "../../../lib/domain/libimagdiary" } libimagentryedit = { version = "0.7.0", path = "../../../lib/entry/libimagentryedit" } -libimagentrylist = { version = "0.7.0", path = "../../../lib/entry/libimagentrylist" } libimaginteraction = { version = "0.7.0", path = "../../../lib/etc/libimaginteraction" } libimagutil = { version = "0.7.0", path = "../../../lib/etc/libimagutil" } libimagtimeui = { version = "0.7.0", path = "../../../lib/etc/libimagtimeui" } diff --git a/bin/domain/imag-diary/src/list.rs b/bin/domain/imag-diary/src/list.rs index cb81ed20..99409d3c 100644 --- a/bin/domain/imag-diary/src/list.rs +++ b/bin/domain/imag-diary/src/list.rs @@ -17,15 +17,14 @@ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // +use std::io::Write; + use libimagdiary::diary::Diary; -use libimagdiary::error::DiaryErrorKind as DEK; -use libimagdiary::error::ResultExt; -use libimagentrylist::listers::core::CoreLister; -use libimagentrylist::lister::Lister; use libimagrt::runtime::Runtime; -use libimagstore::store::Entry; use libimagutil::warn_exit::warn_exit; use libimagerror::trace::MapErrTrace; +use libimagerror::io::ToExitCode; +use libimagerror::exit::ExitUnwrap; use libimagutil::debug_result::*; use util::get_diary_name; @@ -34,33 +33,27 @@ pub fn list(rt: &Runtime) { let diaryname = get_diary_name(rt) .unwrap_or_else(|| warn_exit("No diary selected. Use either the configuration file or the commandline option", 1)); - fn entry_to_location_listing_string(e: &Entry) -> String { - e.get_location().clone() - .without_base() - .to_str() - .map_err_trace() - .unwrap_or(String::from("<>")) - } + let mut out = ::std::io::stdout(); Diary::entries(rt.store(), &diaryname) - .and_then(|es| { - debug!("Iterator for listing: {:?}", es); - - let es = es - .filter_map(|entry| { - entry - .map_dbg(|e| format!("Filtering: {:?}", e)) - .map_err_trace() // error tracing here - .ok() // so we can ignore errors here - }) - .map(|e| e.into()); - - CoreLister::new(&entry_to_location_listing_string) - .list(es) - .chain_err(|| DEK::IOError) - }) .map_dbg_str("Ok") - .map_err_trace() - .ok(); + .map_err_trace_exit_unwrap(1) + .filter_map(|entry| { + entry + .map_dbg(|e| format!("Filtering: {:?}", e)) + .map_err_trace() // error tracing here + .ok() // so we can ignore errors here + }) + .for_each(|e| { + writeln!(out, "{}", e + .get_location() + .clone() + .without_base() + .to_str() + .map_err_trace() + .unwrap_or(String::from("<>"))) + .to_exit_code() + .unwrap_or_exit(); + }) } diff --git a/bin/domain/imag-diary/src/main.rs b/bin/domain/imag-diary/src/main.rs index 0fcaf9d7..bbd443d2 100644 --- a/bin/domain/imag-diary/src/main.rs +++ b/bin/domain/imag-diary/src/main.rs @@ -40,7 +40,6 @@ extern crate toml_query; extern crate libimagdiary; extern crate libimagentryedit; -extern crate libimagentrylist; extern crate libimagerror; extern crate libimaginteraction; #[macro_use] extern crate libimagrt; diff --git a/bin/domain/imag-habit/Cargo.toml b/bin/domain/imag-habit/Cargo.toml index 56bf6622..4e144ab0 100644 --- a/bin/domain/imag-habit/Cargo.toml +++ b/bin/domain/imag-habit/Cargo.toml @@ -27,12 +27,12 @@ log = "0.3" toml = "0.4" toml-query = "0.6" kairos = "0.1.0" +prettytable-rs = "0.6" libimagerror = { version = "0.7.0", path = "../../../lib/core/libimagerror" } libimagstore = { version = "0.7.0", path = "../../../lib/core/libimagstore" } libimagrt = { version = "0.7.0", path = "../../../lib/core/libimagrt" } libimagentryedit = { version = "0.7.0", path = "../../../lib/entry/libimagentryedit" } -libimagentrylist = { version = "0.7.0", path = "../../../lib/entry/libimagentrylist" } libimaginteraction = { version = "0.7.0", path = "../../../lib/etc/libimaginteraction" } libimagutil = { version = "0.7.0", path = "../../../lib/etc/libimagutil" } libimagtimeui = { version = "0.7.0", path = "../../../lib/etc/libimagtimeui" } diff --git a/bin/domain/imag-habit/src/main.rs b/bin/domain/imag-habit/src/main.rs index bcce7459..8594dfbe 100644 --- a/bin/domain/imag-habit/src/main.rs +++ b/bin/domain/imag-habit/src/main.rs @@ -38,18 +38,22 @@ extern crate toml; extern crate toml_query; extern crate kairos; extern crate chrono; +extern crate prettytable; extern crate libimaghabit; extern crate libimagstore; #[macro_use] extern crate libimagrt; extern crate libimagerror; extern crate libimagutil; -extern crate libimagentrylist; extern crate libimaginteraction; use std::io::Write; use std::process::exit; +use prettytable::Table; +use prettytable::cell::Cell; +use prettytable::row::Row; + use libimagrt::runtime::Runtime; use libimagrt::setup::generate_runtime_setup; use libimagerror::trace::{MapErrTrace, trace_error}; @@ -61,8 +65,6 @@ use libimaghabit::habit::HabitTemplate; use libimagstore::store::FileLockEntry; use libimagstore::store::Store; use libimagstore::storeid::StoreId; -use libimagentrylist::listers::table::TableLister; -use libimagentrylist::lister::Lister; use libimaginteraction::ask::ask_bool; mod ui; @@ -312,17 +314,27 @@ fn today(rt: &Runtime, future: bool) { v } - fn lister_header() -> Vec { - ["Name", "Basedate", "Recurr", "Next Due", "Comment"] - .iter().map(|x| String::from(*x)).collect() + let header = ["#", "Name", "Basedate", "Recurr", "Next Due", "Comment"] + .iter() + .map(|s| Cell::new(s)) + .collect::>(); + + let mut table = Table::new(); + table.set_titles(Row::new(header)); + + let mut empty = true; + for (i, e) in relevant.into_iter().enumerate() { + let mut v = vec![format!("{}", i)]; + let mut list = lister_fn(&e); + v.append(&mut list); + table.add_row(v.iter().map(|s| Cell::new(s)).collect()); + empty = false; } - TableLister::new(lister_fn) - .with_header(lister_header()) - .with_idx(true) - .print_empty(false) - .list(relevant.into_iter()) - .map_err_trace_exit_unwrap(1); + if !empty { + let mut out = ::std::io::stdout(); + let _ = table.print(&mut out).to_exit_code().unwrap_or_exit(); + } } } @@ -342,11 +354,16 @@ fn list(rt: &Runtime) { v } - fn lister_header() -> Vec { - ["Name", "Basedate", "Recurr", "Comment", "Next Due"].iter().map(|x| String::from(*x)).collect() - } + let header = ["#", "Name", "Basedate", "Recurr", "Comment", "Next Due"] + .iter() + .map(|s| Cell::new(s)) + .collect::>(); - let iter = rt + let mut empty = true; + let mut table = Table::new(); + table.set_titles(Row::new(header)); + + let _ = rt .store() .all_habit_templates() .map_err_trace_exit_unwrap(1) @@ -360,15 +377,20 @@ fn list(rt: &Runtime) { trace_error(&e); None }, + }) + .enumerate() + .for_each(|(i, e)| { + let mut v = vec![format!("{}", i)]; + let mut list = lister_fn(&e); + v.append(&mut list); + table.add_row(v.iter().map(|s| Cell::new(s)).collect()); + empty = false; }); - - TableLister::new(lister_fn) - .with_header(lister_header()) - .with_idx(true) - .print_empty(false) - .list(iter) - .map_err_trace_exit_unwrap(1); + if !empty { + let mut out = ::std::io::stdout(); + let _ = table.print(&mut out).to_exit_code().unwrap_or_exit(); + } } fn show(rt: &Runtime) { @@ -378,9 +400,6 @@ fn show(rt: &Runtime) { .map(String::from) .unwrap(); // safe by clap - fn instance_lister_header() -> Vec { - ["Date", "Comment"].iter().map(|x| String::from(*x)).collect() - } fn instance_lister_fn(i: &FileLockEntry) -> Vec { use libimagutil::date::date_to_string; @@ -393,6 +412,13 @@ fn show(rt: &Runtime) { } let mut out = ::std::io::stdout(); + let header = ["#", "Date", "Comment"] + .iter() + .map(|s| Cell::new(s)) + .collect::>(); + + let mut table = Table::new(); + table.set_titles(Row::new(header)); let _ = rt .store() @@ -417,20 +443,27 @@ fn show(rt: &Runtime) { .to_exit_code() .unwrap_or_exit(); - let instances_iter = habit + let mut empty = true; + let _ = habit .linked_instances() .map_err_trace_exit_unwrap(1) .filter_map(|instance_id| { debug!("Getting: {:?}", instance_id); rt.store().get(instance_id).map_err_trace_exit_unwrap(1) + }) + .enumerate() + .for_each(|(i, e)| { + let mut v = vec![format!("{}", i)]; + let mut instances = instance_lister_fn(&e); + v.append(&mut instances); + table.add_row(v.iter().map(|s| Cell::new(s)).collect()); + empty = false; }); - TableLister::new(instance_lister_fn) - .with_header(instance_lister_header()) - .with_idx(true) - .print_empty(false) - .list(instances_iter) - .map_err_trace_exit_unwrap(1); + if !empty { + let mut out = ::std::io::stdout(); + let _ = table.print(&mut out).to_exit_code().unwrap_or_exit(); + } }) .collect::>(); } diff --git a/doc/src/05100-lib-entrylist.md b/doc/src/05100-lib-entrylist.md deleted file mode 100644 index 0b0b7905..00000000 --- a/doc/src/05100-lib-entrylist.md +++ /dev/null @@ -1,12 +0,0 @@ -## libimagentrylist - -Library for listing entries in different manner. - -This includes: - -* Plain one-line-one-entry-path listing -* Tree listing by submodule -* Listing with metadata - * One-line-one-entry - * ASCII-Table - diff --git a/doc/src/09020-changelog.md b/doc/src/09020-changelog.md index 8187fbe3..b8526b95 100644 --- a/doc/src/09020-changelog.md +++ b/doc/src/09020-changelog.md @@ -30,6 +30,9 @@ This section contains the changelog from the last release to the next release. but users of the library really should be be able to put entries under custom collections. * `imag store ids` was replaced by `imag ids`. + * `libimagentrylist` was removed. Its functionality was inconvenient to use + and ugly to implement. Its API was cumbersome. + Listing of entries shall be implemented without it. * Minor changes * A license-checker was included into the CI setup, which checks whether all ".rs"-files have the license header at the top of the file diff --git a/imagrc.toml b/imagrc.toml index b03bb4c3..7a834b1c 100644 --- a/imagrc.toml +++ b/imagrc.toml @@ -199,11 +199,6 @@ destinations = [] level = "debug" enabled = true -[imag.logging.modules.libimagentrylist] -destinations = [] -level = "debug" -enabled = true - [imag.logging.modules.libimagentryedit] destinations = [] level = "debug" diff --git a/lib/entry/libimagentrylist/Cargo.toml b/lib/entry/libimagentrylist/Cargo.toml deleted file mode 100644 index 25adb9d2..00000000 --- a/lib/entry/libimagentrylist/Cargo.toml +++ /dev/null @@ -1,35 +0,0 @@ -[package] -name = "libimagentrylist" -version = "0.7.0" -authors = ["Matthias Beyer "] - -description = "Library for the imag core distribution" - -keywords = ["imag", "PIM", "personal", "information", "management"] -readme = "../../../README.md" -license = "LGPL-2.1" - -documentation = "https://matthiasbeyer.github.io/imag/imag_documentation/index.html" -repository = "https://github.com/matthiasbeyer/imag" -homepage = "http://imag-pim.org" - -[badges] -travis-ci = { repository = "matthiasbeyer/imag" } -is-it-maintained-issue-resolution = { repository = "matthiasbeyer/imag" } -is-it-maintained-open-issues = { repository = "matthiasbeyer/imag" } -maintenance = { status = "actively-developed" } - -[dependencies] -log = "0.4.0" -prettytable-rs = "0.6.*" -error-chain = "0.11" - -libimagstore = { version = "0.7.0", path = "../../../lib/core/libimagstore" } -libimagerror = { version = "0.7.0", path = "../../../lib/core/libimagerror" } -libimagutil = { version = "0.7.0", path = "../../../lib/etc/libimagutil" } - -[dependencies.clap] -version = ">=2.29" -default-features = false -features = ["color", "suggestions"] - diff --git a/lib/entry/libimagentrylist/README.md b/lib/entry/libimagentrylist/README.md deleted file mode 120000 index 914fa13f..00000000 --- a/lib/entry/libimagentrylist/README.md +++ /dev/null @@ -1 +0,0 @@ -../../../doc/src/05100-lib-entrylist.md \ No newline at end of file diff --git a/lib/entry/libimagentrylist/src/error.rs b/lib/entry/libimagentrylist/src/error.rs deleted file mode 100644 index 8ecd6bfc..00000000 --- a/lib/entry/libimagentrylist/src/error.rs +++ /dev/null @@ -1,53 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -error_chain! { - types { - ListError, ListErrorKind, ResultExt, Result; - } - - errors { - IOError { - description("IO Error") - display("IO Error") - } - - FormatError { - description("FormatError") - display("FormatError") - } - - EntryError { - description("EntryError") - display("EntryError") - } - - IterationError { - description("IterationError") - display("IterationError") - } - - CLIError { - description("No CLI subcommand for listing entries") - display("No CLI subcommand for listing entries") - } - - } -} - diff --git a/lib/entry/libimagentrylist/src/lib.rs b/lib/entry/libimagentrylist/src/lib.rs deleted file mode 100644 index 1828541f..00000000 --- a/lib/entry/libimagentrylist/src/lib.rs +++ /dev/null @@ -1,50 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -#![recursion_limit="256"] - -#![deny( - dead_code, - non_camel_case_types, - non_snake_case, - path_statements, - trivial_numeric_casts, - unstable_features, - unused_allocation, - unused_import_braces, - unused_imports, - unused_must_use, - unused_mut, - unused_qualifications, - while_true, -)] - -extern crate clap; -#[macro_use] extern crate log; -extern crate prettytable; -#[macro_use] extern crate error_chain; - -extern crate libimagstore; -extern crate libimagutil; -extern crate libimagerror; - -pub mod error; -pub mod lister; -pub mod listers; - diff --git a/lib/entry/libimagentrylist/src/lister.rs b/lib/entry/libimagentrylist/src/lister.rs deleted file mode 100644 index 29287cb8..00000000 --- a/lib/entry/libimagentrylist/src/lister.rs +++ /dev/null @@ -1,29 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -use libimagstore::store::FileLockEntry; - -use error::Result; - -pub trait Lister : Sized { - - fn list<'a, I: Iterator>>(&self, entries: I) -> Result<()>; - -} - diff --git a/lib/entry/libimagentrylist/src/listers/core.rs b/lib/entry/libimagentrylist/src/listers/core.rs deleted file mode 100644 index 09d39039..00000000 --- a/lib/entry/libimagentrylist/src/listers/core.rs +++ /dev/null @@ -1,65 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -use std::io::stdout; -use std::io::Write; - -use lister::Lister; -use error::Result; -use error::ResultExt; - -use libimagstore::store::FileLockEntry; -use libimagstore::store::Entry; - -pub struct CoreLister String> { - lister: Box, -} - -impl String> CoreLister { - - pub fn new(lister: T) -> CoreLister { - CoreLister { - lister: Box::new(lister), - } - } - -} - -impl String> Lister for CoreLister { - - fn list<'b, I: Iterator>>(&self, entries: I) -> Result<()> { - use error::ListErrorKind as LEK; - - debug!("Called list()"); - let (r, n) = entries - .fold((Ok(()), 0), |(accu, i), entry| { - debug!("fold({:?}, {:?})", accu, entry); - let r = accu.and_then(|_| { - debug!("Listing Entry: {:?}", entry); - write!(stdout(), "{:?}\n", (self.lister)(&entry)) - .chain_err(|| LEK::FormatError) - }); - (r, i + 1) - }); - debug!("Iterated over {} entries", n); - r - } - -} - diff --git a/lib/entry/libimagentrylist/src/listers/line.rs b/lib/entry/libimagentrylist/src/listers/line.rs deleted file mode 100644 index 10fca9d8..00000000 --- a/lib/entry/libimagentrylist/src/listers/line.rs +++ /dev/null @@ -1,56 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -use std::io::stdout; -use std::io::Write; - -use lister::Lister; -use error::Result; -use error::ResultExt; - -use libimagstore::store::FileLockEntry; - -pub struct LineLister<'a> { - unknown_output: &'a str, -} - -impl<'a> LineLister<'a> { - - pub fn new(unknown_output: &'a str) -> LineLister<'a> { - LineLister { - unknown_output: unknown_output, - } - } - -} - -impl<'a> Lister for LineLister<'a> { - - fn list<'b, I: Iterator>>(&self, entries: I) -> Result<()> { - use error::ListErrorKind as LEK; - - for entry in entries { - let s = entry.get_location().to_str().unwrap_or(String::from(self.unknown_output)); - write!(stdout(), "{:?}\n", s).chain_err(|| LEK::FormatError)? - } - - Ok(()) - } - -} diff --git a/lib/entry/libimagentrylist/src/listers/mod.rs b/lib/entry/libimagentrylist/src/listers/mod.rs deleted file mode 100644 index bb440662..00000000 --- a/lib/entry/libimagentrylist/src/listers/mod.rs +++ /dev/null @@ -1,23 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -pub mod core; -pub mod line; -pub mod path; -pub mod table; diff --git a/lib/entry/libimagentrylist/src/listers/path.rs b/lib/entry/libimagentrylist/src/listers/path.rs deleted file mode 100644 index 7211812e..00000000 --- a/lib/entry/libimagentrylist/src/listers/path.rs +++ /dev/null @@ -1,64 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -use std::io::stdout; -use std::io::Write; - -use lister::Lister; -use error::Result; -use error::ResultExt; - -use libimagstore::store::FileLockEntry; - -pub struct PathLister { - absolute: bool, -} - -impl PathLister { - - pub fn new(absolute: bool) -> PathLister { - PathLister { - absolute: absolute, - } - } - -} - -impl Lister for PathLister { - - fn list<'a, I: Iterator>>(&self, entries: I) -> Result<()> { - use error::ListErrorKind as LEK; - - for entry in entries { - let pb = entry.get_location().clone(); - let pb = pb.into_pathbuf().chain_err(|| LEK::FormatError)?; - let pb = if self.absolute { - pb.canonicalize().chain_err(|| LEK::FormatError)? - } else { - pb.into() - }; - - write!(stdout(), "{:?}\n", pb).chain_err(|| LEK::FormatError)? - } - - Ok(()) - } - -} - diff --git a/lib/entry/libimagentrylist/src/listers/table.rs b/lib/entry/libimagentrylist/src/listers/table.rs deleted file mode 100644 index 06d39fd6..00000000 --- a/lib/entry/libimagentrylist/src/listers/table.rs +++ /dev/null @@ -1,128 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -use std::io::stdout; - -use lister::Lister; -use error::Result; -use error::ResultExt; - -use libimagstore::store::FileLockEntry; - -use prettytable::Table; -use prettytable::cell::Cell; -use prettytable::row::Row; - -pub struct TableLister Vec> { - line_generator: F, - header: Option>, - - with_idx: bool, - print_empty: bool, -} - -impl Vec> TableLister { - - pub fn new(gen: F) -> TableLister { - TableLister { - line_generator: gen, - header: None, - with_idx: true, - print_empty: false, - } - } - - pub fn with_header(mut self, hdr: Vec) -> TableLister { - self.header = Some(hdr); - self - } - - pub fn with_idx(mut self, b: bool) -> TableLister { - self.with_idx = b; - self - } - - pub fn print_empty(mut self, b: bool) -> TableLister { - self.print_empty = b; - self - } - -} - -impl Vec> Lister for TableLister { - - fn list<'b, I: Iterator>>(&self, entries: I) -> Result<()> { - use error::ListErrorKind as LEK; - use error::ListError as LE; - - let mut table = Table::new(); - let mut header_len : Option = None; - match self.header { - Some(ref s) => { - debug!("We have a header... preparing"); - let mut cells : Vec = s.iter().map(|s| Cell::new(s)).collect(); - if self.with_idx { - cells.insert(0, Cell::new("#")); - } - table.set_titles(Row::new(cells)); - header_len = Some(s.len()); - }, - None => { - debug!("No header for table found... continuing without"); - }, - } - - let mut entries_added = 0; - - entries.enumerate().fold(Ok(table), |table, (i, entry)| { - table.and_then(|mut table| { - let mut v = (self.line_generator)(&entry); - { - let v_len = v.len(); - if header_len.is_none() { - header_len = Some(v_len); - } - if header_len.map(|l| v_len > l).unwrap_or(false) { - return Err(LE::from_kind(LEK::FormatError)); - } - while header_len.map(|l| v.len() != l).unwrap_or(false) { - v.push(String::from("")); - } - } - - if self.with_idx { - v.insert(0, format!("{}", i)); - } - - table.add_row(v.iter().map(|s| Cell::new(s)).collect()); - entries_added += 1; - Ok(table) - }) - }) - .and_then(|tbl| { - if entries_added != 0 && !self.print_empty { - let mut io = stdout(); - tbl.print(&mut io).chain_err(|| LEK::IOError) - } else { - Ok(()) - } - }) - } - -} diff --git a/lib/entry/libimagentryref/Cargo.toml b/lib/entry/libimagentryref/Cargo.toml index 46178af7..fce0898c 100644 --- a/lib/entry/libimagentryref/Cargo.toml +++ b/lib/entry/libimagentryref/Cargo.toml @@ -28,7 +28,6 @@ error-chain = "0.11" libimagstore = { version = "0.7.0", path = "../../../lib/core/libimagstore" } libimagerror = { version = "0.7.0", path = "../../../lib/core/libimagerror" } -libimagentrylist = { version = "0.7.0", path = "../../../lib/entry/libimagentrylist" } libimagentryutil = { version = "0.7.0", path = "../../../lib/entry/libimagentryutil" } [dependencies.rust-crypto] diff --git a/lib/entry/libimagentryref/src/lib.rs b/lib/entry/libimagentryref/src/lib.rs index 39f3c546..a9656d92 100644 --- a/lib/entry/libimagentryref/src/lib.rs +++ b/lib/entry/libimagentryref/src/lib.rs @@ -42,7 +42,6 @@ extern crate toml_query; #[macro_use] extern crate libimagstore; extern crate libimagerror; -extern crate libimagentrylist; #[macro_use] extern crate libimagentryutil; #[macro_use] extern crate error_chain; diff --git a/scripts/release.sh b/scripts/release.sh index 7eea233d..00969827 100644 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -14,7 +14,6 @@ CRATES=( ./lib/entry/libimagentrytag ./lib/entry/libimagentryfilter ./lib/entry/libimagentrygps - ./lib/entry/libimagentrylist ./lib/entry/libimagentryedit ./lib/entry/libimagentryview ./lib/entry/libimagentrydatetime