Implement add cmd

This commit is contained in:
Gregory 2020-05-30 18:40:06 -04:00
parent 7bebc62d51
commit 1ecafc1162
No known key found for this signature in database
GPG key ID: 2E44FAEEDC94B1E2
2 changed files with 25 additions and 9 deletions

View file

@ -1,5 +1,5 @@
use clap::Clap;
use error::{Error, Result};
use structopt::StructOpt;
mod common;
mod error;
@ -8,14 +8,14 @@ mod mimeapps;
pub use common::{DesktopEntry, Handler, Mime};
#[derive(StructOpt)]
#[derive(Clap)]
enum Cmd {
List,
Open {
path: String,
},
Get {
#[structopt(long)]
#[clap(long)]
json: bool,
mime: Mime,
},
@ -23,6 +23,10 @@ enum Cmd {
mime: Mime,
args: Vec<String>,
},
Add {
mime: Mime,
handler: Handler,
},
Set {
mime: Mime,
handler: Handler,
@ -30,11 +34,11 @@ enum Cmd {
Unset {
mime: Mime,
},
#[structopt(setting = structopt::clap::AppSettings::Hidden)]
#[clap(setting = clap::AppSettings::Hidden)]
Autocomplete {
#[structopt(short)]
#[clap(short)]
desktop_files: bool,
#[structopt(short)]
#[clap(short)]
mimes: bool,
},
}
@ -42,10 +46,13 @@ enum Cmd {
fn main() -> Result<()> {
let mut apps = mimeapps::MimeApps::read()?;
match Cmd::from_args() {
match Cmd::parse() {
Cmd::Set { mime, handler } => {
apps.set_handler(mime, handler)?;
}
Cmd::Add { mime, handler } => {
apps.add_handler(mime, handler)?;
}
Cmd::Launch { mime, args } => {
apps.get_handler(&mime)?.launch(args)?;
}

View file

@ -14,9 +14,18 @@ pub struct MimeApps {
}
impl MimeApps {
pub fn set_handler(&mut self, mime: Mime, handler: Handler) -> Result<()> {
pub fn add_handler(&mut self, mime: Mime, handler: Handler) -> Result<()> {
let handlers = self.default_apps.entry(mime).or_default();
handlers.push_front(handler);
handlers.push_back(handler);
self.save()?;
Ok(())
}
pub fn set_handler(&mut self, mime: Mime, handler: Handler) -> Result<()> {
self.default_apps.insert(mime, {
let mut handlers = VecDeque::with_capacity(1);
handlers.push_back(handler);
handlers
});
self.save()?;
Ok(())
}