feat: 支持前端编辑、提交 Config (#370)

This commit is contained in:
ᴀᴍᴛᴏᴀᴇʀ
2025-06-18 16:50:16 +08:00
committed by GitHub
parent 28971c3ff3
commit e50318870e
27 changed files with 963 additions and 311 deletions
+16 -4
View File
@@ -1,5 +1,6 @@
use anyhow::{Context, Result, bail};
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use crate::bilibili::error::BiliError;
use crate::config::VersionedConfig;
@@ -8,7 +9,7 @@ pub struct PageAnalyzer {
info: serde_json::Value,
}
#[derive(Debug, strum::FromRepr, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[derive(Debug, strum::FromRepr, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, ToSchema, Clone)]
pub enum VideoQuality {
Quality360p = 16,
Quality480p = 32,
@@ -22,7 +23,7 @@ pub enum VideoQuality {
Quality8k = 127,
}
#[derive(Debug, Clone, Copy, strum::FromRepr, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Clone, Copy, strum::FromRepr, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
pub enum AudioQuality {
Quality64k = 30216,
Quality132k = 30232,
@@ -54,7 +55,18 @@ impl AudioQuality {
}
#[allow(clippy::upper_case_acronyms)]
#[derive(Debug, strum::EnumString, strum::Display, strum::AsRefStr, PartialEq, PartialOrd, Serialize, Deserialize)]
#[derive(
Debug,
strum::EnumString,
strum::Display,
strum::AsRefStr,
PartialEq,
PartialOrd,
Serialize,
Deserialize,
ToSchema,
Clone,
)]
pub enum VideoCodecs {
#[strum(serialize = "hev")]
HEV,
@@ -79,7 +91,7 @@ impl TryFrom<u64> for VideoCodecs {
}
// 视频流的筛选偏好
#[derive(Serialize, Deserialize)]
#[derive(Serialize, Deserialize, ToSchema, Clone)]
pub struct FilterOption {
pub video_max_quality: VideoQuality,
pub video_min_quality: VideoQuality,
+7 -8
View File
@@ -1,4 +1,3 @@
use std::sync::Arc;
use std::time::Duration;
use anyhow::Result;
@@ -93,25 +92,25 @@ impl BiliClient {
if let Some(limiter) = self.limiter.load().as_ref() {
limiter.acquire_one().await;
}
let credential = VersionedConfig::get().load().credential.load();
self.client.request(method, url, Some(credential.as_ref()))
let credential = &VersionedConfig::get().load().credential;
self.client.request(method, url, Some(credential))
}
pub async fn check_refresh(&self, connection: &DatabaseConnection) -> Result<()> {
let credential = VersionedConfig::get().load().credential.load();
let credential = &VersionedConfig::get().load().credential;
if !credential.need_refresh(&self.client).await? {
return Ok(());
}
let new_credential = credential.refresh(&self.client).await?;
let config = VersionedConfig::get().load();
config.credential.store(Arc::new(new_credential));
config.save_to_database(connection).await?;
VersionedConfig::get()
.update_credential(new_credential, connection)
.await?;
Ok(())
}
/// 获取 wbi img,用于生成请求签名
pub async fn wbi_img(&self) -> Result<WbiImg> {
let credential = VersionedConfig::get().load().credential.load();
let credential = &VersionedConfig::get().load().credential;
credential.wbi_img(&self.client).await
}
}
+2 -1
View File
@@ -10,6 +10,7 @@ use rsa::pkcs8::DecodePublicKey;
use rsa::sha2::Sha256;
use rsa::{Oaep, RsaPublicKey};
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use crate::bilibili::{Client, Validate};
@@ -19,7 +20,7 @@ const MIXIN_KEY_ENC_TAB: [usize; 64] = [
20, 34, 44, 52,
];
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
#[derive(Default, Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct Credential {
pub sessdata: String,
pub bili_jct: String,
@@ -4,13 +4,14 @@ mod lane;
use anyhow::Result;
use float_ord::FloatOrd;
use lane::Lane;
use utoipa::ToSchema;
use crate::bilibili::PageInfo;
use crate::bilibili::danmaku::canvas::lane::Collision;
use crate::bilibili::danmaku::danmu::DanmuType;
use crate::bilibili::danmaku::{Danmu, DrawEffect, Drawable};
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize, ToSchema)]
pub struct DanmakuOption {
pub duration: f64,
pub font: String,
+1 -1
View File
@@ -73,7 +73,7 @@ impl<'a> Me<'a> {
}
fn my_id() -> String {
VersionedConfig::get().load().credential.load().dedeuserid.clone()
VersionedConfig::get().load().credential.dedeuserid.clone()
}
}