Menu improved

Added menu display, with directory contents in box.

Also added different ebook functions to finish later. Will use them once I get to them. Calling it a night, but will add menu selecting and hopefully the ability to read text files tomorrow.
This commit is contained in:
Daniel Jones 2023-03-17 20:05:02 -05:00
parent 627ed3d7a7
commit 776d71b16c

View File

@ -8,6 +8,7 @@ Last edited: 10:18 PM 3/16/23
*/
use std::fs::File;
use std::fs;
use std::io::prelude::*;
use std::env;
extern crate ncurses;
@ -15,31 +16,60 @@ extern crate ncurses;
//initial function. Reads the ebook passed by argument.
//TODO: add visual library to pull up ebooks.
fn main() -> std::io::Result<()> {
let args: Vec<String> = env::args().collect();
fn main() {
//let args: Vec<String> = env::args().collect();
//let filename = &args[1];
menu();
let filename = &args[1];
let mut file = File::open(filename).expect("cannot open file.");
let mut contents = String::new();
file.read_to_string(&mut contents).expect("unreadable file.");
screen(&contents);
Ok(())
}
fn get_terminal_size()-> (i8, i32, i32){
//screen init function
fn screen(line: &str){
let mut stdscr: i8 = 0;
let mut w: i32 = 0; //width
let mut h: i32 = 0; //height
ncurses::getmaxyx(&mut stdscr, &mut h, &mut w);
return (stdscr, h, w);
}
//Gets files in directory and returns string with contents.
fn get_directory() -> String{
let mut dir: String = "".to_string();
let mut hold: String;
let paths = fs::read_dir("./").unwrap();
for path in paths {
hold = path.unwrap().path().display().to_string();
dir.push_str(&hold);
dir.push_str("\n");
}
println!("{}", &dir);
return dir;
}
fn menu(){
let (mut stdscr, height, width): (i8, i32, i32) = get_terminal_size();
ncurses::initscr();
ncurses::clear();
let win = ncurses::newwin(100, 100, 5, 5);
ncurses::wprintw(win, &get_directory());
ncurses::refresh();
ncurses::box_(win, 0, 0);
ncurses::wrefresh(win);
ncurses::getch();
ncurses::endwin();
}
//screen init function
fn screen(line: &str){
ncurses::initscr();
ncurses::clear();
ncurses::addstr(line);
@ -48,3 +78,45 @@ fn screen(line: &str){
ncurses::endwin();
}
//parses UTF8 files. Does not work if it has BOM or CRLF line terminators. Currently searching for fix.
fn text(filename: &str) -> std::io::Result<()>{
let mut file = File::open(filename).expect("cannot open file.");
let mut contents = String::new();
file.read_to_string(&mut contents).expect("unreadable file.");
screen(&contents);
Ok(())
}
//parses pdf files
fn pdf(){
}
//parses mobi files
fn mobi(){
}
//parses epub files
fn epub(){
}