Remove libimagentrylist

This commit is contained in:
Matthias Beyer 2018-02-20 13:20:02 +01:00
parent 027c4b3287
commit 5773e8a6c8
15 changed files with 3 additions and 523 deletions

View file

@ -42,7 +42,6 @@ members = [
"lib/entry/libimagentryfilter", "lib/entry/libimagentryfilter",
"lib/entry/libimagentrygps", "lib/entry/libimagentrygps",
"lib/entry/libimagentrylink", "lib/entry/libimagentrylink",
"lib/entry/libimagentrylist",
"lib/entry/libimagentrymarkdown", "lib/entry/libimagentrymarkdown",
"lib/entry/libimagentryref", "lib/entry/libimagentryref",
"lib/entry/libimagentrytag", "lib/entry/libimagentrytag",

View file

@ -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

View file

@ -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 but users of the library really should be be able to put entries under
custom collections. custom collections.
* `imag store ids` was replaced by `imag ids`. * `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 * Minor changes
* A license-checker was included into the CI setup, which checks whether all * 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 ".rs"-files have the license header at the top of the file

View file

@ -199,11 +199,6 @@ destinations = []
level = "debug" level = "debug"
enabled = true enabled = true
[imag.logging.modules.libimagentrylist]
destinations = []
level = "debug"
enabled = true
[imag.logging.modules.libimagentryedit] [imag.logging.modules.libimagentryedit]
destinations = [] destinations = []
level = "debug" level = "debug"

View file

@ -1,35 +0,0 @@
[package]
name = "libimagentrylist"
version = "0.7.0"
authors = ["Matthias Beyer <mail@beyermatthias.de>"]
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"]

View file

@ -1 +0,0 @@
../../../doc/src/05100-lib-entrylist.md

View file

@ -1,53 +0,0 @@
//
// imag - the personal information management suite for the commandline
// Copyright (C) 2015-2018 Matthias Beyer <mail@beyermatthias.de> 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")
}
}
}

View file

@ -1,50 +0,0 @@
//
// imag - the personal information management suite for the commandline
// Copyright (C) 2015-2018 Matthias Beyer <mail@beyermatthias.de> 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;

View file

@ -1,29 +0,0 @@
//
// imag - the personal information management suite for the commandline
// Copyright (C) 2015-2018 Matthias Beyer <mail@beyermatthias.de> 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<Item = FileLockEntry<'a>>>(&self, entries: I) -> Result<()>;
}

View file

@ -1,65 +0,0 @@
//
// imag - the personal information management suite for the commandline
// Copyright (C) 2015-2018 Matthias Beyer <mail@beyermatthias.de> 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<T: Fn(&Entry) -> String> {
lister: Box<T>,
}
impl<T: Fn(&Entry) -> String> CoreLister<T> {
pub fn new(lister: T) -> CoreLister<T> {
CoreLister {
lister: Box::new(lister),
}
}
}
impl<T: Fn(&Entry) -> String> Lister for CoreLister<T> {
fn list<'b, I: Iterator<Item = FileLockEntry<'b>>>(&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
}
}

View file

@ -1,56 +0,0 @@
//
// imag - the personal information management suite for the commandline
// Copyright (C) 2015-2018 Matthias Beyer <mail@beyermatthias.de> 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<Item = FileLockEntry<'b>>>(&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(())
}
}

View file

@ -1,23 +0,0 @@
//
// imag - the personal information management suite for the commandline
// Copyright (C) 2015-2018 Matthias Beyer <mail@beyermatthias.de> 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;

View file

@ -1,64 +0,0 @@
//
// imag - the personal information management suite for the commandline
// Copyright (C) 2015-2018 Matthias Beyer <mail@beyermatthias.de> 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<Item = FileLockEntry<'a>>>(&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(())
}
}

View file

@ -1,128 +0,0 @@
//
// imag - the personal information management suite for the commandline
// Copyright (C) 2015-2018 Matthias Beyer <mail@beyermatthias.de> 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<F: Fn(&FileLockEntry) -> Vec<String>> {
line_generator: F,
header: Option<Vec<String>>,
with_idx: bool,
print_empty: bool,
}
impl<F: Fn(&FileLockEntry) -> Vec<String>> TableLister<F> {
pub fn new(gen: F) -> TableLister<F> {
TableLister {
line_generator: gen,
header: None,
with_idx: true,
print_empty: false,
}
}
pub fn with_header(mut self, hdr: Vec<String>) -> TableLister<F> {
self.header = Some(hdr);
self
}
pub fn with_idx(mut self, b: bool) -> TableLister<F> {
self.with_idx = b;
self
}
pub fn print_empty(mut self, b: bool) -> TableLister<F> {
self.print_empty = b;
self
}
}
impl<F: Fn(&FileLockEntry) -> Vec<String>> Lister for TableLister<F> {
fn list<'b, I: Iterator<Item = FileLockEntry<'b>>>(&self, entries: I) -> Result<()> {
use error::ListErrorKind as LEK;
use error::ListError as LE;
let mut table = Table::new();
let mut header_len : Option<usize> = None;
match self.header {
Some(ref s) => {
debug!("We have a header... preparing");
let mut cells : Vec<Cell> = 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(())
}
})
}
}

View file

@ -14,7 +14,6 @@ CRATES=(
./lib/entry/libimagentrytag ./lib/entry/libimagentrytag
./lib/entry/libimagentryfilter ./lib/entry/libimagentryfilter
./lib/entry/libimagentrygps ./lib/entry/libimagentrygps
./lib/entry/libimagentrylist
./lib/entry/libimagentryedit ./lib/entry/libimagentryedit
./lib/entry/libimagentryview ./lib/entry/libimagentryview
./lib/entry/libimagentrydatetime ./lib/entry/libimagentrydatetime