From 9023e0b0ed2066da41ef1dbfb9dde67455bad8b8 Mon Sep 17 00:00:00 2001 From: Thomas Eppers Date: Tue, 31 Aug 2021 16:37:04 +0200 Subject: [PATCH] WIP saving --- src/ui.rs | 16 ++++++++++++++-- src/widget/service_switcher.rs | 21 ++++++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index a78db50..e37064e 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -84,7 +84,12 @@ impl Ui { match receiver.try_recv() { Ok(Key::Ctrl('q')) => break 'core, //quit program without saving Ok(Key::Char('\t')) => ui.state = ui.state.next(), - Ok(Key::Ctrl('s')) => ui.services.save(), + Ok(Key::Ctrl('s')) => { + match ui.services.save() { + Err(_) => (), //TODO proper error handling + Ok(_) => (), + } + } Ok(Key::Char('\n')) => match ui.state { State::EditRepo => { ui.repo.confirm(); @@ -119,9 +124,16 @@ impl Ui { Err(_) => ui.tags = tag_list::TagList::new_line("no image found"), Ok(s) => ui.repo.set(s), } + } else if ui.state == State::SelectTag { + ui.tags.handle_input(&ui.state, Key::Up); + //update repo widget + let mut repo = ui.services.extract_repo().unwrap(); + let tag = ui.tags.get().unwrap(); + repo.push_str(":"); + repo.push_str(&tag); + ui.repo.set(repo); } ui.repo.handle_input(&ui.state, Key::Up); - ui.tags.handle_input(&ui.state, Key::Up); } Ok(Key::Down) => { if ui.state == State::SelectService && ui.services.find_next_match() { diff --git a/src/widget/service_switcher.rs b/src/widget/service_switcher.rs index e0d2a1b..9c14489 100644 --- a/src/widget/service_switcher.rs +++ b/src/widget/service_switcher.rs @@ -149,15 +149,26 @@ impl ServiceSwitcher { pub fn change_current_line(&mut self, repo_with_tag: String) { match self.state.selected() { None => (), - Some(i) => self.list[i] = repo_with_tag, + Some(i) => { + let caps = match self.regex.captures(&self.list[i]) { + None => return, + Some(cap) => cap, + }; + let mut line = caps.get(1).unwrap().as_str().to_string(); + line.push_str(": "); + line.push_str(&repo_with_tag); + self.list[i] = line; + } } } - pub fn save(&self) { - let name = "docker-compose.yml"; - let mut file = File::open(name).unwrap(); + pub fn save(&self) -> Result<(), std::io::Error> { + let name = "docker-compose.yml2"; + let mut file = File::create(name)?; for line in &self.list { - file.write_all(line.as_bytes()).unwrap(); + file.write_all(line.as_bytes())?; + file.write_all("\n".as_bytes())?; } + Ok(()) } }