bibliofile/src/main.rs

94 lines
2.5 KiB
Rust
Raw Normal View History

/*
Program: Bibliofile
2023-07-24 23:40:33 +00:00
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;
2023-07-24 23:36:08 +00:00
use tuikit::term::{Term, TermHeight};
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<String> = 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();
2023-07-24 23:36:08 +00:00
let term: Term<()> = Term::with_height(TermHeight::Percent(90)).unwrap();
let _ = term.clear();
let _ = term.print(0, 0, "Use the left and right button to turn the page.\nUp and down scrolls. Press escape or q to quit.");
let _ = term.present();
let mut page_num = 1;
2023-07-24 23:36:08 +00:00
2023-07-24 23:40:33 +00:00
//If letter q pressed, closes program.
while let Ok(ev) = term.poll_event() {
2023-07-24 23:40:33 +00:00
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,
2023-07-24 23:40:33 +00:00
_ => {}
}
doc.set_current_page(page_num);
let attr = Attr{ fg: Color::WHITE, ..Attr::default() };
let content = doc.get_current_str();
let str_content = content.unwrap();
let text = html_module::main(str_content.0);
let _ = term.print(1, 0, &*text);
//let _ = term.set_cursor(0, 0);
let _ = term.present();
//let _ = term.clear();
2023-07-24 23:40:33 +00:00
}
}