starting on #3
This commit is contained in:
		
							
								
								
									
										59
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								src/main.rs
									
									
									
									
									
								
							@@ -12,6 +12,8 @@ use iced::{
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use std::fs::{File, OpenOptions};
 | 
				
			||||||
 | 
					use std::io::{BufWriter, Write};
 | 
				
			||||||
use std::{env, fs, path::PathBuf};
 | 
					use std::{env, fs, path::PathBuf};
 | 
				
			||||||
use texts::*;
 | 
					use texts::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -69,6 +71,7 @@ enum Message {
 | 
				
			|||||||
    SetErrorMessage(usize, String),
 | 
					    SetErrorMessage(usize, String),
 | 
				
			||||||
    RecievedEvent(Event),
 | 
					    RecievedEvent(Event),
 | 
				
			||||||
    NoteInput(usize, text_editor::Action),
 | 
					    NoteInput(usize, text_editor::Action),
 | 
				
			||||||
 | 
					    Save,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Message {
 | 
					impl Message {
 | 
				
			||||||
@@ -197,10 +200,49 @@ impl State {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        // match normal messages
 | 
					        // match normal messages
 | 
				
			||||||
        match msg {
 | 
					        match msg {
 | 
				
			||||||
 | 
					            Message::Save => {
 | 
				
			||||||
 | 
					                let opt = OpenOptions::new()
 | 
				
			||||||
 | 
					                    // create if doesn't already exist
 | 
				
			||||||
 | 
					                    .create(true)
 | 
				
			||||||
 | 
					                    .append(false)
 | 
				
			||||||
 | 
					                    // clear existing file
 | 
				
			||||||
 | 
					                    .truncate(true)
 | 
				
			||||||
 | 
					                    .write(true)
 | 
				
			||||||
 | 
					                    .open("save.md")
 | 
				
			||||||
 | 
					                    ;
 | 
				
			||||||
 | 
					                match opt {
 | 
				
			||||||
 | 
					                    Ok(file) => {
 | 
				
			||||||
 | 
					                        let mut buffer = BufWriter::new(file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        for col in &self.states {
 | 
				
			||||||
 | 
					                            // start code block
 | 
				
			||||||
 | 
					                            let _ = buffer.write_all("```\n".as_bytes());
 | 
				
			||||||
 | 
					                            // write header
 | 
				
			||||||
 | 
					                            if let Some(bible) = &col.bible_selected {
 | 
				
			||||||
 | 
					                                let translation = &bible.translation_name;
 | 
				
			||||||
 | 
					                                let location = &col.bible_search;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                let _ = buffer.write_all(format!("{translation} {location}\n").as_bytes());
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            if let Some(scripture) = &col.scripture_body {
 | 
				
			||||||
 | 
					                                let _ = buffer.write_all(parse(scripture).as_bytes());
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            // end code block
 | 
				
			||||||
 | 
					                            let _ = buffer.write_all("```\n".as_bytes());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            let _ = buffer.write_all(&col.notes.text().as_bytes());
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        let _ = buffer.flush();
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    Err(err) => {
 | 
				
			||||||
 | 
					                        eprintln!("{err}");
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            Message::NoteInput(i, action) => {
 | 
					            Message::NoteInput(i, action) => {
 | 
				
			||||||
                let notes = &mut self.states[i].notes;
 | 
					                let notes = &mut self.states[i].notes;
 | 
				
			||||||
                notes.perform(action);
 | 
					                notes.perform(action);
 | 
				
			||||||
            }
 | 
					            },
 | 
				
			||||||
            Message::CycleTheme => {
 | 
					            Message::CycleTheme => {
 | 
				
			||||||
                let len = self.themes.len();
 | 
					                let len = self.themes.len();
 | 
				
			||||||
                let i = &mut self.theme_idx;
 | 
					                let i = &mut self.theme_idx;
 | 
				
			||||||
@@ -344,10 +386,17 @@ impl State {
 | 
				
			|||||||
    fn view(&self) -> Element<Message> {
 | 
					    fn view(&self) -> Element<Message> {
 | 
				
			||||||
        // Header bar, static, doesn't scroll
 | 
					        // Header bar, static, doesn't scroll
 | 
				
			||||||
        column![
 | 
					        column![
 | 
				
			||||||
            button("Cycle Themes")
 | 
					            row![
 | 
				
			||||||
                .on_press(Message::CycleTheme)
 | 
					                button("Cycle Themes")
 | 
				
			||||||
                .style(button::secondary),
 | 
					                    .on_press(Message::CycleTheme)
 | 
				
			||||||
        scrollable(
 | 
					                    .style(button::secondary)
 | 
				
			||||||
 | 
					                    ,
 | 
				
			||||||
 | 
					                button("Save")
 | 
				
			||||||
 | 
					                    .on_press(Message::Save)
 | 
				
			||||||
 | 
					                    .style(button::secondary)
 | 
				
			||||||
 | 
					                    ,
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					       scrollable(
 | 
				
			||||||
            row![
 | 
					            row![
 | 
				
			||||||
                row((0..self.states.len()).map(|col_index| {
 | 
					                row((0..self.states.len()).map(|col_index| {
 | 
				
			||||||
                    column![
 | 
					                    column![
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user