/* Program: Bibliofile Language: Rustc 1.71.0 ide: CLion Operating system: Fedora 38/WSL Purpose: TUI-based ereader and library manager for Linux terminal environments. Last edited: 7/27/23 */ mod html_module; use epub::doc::EpubDoc; //library for navigating epubs use std::*; use std::path::Path; use std::process::exit; use tuikit::term::{Term}; use tuikit::prelude::*; //this function will determine if Bibliofile has been opened before. If it has not, it will create a library folder under /opt/bibliofile. fn library_exists(){ //if /var/lib/bibliofile/library does not exist, create it. let mut library_exist_var = Path::exists("/var/lib/bibliofile/library".as_ref()); if library_exist_var == false{ fs::create_dir_all("/var/lib/bibliofile/library").expect("Error...could not create library. If this is your first time running Bibliofile, try running with sudo."); } } //initial function. Reads the ebook passed by argument. //TODO: add visual library to pull up ebooks. fn main() { //library_exists(); if env::args().len() == 1 { println!("you need to enter a book. Closing program."); } else { let args: Vec = env::args().collect(); let filename = &args[1]; epub_func(filename); } } //parses epub files fn epub_func(epub_file: &str){ let doc = EpubDoc::new(&epub_file); assert!(doc.is_ok()); let mut doc = doc.unwrap(); let term: Term<()> = Term::new().unwrap(); let _ = term.print(1, 0, "Use the left and right button to turn the page.\nUp and down scrolls. Press escape or q to quit."); let mut page_num = 1; //If letter q pressed, closes program. while let Ok(ev) = term.poll_event() { let (width, height) = term.term_size().unwrap(); match ev { Event::Key(Key::ESC) | Event::Key(Key::Char('q')) => break, Event::Key(Key::Right) => page_num = page_num + 1, Event::Key(Key::Left) => page_num = page_num - 1, _ => {} } doc.set_current_page(page_num); let content = doc.get_current_str(); let str_content = content.unwrap(); let text = html_module::main(str_content.0); let _ = term.print(2, 0, &text); let _ = term.present(); } }