implement logic of history list
This commit is contained in:
parent
9d87b1a8cd
commit
a6f24bd0b6
77
src/main.rs
77
src/main.rs
@ -32,10 +32,19 @@ struct Cli {
|
|||||||
|
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand)]
|
||||||
enum CliCommands {
|
enum CliCommands {
|
||||||
// Show the details of the item
|
|
||||||
Select {
|
Select {
|
||||||
title: Option<String>,
|
title: Option<String>,
|
||||||
},
|
},
|
||||||
|
History {
|
||||||
|
#[command(subcommand)]
|
||||||
|
command: HistoryCommands
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Subcommand)]
|
||||||
|
enum HistoryCommands {
|
||||||
|
List {},
|
||||||
|
Get {},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
@ -52,7 +61,17 @@ fn main() {
|
|||||||
CliCommands::Select{title: _} => {
|
CliCommands::Select{title: _} => {
|
||||||
// the title is always ignored, we want the id which we get via the environment variables
|
// the title is always ignored, we want the id which we get via the environment variables
|
||||||
debug!("Running in select mode");
|
debug!("Running in select mode");
|
||||||
rofi();
|
handle_select();
|
||||||
|
}
|
||||||
|
CliCommands::History { command } => match &command {
|
||||||
|
HistoryCommands::List {} => {
|
||||||
|
debug!("Running history list");
|
||||||
|
handle_history_list();
|
||||||
|
}
|
||||||
|
HistoryCommands::Get {} => {
|
||||||
|
debug!("Running history get");
|
||||||
|
// handle_history_get();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -125,7 +144,7 @@ fn add_history(entry: &String) {
|
|||||||
//
|
//
|
||||||
// currently using the script mode so that we can pass additional info (eg the id).
|
// currently using the script mode so that we can pass additional info (eg the id).
|
||||||
// no other mode supports this, meaning we would need to match based on the title
|
// no other mode supports this, meaning we would need to match based on the title
|
||||||
fn rofi() {
|
fn handle_select() {
|
||||||
let rofi_retv = env::var("ROFI_RETV");
|
let rofi_retv = env::var("ROFI_RETV");
|
||||||
let rofi_info = env::var("ROFI_INFO");
|
let rofi_info = env::var("ROFI_INFO");
|
||||||
dbg!(&rofi_retv);
|
dbg!(&rofi_retv);
|
||||||
@ -358,3 +377,55 @@ fn save_to_clipboard(input: String) {
|
|||||||
Err(e) => error!("Child thread encountered an error: {:?}", e),
|
Err(e) => error!("Child thread encountered an error: {:?}", e),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn handle_history_list() {
|
||||||
|
// TODO: not sure if we need this, would make more sense to just show these entries at the top
|
||||||
|
// of the normal selector
|
||||||
|
let history = get_history();
|
||||||
|
|
||||||
|
let collections: HashMap<String, String> = match crate::bitwarden_api::list_object_collections() {
|
||||||
|
Ok(response) => {
|
||||||
|
info!("Got list of Bitwarden collections.");
|
||||||
|
response.data.data.iter()
|
||||||
|
.map(|item| (item.id.clone(), item.name.clone()))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
Err(msg) => {
|
||||||
|
error!("Failed to get list of Bitwarden collections:\n{msg}");
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let folders: HashMap<String, String> = match crate::bitwarden_api::list_object_folders() {
|
||||||
|
Ok(response) => {
|
||||||
|
info!("Got list of Bitwarden folders.");
|
||||||
|
response.data.data.iter()
|
||||||
|
.filter(|item| item.id.is_some())
|
||||||
|
.map(|item| (item.id.as_ref().unwrap().clone(), item.name.clone()))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
Err(msg) => {
|
||||||
|
error!("Failed to get list of Bitwarden folders:\n{msg}");
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut logins: HashMap<String, model::response::ListObjectItemsDataData> = HashMap::new();
|
||||||
|
for id in history {
|
||||||
|
dbg!(&id);
|
||||||
|
let item = match crate::bitwarden_api::object_item(&id) {
|
||||||
|
Ok(response) => response.data,
|
||||||
|
Err(msg) => {
|
||||||
|
error!("Failed to get Bitwarden item with id {}. It might not exist anymore.\n{}", id, msg);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if item.login.is_some() {
|
||||||
|
let title = get_title(&item, &folders, &collections);
|
||||||
|
debug!("Login: {}", title);
|
||||||
|
logins.insert(title, item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dbg!(&logins);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user