diff options
author | Nora <nora.widdecke@tu-bs.de> | 2019-02-03 21:07:24 +0100 |
---|---|---|
committer | Nora <nora.widdecke@tu-bs.de> | 2019-02-03 21:07:24 +0100 |
commit | f51b5797787b7c789c93b2c50efc5debb8ef376f (patch) | |
tree | db7d5726e058ae5b50c1abfce8ea434b2af5a401 | |
parent | c5901b04bd545f08af585600c86c227fb09dc613 (diff) |
cleanup cursor move
-rw-r--r-- | src/actions/cursor.rs | 29 | ||||
-rw-r--r-- | src/seqfile.rs | 20 | ||||
-rw-r--r-- | src/utils/fileutil.rs | 9 |
3 files changed, 14 insertions, 44 deletions
diff --git a/src/actions/cursor.rs b/src/actions/cursor.rs index 1dc5179..69fc55f 100644 --- a/src/actions/cursor.rs +++ b/src/actions/cursor.rs @@ -5,7 +5,6 @@ use utils::stdioutils; use KhResult; use khline::KhLine; use seqfile; -use icalwrap::IcalVEvent; enum Direction { Up, @@ -53,10 +52,20 @@ fn write_cursorfile_to_stdout() { fn cursor_sequence_move(direction: &Direction) -> KhResult<()> { let cursor_event = cursorfile::read_cursorfile()?.to_event().unwrap(); + let mut seq = seqfile::read_seqfile()? + .map(|line| line.parse::<KhLine>().unwrap()); let next_elem = match direction { - Direction::Up => cursor_sequence_prev(&cursor_event), - Direction::Down => cursor_sequence_next(&cursor_event) + Direction::Up => { + let mut seq_rev = seq.rev(); + seq_rev.find(|line| line.matches(&cursor_event)); + seq_rev.next() + }, + Direction::Down => { + seq.find(|line| line.matches(&cursor_event)); + seq.next() + } }; + match next_elem { Some(next_elem) => cursorfile::write_cursorfile(&next_elem.to_string()), None => { @@ -66,20 +75,6 @@ fn cursor_sequence_move(direction: &Direction) -> KhResult<()> { } } -fn cursor_sequence_next(cursor_event: &IcalVEvent) -> Option<KhLine> { - let mut seq = seqfile::read_seqfile().unwrap() - .map(|line| line.parse::<KhLine>().unwrap()); - seq.find(|line| line.matches(cursor_event)); - seq.next() -} - -fn cursor_sequence_prev(cursor_event: &IcalVEvent) -> Option<KhLine> { - let mut seq = seqfile::read_seqfile_backwards().unwrap() - .map(|line| line.parse::<KhLine>().unwrap()); - seq.find(|line| line.matches(cursor_event)); - seq.next() -} - #[cfg(test)] mod integration { use super::*; diff --git a/src/seqfile.rs b/src/seqfile.rs index 9a368f1..e2c2ddf 100644 --- a/src/seqfile.rs +++ b/src/seqfile.rs @@ -15,18 +15,12 @@ pub fn write_to_seqfile(lines: &str) -> io::Result<()> { Ok(()) } -pub fn read_seqfile() -> io::Result<impl Iterator<Item = String>> { +pub fn read_seqfile() -> io::Result<impl DoubleEndedIterator<Item = String>> { let seqfile = get_seqfile(); debug!("Reading sequence file: {}", seqfile.to_string_lossy()); fileutil::read_lines_from_file(&seqfile) } -pub fn read_seqfile_backwards() -> io::Result<impl Iterator<Item = String>> { - let seqfile = get_seqfile(); - debug!("Reading sequence file: {}", seqfile.to_string_lossy()); - fileutil::read_lines_from_file_backwards(&seqfile) -} - #[cfg(test)] mod tests { use super::*; @@ -47,18 +41,6 @@ mod tests { } #[test] - fn read_seqfile_backwards_test() { - let testdir = prepare_testdir("testdir_with_seq"); - let mut seqfile_read: Vec<String> = read_seqfile_backwards().unwrap().collect(); - seqfile_read.reverse(); - let mut seqfile_string = seqfile_read.join("\n"); - seqfile_string.push('\n'); - - let predicate = predicate::str::similar(seqfile_string); - testdir.child(".khaleesi/seq").assert(predicate); - } - - #[test] fn write_to_seqfile_test() { let testdir = prepare_testdir("testdir"); let teststr = "Teststr äöüß\n"; diff --git a/src/utils/fileutil.rs b/src/utils/fileutil.rs index 3c577e7..0b11115 100644 --- a/src/utils/fileutil.rs +++ b/src/utils/fileutil.rs @@ -46,20 +46,13 @@ pub fn write_cal(cal: &IcalVCalendar) -> io::Result<()> { } } -pub fn read_lines_from_file(filepath: &Path) -> io::Result<impl Iterator<Item = String>> { +pub fn read_lines_from_file(filepath: &Path) -> io::Result<impl DoubleEndedIterator<Item = String>> { let f = fs::File::open(filepath)?; let f = BufReader::new(f); let lines: Result<Vec<String>, io::Error> = f.lines().collect(); lines.map(|result| result.into_iter()) } -pub fn read_lines_from_file_backwards(filepath: &Path) -> io::Result<impl Iterator<Item = String>> { - let f = fs::File::open(filepath)?; - let f = BufReader::new(f); - let lines: Result<Vec<String>, io::Error> = f.lines().collect(); - lines.map(|result| result.into_iter().rev()) -} - pub fn read_file_to_string(path: &Path) -> io::Result<String> { let mut file = fs::File::open(&path)?; let mut contents = String::new(); |