feat: 支持使用动态 api 获取投稿,该 api 会返回动态视频 (#485)

This commit is contained in:
ᴀᴍᴛᴏᴀᴇʀ
2025-10-10 18:52:07 +08:00
committed by GitHub
parent 4d6669a48a
commit ed54ca13b8
20 changed files with 348 additions and 47 deletions
+20 -14
View File
@@ -1,3 +1,4 @@
use std::path::Path;
use std::time::Duration;
use anyhow::{Context, Result};
@@ -6,14 +7,12 @@ use sea_orm::sqlx::sqlite::{SqliteConnectOptions, SqliteJournalMode, SqliteSynch
use sea_orm::sqlx::{ConnectOptions as SqlxConnectOptions, Sqlite};
use sea_orm::{ConnectOptions, Database, DatabaseConnection, SqlxSqliteConnector};
use crate::config::CONFIG_DIR;
fn database_url() -> String {
format!("sqlite://{}?mode=rwc", CONFIG_DIR.join("data.sqlite").to_string_lossy())
fn database_url(path: &Path) -> String {
format!("sqlite://{}?mode=rwc", path.to_string_lossy())
}
async fn database_connection() -> Result<DatabaseConnection> {
let mut option = ConnectOptions::new(database_url());
async fn database_connection(database_url: &str) -> Result<DatabaseConnection> {
let mut option = ConnectOptions::new(database_url);
option
.max_connections(50)
.min_connections(5)
@@ -35,18 +34,25 @@ async fn database_connection() -> Result<DatabaseConnection> {
))
}
async fn migrate_database() -> Result<()> {
async fn migrate_database(database_url: &str) -> Result<()> {
// 注意此处使用内部构造的 DatabaseConnection,而不是通过 database_connection() 获取
// 这是因为使用多个连接的 Connection 会导致奇怪的迁移顺序问题,而使用默认的连接选项不会
let connection = Database::connect(database_url()).await?;
let connection = Database::connect(database_url).await?;
Ok(Migrator::up(&connection, None).await?)
}
/// 进行数据库迁移并获取数据库连接,供外部使用
pub async fn setup_database() -> Result<DatabaseConnection> {
tokio::fs::create_dir_all(CONFIG_DIR.as_path()).await.context(
"Failed to create config directory. Please check if you have granted necessary permissions to your folder.",
)?;
migrate_database().await.context("Failed to migrate database")?;
database_connection().await.context("Failed to connect to database")
pub async fn setup_database(path: &Path) -> Result<DatabaseConnection> {
if let Some(parent) = path.parent() {
tokio::fs::create_dir_all(parent).await.context(
"Failed to create config directory. Please check if you have granted necessary permissions to your folder.",
)?;
}
let database_url = database_url(path);
migrate_database(&database_url)
.await
.context("Failed to migrate database")?;
database_connection(&database_url)
.await
.context("Failed to connect to database")
}