Fix: Duplicated printing of entries with "show --all"

The problem was that the used `Diary::diary_names()` iterator does not
call `unique()` on its output.
That decision was made because the return type would get more
complicated with that feature.

Now that rustc 1.26 with Impl Trait is out, we can refactor the return
types of these functions (so also with `Diary::diary_names()`) to
automatically do this.
This commit is contained in:
Matthias Beyer 2018-05-11 14:22:35 +02:00
parent 7c44bc1aa3
commit 3b97db5c25

View file

@ -104,6 +104,8 @@ fn main() {
} }
fn show(rt: &Runtime) { fn show(rt: &Runtime) {
use std::borrow::Cow;
use libimagdiary::iter::DiaryEntryIterator; use libimagdiary::iter::DiaryEntryIterator;
use libimagdiary::entry::DiaryEntry; use libimagdiary::entry::DiaryEntry;
@ -114,13 +116,19 @@ fn show(rt: &Runtime) {
.collect(), .collect(),
None => if scmd.is_present("show-all") { None => if scmd.is_present("show-all") {
debug!("Showing for all diaries");
rt.store() rt.store()
.diary_names() .diary_names()
.map_err_trace_exit_unwrap(1) .map_err_trace_exit_unwrap(1)
.map(|diary_name| { .map(|diary_name| {
let diary_name = diary_name.map_err_trace_exit_unwrap(1); let diary_name = diary_name.map_err_trace_exit_unwrap(1);
Diary::entries(rt.store(), &diary_name).map_err_trace_exit_unwrap(1) debug!("Getting entries for Diary: {}", diary_name);
let entries = Diary::entries(rt.store(), &diary_name).map_err_trace_exit_unwrap(1);
let diary_name = Cow::from(diary_name);
(entries, diary_name)
}) })
.unique_by(|tpl| tpl.1.clone())
.map(|tpl| tpl.0)
.collect() .collect()
} else { } else {
// showing default logs // showing default logs
@ -144,6 +152,7 @@ fn show(rt: &Runtime) {
.sorted_by_key(|&(ref id, _)| id.clone()) .sorted_by_key(|&(ref id, _)| id.clone())
.into_iter() .into_iter()
.map(|(id, entry)| { .map(|(id, entry)| {
debug!("Found entry: {:?}", entry);
writeln!(rt.stdout(), writeln!(rt.stdout(),
"{dname: >10} - {y: >4}-{m:0>2}-{d:0>2}T{H:0>2}:{M:0>2} - {text}", "{dname: >10} - {y: >4}-{m:0>2}-{d:0>2}T{H:0>2}:{M:0>2} - {text}",
dname = id.diary_name(), dname = id.diary_name(),