use tokio process instead of sync one
This commit is contained in:
parent
5f3f2096e8
commit
2e57b92e32
4 changed files with 17 additions and 30 deletions
|
|
@ -8,7 +8,7 @@ edition = "2021"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0.75"
|
anyhow = "1.0.75"
|
||||||
dotenv = "0.15.0"
|
dotenv = "0.15.0"
|
||||||
tokio = { version = "1.32.0", features = ["rt-multi-thread", "macros"] }
|
tokio = { version = "1.32.0", features = ["rt-multi-thread", "macros", "process"] }
|
||||||
teloxide = { version = "0.12.2", git ="https://github.com/teloxide/teloxide", features = ["macros"] }
|
teloxide = { version = "0.12.2", git ="https://github.com/teloxide/teloxide", features = ["macros"] }
|
||||||
serde = { version = "1.0.196", features = ["derive"] }
|
serde = { version = "1.0.196", features = ["derive"] }
|
||||||
serde_json = "1.0.113"
|
serde_json = "1.0.113"
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1 @@
|
||||||
pub mod spawn;
|
|
||||||
pub mod yt_dlp;
|
pub mod yt_dlp;
|
||||||
|
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
use std::process::{Command, Output};
|
|
||||||
use tokio::task::{spawn_blocking, JoinError};
|
|
||||||
|
|
||||||
pub enum SpawnError {
|
|
||||||
CommandError(std::io::Error),
|
|
||||||
SpawnBlockingError(JoinError),
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn spawn_process(program: String, args: Vec<String>) -> Result<Output, SpawnError> {
|
|
||||||
let output = spawn_blocking(move || {
|
|
||||||
let output = Command::new(program).args(args).output();
|
|
||||||
|
|
||||||
match output {
|
|
||||||
Ok(output) => Ok(output),
|
|
||||||
Err(e) => Err(SpawnError::CommandError(e)),
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.await;
|
|
||||||
|
|
||||||
match output {
|
|
||||||
Ok(output) => output,
|
|
||||||
Err(e) => Err(SpawnError::SpawnBlockingError(e)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde_json;
|
use serde_json;
|
||||||
use std::process::Command;
|
use std::process::Output;
|
||||||
|
use tokio::process::Command;
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
pub struct YtDlpFormat {
|
pub struct YtDlpFormat {
|
||||||
|
|
@ -23,12 +24,23 @@ pub struct YtDlpInfo {
|
||||||
pub formats: Vec<YtDlpFormat>,
|
pub formats: Vec<YtDlpFormat>,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum YtDlpError {
|
pub enum YtDlpError {
|
||||||
SpawnError,
|
CommandError(std::io::Error),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct YtDlp {}
|
pub struct YtDlp {}
|
||||||
|
|
||||||
impl YtDlp {
|
impl YtDlp {
|
||||||
pub async fn load_info(url: &str) {}
|
pub async fn load_info(url: &str) -> Result<(), YtDlpError> {
|
||||||
|
let output = match Command::new("python")
|
||||||
|
.args(["-m", "yt_dlp", url, "-j"])
|
||||||
|
.output()
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(output) => output,
|
||||||
|
Err(e) => return Err(YtDlpError::CommandError(e)),
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue