summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNora <nora.widdecke@tu-bs.de>2019-02-03 21:07:24 +0100
committerNora <nora.widdecke@tu-bs.de>2019-02-03 21:07:24 +0100
commitf51b5797787b7c789c93b2c50efc5debb8ef376f (patch)
treedb7d5726e058ae5b50c1abfce8ea434b2af5a401
parentc5901b04bd545f08af585600c86c227fb09dc613 (diff)
cleanup cursor move
-rw-r--r--src/actions/cursor.rs29
-rw-r--r--src/seqfile.rs20
-rw-r--r--src/utils/fileutil.rs9
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();