Skip to content

Commit e9b16da

Browse files
author
replydev
committed
Custom progress bar width
1 parent 05b931c commit e9b16da

File tree

4 files changed

+113
-9
lines changed

4 files changed

+113
-9
lines changed

src/main.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ mod argument_functions;
44
mod cryptograpy;
55
mod importers;
66
mod otp;
7+
mod print_settings;
78
use std::env;
89
use sodiumoxide;
910
use std::thread::sleep;
@@ -95,8 +96,8 @@ fn dashboard(){
9596
else{
9697
init_ctrlc_handler(elements.len());
9798
loop{
98-
utils::print_progress_bar();
99-
otp_helper::show_codes(&elements);
99+
let width = otp_helper::show_codes(&elements);
100+
utils::print_progress_bar(width as u64);
100101
sleep(Duration::from_millis(2000));
101102
utils::clear_lines(elements.len() * 2 + 4,false);
102103
}

src/otp/otp_helper.rs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use crate::{cryptograpy, database_loader};
55
use crate::otp::otp_element::OTPElement;
66
use crate::otp::otp_maker::make_totp;
77
use crate::utils::check_elements;
8+
use crate::print_settings::PrintSettings;
89

910

1011
#[derive(Serialize, Deserialize)]
@@ -33,17 +34,31 @@ pub fn read_codes() -> Result<Vec<OTPElement>,String>{
3334
}
3435
}
3536

36-
pub fn show_codes(elements: &Vec<OTPElement>){
37+
pub fn show_codes(elements: &Vec<OTPElement>) -> usize{
38+
let mut print_settings = PrintSettings::new();
3739
let mut table = Table::new();
3840
table.add_row(row!["Id","Issuer","Label","Code"]);
3941
for i in 0..elements.len() {
40-
add_element_to_table(i, &mut table, &elements[i]);
42+
add_element_to_table(i, &mut table, &elements[i],&mut print_settings);
4143
}
4244
table.printstd();
45+
print_settings.get_width()
4346
}
4447

45-
fn add_element_to_table(i: usize, table: &mut Table,element: &OTPElement){
46-
table.add_row(row![i+1,element.issuer(),element.label(),get_good_otp_code(&element)]);
48+
fn add_element_to_table(i: usize, table: &mut Table,element: &OTPElement,print_settings: &mut PrintSettings){
49+
let index = (i+1).to_string();
50+
let issuer = element.issuer();
51+
let label = element.label();
52+
let code = get_good_otp_code(&element);
53+
table.add_row(row![index,issuer,label,code]);
54+
55+
let mut temp_print = PrintSettings::new();
56+
temp_print.set_max_id(index.len());
57+
temp_print.set_max_issuer(issuer.len());
58+
temp_print.set_max_label(label.len());
59+
temp_print.set_max_code(code.len());
60+
61+
print_settings.check_other(&temp_print);
4762
}
4863

4964
fn get_good_otp_code(element: &OTPElement) -> String {

src/print_settings.rs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
pub struct PrintSettings {
2+
max_id: usize,
3+
max_issuer: usize,
4+
max_label: usize,
5+
max_code: usize,
6+
}
7+
8+
impl PrintSettings {
9+
pub fn new() -> PrintSettings{
10+
// set the length of id, issuer, label, and code words
11+
PrintSettings {
12+
max_id: 2,
13+
max_issuer: 6,
14+
max_label: 5,
15+
max_code: 4,
16+
}
17+
}
18+
19+
pub fn set_max_id(&mut self, id: usize) -> &mut PrintSettings{
20+
self.max_id = id;
21+
self
22+
}
23+
24+
pub fn get_max_id(&self) -> usize {
25+
self.max_id
26+
}
27+
28+
pub fn set_max_issuer(&mut self, max_issuer: usize) -> &mut PrintSettings{
29+
self.max_issuer = max_issuer;
30+
self
31+
}
32+
33+
pub fn get_max_issuer(&self) -> usize {
34+
self.max_issuer
35+
}
36+
37+
pub fn set_max_label(&mut self, max_label: usize) -> &mut PrintSettings{
38+
self.max_label = max_label;
39+
self
40+
}
41+
42+
pub fn get_max_label(&self) -> usize {
43+
self.max_label
44+
}
45+
46+
pub fn set_max_code(&mut self, max_code: usize) -> &mut PrintSettings{
47+
self.max_code = max_code;
48+
self
49+
}
50+
51+
pub fn get_max_code(&self) -> usize {
52+
self.max_code
53+
}
54+
55+
pub fn check_other(&mut self,other: &PrintSettings){
56+
if other.get_max_id() > self.get_max_id() {
57+
self.set_max_id(other.get_max_id());
58+
}
59+
if other.get_max_issuer() > self.get_max_issuer() {
60+
self.set_max_issuer(other.get_max_issuer());
61+
}
62+
if other.get_max_label() > self.get_max_label() {
63+
self.set_max_label(other.get_max_label());
64+
}
65+
if other.get_max_code() > self.get_max_code() {
66+
self.set_max_code(other.get_max_code());
67+
}
68+
}
69+
70+
pub fn get_width(&self) -> usize {
71+
self.max_id + 2 + self.max_issuer + 2 + self.max_label + 2 + self.max_code + 2 + 3
72+
}
73+
}

src/utils.rs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,28 @@ pub fn get_db_path() -> PathBuf{
1919
pub fn get_home_folder() -> PathBuf {
2020
home_dir().unwrap()
2121
}
22+
2223
// Push an absolute path to a PathBuf replaces the entire PathBuf: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.push
24+
#[cfg(not(debug_assertions))]
2325
fn get_cotp_folder() -> PathBuf{
2426
let mut cotp_dir = PathBuf::new();
2527
cotp_dir.push(get_home_folder());
2628
cotp_dir.join(".cotp")
2729
}
2830

31+
#[cfg(debug_assertions)]
32+
pub fn create_db_if_needed() -> Result<bool,()>{
33+
let db_path = get_db_path();
34+
if !db_path.exists() {
35+
match std::fs::File::create(db_path){
36+
Ok(_f) => return Ok(true),
37+
Err(_e) => return Err(()),
38+
}
39+
}
40+
Ok(false)
41+
}
42+
43+
#[cfg(not(debug_assertions))]
2944
pub fn create_db_if_needed() -> Result<bool,()>{
3045
let cotp_folder = get_cotp_folder();
3146
if !cotp_folder.exists(){
@@ -49,14 +64,14 @@ pub fn write_to_file(content: &str, file: &mut File) -> Result<(),std::io::Error
4964
file.sync_all()
5065
}
5166

52-
pub fn print_progress_bar(){
53-
let width = 60;
67+
pub fn print_progress_bar(width: u64){
5468
let now = SystemTime::now();
5569
let since_the_epoch = now.duration_since(UNIX_EPOCH).unwrap();
5670
let in_ms = since_the_epoch.as_secs() * 1000 + since_the_epoch.subsec_nanos() as u64 / 1000000;
5771
let step = in_ms % 30000;
5872
let idx = step * width / 30000;
59-
println!("[{:60}]", "=".repeat(idx as usize));
73+
//println!("[{progress:>w$}]", progress="=".repeat(idx as usize),w=width as usize,);
74+
println!("[{progress:<w$}]", progress="=".repeat(idx as usize),w=width as usize,);
6075
}
6176

6277
pub fn clear_lines(lines: usize,exit: bool){

0 commit comments

Comments
 (0)