diff --git a/.gitignore b/.gitignore index 0ea9e25..b94451e 100644 --- a/.gitignore +++ b/.gitignore @@ -47,4 +47,5 @@ downloads/ target _internal .trae/ -pnpm-lock.yaml \ No newline at end of file +pnpm-lock.yaml +cookies.json \ No newline at end of file diff --git a/crates/biliup-cli/src/cli.rs b/crates/biliup-cli/src/cli.rs index a54a142..e2f693c 100644 --- a/crates/biliup-cli/src/cli.rs +++ b/crates/biliup-cli/src/cli.rs @@ -35,8 +35,8 @@ pub enum Commands { /// 上传视频 Upload { /// 提交接口 - #[arg(long, default_value = "app")] - submit: SubmitOption, + #[arg(long)] + submit: Option, // Optional name to operate on // name: Option, @@ -64,8 +64,8 @@ pub enum Commands { /// 是否要对某稿件追加视频 Append { /// 提交接口 - #[arg(long, default_value = "app")] - submit: SubmitOption, + #[arg(long)] + submit: Option, // Optional name to operate on // name: Option, diff --git a/crates/biliup-cli/src/main.rs b/crates/biliup-cli/src/main.rs index 3059ae9..1bb4424 100644 --- a/crates/biliup-cli/src/main.rs +++ b/crates/biliup-cli/src/main.rs @@ -10,6 +10,7 @@ use time::macros::format_description; use crate::cli::{Cli, Commands}; use crate::downloader::{download, generate_json}; use crate::uploader::{append, list, login, renew, show, upload_by_command, upload_by_config}; +use biliup::uploader::util::SubmitOption; use clap::Parser; @@ -62,7 +63,7 @@ async fn main() -> Result<()> { video_path, line, limit, - submit, + submit.unwrap_or(SubmitOption::App), cli.proxy.as_deref(), ) .await? @@ -70,8 +71,17 @@ async fn main() -> Result<()> { Commands::Upload { video_path: _, config: Some(config), + submit, .. - } => upload_by_config(config, cli.user_cookie, cli.proxy.as_deref()).await?, + } => { + upload_by_config( + config, + cli.user_cookie, + submit, + cli.proxy.as_deref() + ) + .await?; + } Commands::Append { video_path, vid, @@ -86,7 +96,7 @@ async fn main() -> Result<()> { video_path, line, limit, - submit, + submit.unwrap_or(SubmitOption::App), cli.proxy.as_deref(), ) .await? diff --git a/crates/biliup-cli/src/uploader.rs b/crates/biliup-cli/src/uploader.rs index 6365d26..2d67a15 100644 --- a/crates/biliup-cli/src/uploader.rs +++ b/crates/biliup-cli/src/uploader.rs @@ -96,6 +96,7 @@ pub async fn upload_by_command( pub async fn upload_by_config( config: PathBuf, user_cookie: PathBuf, + submit_override: Option, proxy: Option<&str>, ) -> Result<()> { // println!("number of concurrent futures: {limit}"); @@ -122,7 +123,12 @@ pub async fn upload_by_config( config.limit, ) .await?; - bilibili.submit(&studio, proxy).await?; + // 命令行参数优先,如果没有提供则使用配置文件中的设置 + let submit_option = submit_override.clone().unwrap_or(config.submit.clone()); + match submit_option { + SubmitOption::BCutAndroid => bilibili.submit_by_bcut_android(&studio, proxy).await?, + _ => bilibili.submit_by_app(&studio, proxy).await?, + }; } Ok(()) } diff --git a/crates/biliup/src/uploader.rs b/crates/biliup/src/uploader.rs index 38e2ebf..7eb463d 100644 --- a/crates/biliup/src/uploader.rs +++ b/crates/biliup/src/uploader.rs @@ -1,4 +1,5 @@ use crate::uploader::bilibili::Studio; +use crate::uploader::util::SubmitOption; use crate::{Stream, error}; use bytes::Bytes; use serde::{Deserialize, Serialize}; @@ -42,6 +43,8 @@ pub struct Config { pub line: Option, #[serde(default = "default_limit")] pub limit: usize, + #[serde(default = "default_submit")] + pub submit: SubmitOption, pub streamers: HashMap, } @@ -49,6 +52,10 @@ fn default_limit() -> usize { 3 } +fn default_submit() -> SubmitOption { + SubmitOption::App +} + pub fn load_config(config: &Path) -> error::Result { let file = std::fs::File::open(config)?; let config: Config = serde_yaml::from_reader(file)?; diff --git a/crates/biliup/src/uploader/util.rs b/crates/biliup/src/uploader/util.rs index 0ad0b54..b7a7d01 100644 --- a/crates/biliup/src/uploader/util.rs +++ b/crates/biliup/src/uploader/util.rs @@ -1,8 +1,9 @@ use std::str::FromStr; #[cfg(feature = "cli")] use clap::ValueEnum; +use serde::{Deserialize, Serialize}; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] #[cfg_attr(feature = "cli", derive(ValueEnum))] pub enum SubmitOption { // Client,