summaryrefslogtreecommitdiffstats
path: root/src/preview.rs
blob: d5ff4ca03917eb16627f00444d4bf15c250252bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
extern crate mime;
extern crate mime_detective;
extern crate ncurses;

use std::path::PathBuf;
use std::process;

use context::JoshutoContext;
use ui;
use window;

pub fn preview_file(context: &mut JoshutoContext) {
    /*
        let curr_tab = &mut context.tabs[context.tab_index];

        if let Some(ref curr_list) = curr_tab.curr_list {
            if let Some(entry) = curr_list.get_curr_ref() {
                if entry.path.is_dir() {
                    if let Some(dirlist) = curr_tab.history.get_mut_or_create(&entry.path, &context.config_t.sort_type) {
                        context.views.right_win.display_contents(&context.theme_t, dirlist, context.config_t.scroll_offset);
                        context.views.right_win.queue_for_refresh();
                    } else {
                        ncurses::werase(context.views.right_win.win);
                        ncurses::waddstr(context.views.right_win.win, "Can't find direntry");
                        context.views.right_win.queue_for_refresh();
                    }
                } else {
                    ncurses::werase(context.views.right_win.win);

                    if let Some(file_ext) = entry.path.extension() {
                        if let Some(file_ext) = file_ext.to_str() {
                            match file_ext {
                                "o" | "a" | "avi" | "mp3" | "mp4" | "wmv" | "wma" |
                                "mkv" | "flv" | "vob" | "wav" | "mpc" | "flac" |
                                "divx" | "xcf" | "pdf" | "torrent" | "class" | "so" |
                                "img" | "pyc" | "dmg" | "png" | "jpg" | "jpeg" | "out" | "svg" => {
                                    ui::wprint_err(&context.views.right_win, "Binary File");
                                },
                                _ => {
                                    let detective = mime_detective::MimeDetective::new().unwrap();
                                    match detective.detect_filepath(&entry.path) {
                                        Ok(mime_type) => {
                                            match mime_type.type_() {
                                                mime::TEXT => {
                                                    text_preview(&context.views.right_win, &entry.path);
                                                },
                                                _ => {
                                                    ui::wprint_err(&context.views.right_win, mime_type.type_().as_str());
                                                },
                                            }
                                        },
                                        Err(e) => {
                                            ui::wprint_err(&context.views.right_win, e.to_string().as_str());
                                        },
                                    }
                                }
                            }
                        }
                    }

                    ncurses::wnoutrefresh(context.views.right_win.win);
                }
            } else {
                ncurses::werase(context.views.right_win.win);
                ncurses::wnoutrefresh(context.views.right_win.win);
            }
        }
    */
}

pub fn text_preview(win: &window::JoshutoPanel, path: &PathBuf) {
    let mut command = process::Command::new("head");
    command.arg("-n");
    command.arg(win.cols.to_string());
    command.arg(path.as_os_str());
    command.stdin(std::process::Stdio::piped());
    command.stdout(std::process::Stdio::piped());
    command.stderr(std::process::Stdio::piped());

    match command.spawn() {
        Ok(child) => {
            if let Some(output) = child.stdout {
                let mut reader = std::io::BufReader::new(output);
                let mut buffer = String::new();

                // reader.read_line(&mut buffer);
            }
        }
        Err(e) => {
            ncurses::waddstr(win.win, e.to_string().as_str());
        }
    }
    // bat joshuto.rs --terminal-width 20 --wrap=never --line-range 0:26 --style='numbers'
}