mirror of https://github.com/MedzikUser/imgurs
feat(clipboard): add support for xclip and termux
This commit is contained in:
parent
a29ca66e0d
commit
4ad662e35e
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Screenshots
|
||||
|
||||
![upload](https://cdn.magicuser.cf/7eMaL5d.png)
|
||||
![upload](https://i.imgur.com/MG35kvf.png)
|
||||
|
||||
![delete](https://cdn.magicuser.cf/TSxBrhO.png)
|
||||
|
||||
|
@ -19,7 +19,10 @@ imgurs completions fish > ~/.config/fish/completions/imgurs.fish
|
|||
```
|
||||
|
||||
## Dependencies
|
||||
- **xsel** - support clipboard on Linux
|
||||
- support clipboard on Linux
|
||||
- **xsel**
|
||||
- **xclip** - alternative to **xsel**
|
||||
- **termux-api** - on **Termux**
|
||||
- **libnotify** - support notification on Linux
|
||||
|
||||
## How to install Imgurs CLI?
|
||||
|
|
|
@ -1,18 +1,16 @@
|
|||
use super::send_api_request;
|
||||
use crate::api::{
|
||||
configuration::{api_url, ImgurClient},
|
||||
ImageInfo,
|
||||
};
|
||||
|
||||
use super::send_api_request;
|
||||
|
||||
use anyhow::Error as anyhow_err;
|
||||
use reqwest::Method;
|
||||
use std::{
|
||||
collections::HashMap,
|
||||
io::{Error, ErrorKind},
|
||||
};
|
||||
|
||||
pub async fn upload_image(c: ImgurClient, image: &str) -> Result<ImageInfo, anyhow_err> {
|
||||
pub async fn upload_image(c: ImgurClient, image: &str) -> Result<ImageInfo, anyhow::Error> {
|
||||
let mut form = HashMap::new();
|
||||
|
||||
form.insert("image", image.to_string());
|
||||
|
@ -23,15 +21,15 @@ pub async fn upload_image(c: ImgurClient, image: &str) -> Result<ImageInfo, anyh
|
|||
let status = res.status();
|
||||
|
||||
if status.is_client_error() || status.is_server_error() {
|
||||
let body = res.text().await.map_err(anyhow_err::new)?;
|
||||
let body = res.text().await.map_err(anyhow::Error::new)?;
|
||||
let err = Error::new(
|
||||
ErrorKind::Other,
|
||||
format!("server returned non-successful status code = {status}, body = {body}"),
|
||||
);
|
||||
|
||||
Err(anyhow_err::from(err))
|
||||
Err(anyhow::Error::from(err))
|
||||
} else {
|
||||
let content: ImageInfo = res.json().await.map_err(anyhow_err::new)?;
|
||||
let content: ImageInfo = res.json().await.map_err(anyhow::Error::new)?;
|
||||
Ok(content)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,21 @@
|
|||
#[cfg(all(
|
||||
unix,
|
||||
not(any(target_os = "macos", target_os = "android", target_os = "emscripten"))
|
||||
))]
|
||||
fn is_program_in_path(program: &str) -> bool {
|
||||
use std::{env, fs};
|
||||
|
||||
if let Ok(path) = env::var("PATH") {
|
||||
for p in path.split(":") {
|
||||
let p_str = format!("{}/{}", p, program);
|
||||
if fs::metadata(p_str).is_ok() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
#[cfg(all(
|
||||
unix,
|
||||
not(any(target_os = "macos", target_os = "android", target_os = "emscripten"))
|
||||
|
@ -8,12 +26,37 @@ pub fn set_clipboard(content: String) {
|
|||
process::{Command, Stdio},
|
||||
};
|
||||
|
||||
let mut child = Command::new("xsel")
|
||||
.arg("--input")
|
||||
.arg("--clipboard")
|
||||
.stdin(Stdio::piped())
|
||||
.spawn()
|
||||
.expect("execute command xsel");
|
||||
use colored::Colorize;
|
||||
|
||||
let mut child;
|
||||
|
||||
// xsel
|
||||
if is_program_in_path("xsel") {
|
||||
child = Command::new("xsel")
|
||||
.arg("--input")
|
||||
.arg("--clipboard")
|
||||
.stdin(Stdio::piped())
|
||||
.spawn()
|
||||
.expect("execute command xsel")
|
||||
// xclip
|
||||
} else if is_program_in_path("xclip") {
|
||||
child = Command::new("xclip")
|
||||
.arg("-in")
|
||||
.arg("-selection")
|
||||
.arg("clipboard")
|
||||
.stdin(Stdio::piped())
|
||||
.spawn()
|
||||
.expect("execute command xclip")
|
||||
// termux
|
||||
} else if is_program_in_path("termux-clipboard-set") {
|
||||
child = Command::new("termux-clipboard-set")
|
||||
.stdin(Stdio::piped())
|
||||
.spawn()
|
||||
.expect("execute command termux-clipboard-set")
|
||||
} else {
|
||||
println!("{} {}", "WARN".yellow(), "command for clipboard not found".magenta());
|
||||
return
|
||||
}
|
||||
|
||||
child
|
||||
.stdin
|
||||
|
|
Loading…
Reference in New Issue