feat: implement transcode settings repository and integrate with local-files provider
This commit is contained in:
@@ -138,39 +138,25 @@ async fn rebuild_registry(state: &AppState) -> DomainResult<()> {
|
||||
|
||||
let base_url = state.config.base_url.clone();
|
||||
|
||||
let sqlite_pool = match &state.raw_sqlite_pool {
|
||||
Some(p) => p.clone(),
|
||||
None => {
|
||||
tracing::warn!("local_files provider requires SQLite; skipping");
|
||||
match infra::factory::build_local_files_bundle(
|
||||
&state.db_pool,
|
||||
files_dir,
|
||||
transcode_dir,
|
||||
cleanup_ttl_hours,
|
||||
base_url,
|
||||
).await {
|
||||
Ok(bundle) => {
|
||||
let scan_idx = Arc::clone(&bundle.local_index);
|
||||
tokio::spawn(async move { scan_idx.rescan().await; });
|
||||
new_registry.register("local", bundle.provider);
|
||||
*state.local_index.write().await = Some(bundle.local_index);
|
||||
*state.transcode_manager.write().await = bundle.transcode_manager;
|
||||
}
|
||||
Err(e) => {
|
||||
tracing::warn!("local_files provider requires SQLite; skipping: {}", e);
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
let lf_cfg = infra::LocalFilesConfig {
|
||||
root_dir: files_dir,
|
||||
base_url,
|
||||
transcode_dir: transcode_dir.clone(),
|
||||
cleanup_ttl_hours,
|
||||
};
|
||||
|
||||
let idx = Arc::new(infra::LocalIndex::new(&lf_cfg, sqlite_pool.clone()).await);
|
||||
|
||||
let scan_idx = Arc::clone(&idx);
|
||||
tokio::spawn(async move { scan_idx.rescan().await; });
|
||||
|
||||
let tm = transcode_dir.as_ref().map(|td| {
|
||||
std::fs::create_dir_all(td).ok();
|
||||
infra::TranscodeManager::new(td.clone(), cleanup_ttl_hours)
|
||||
});
|
||||
|
||||
new_registry.register(
|
||||
"local",
|
||||
Arc::new(infra::LocalFilesProvider::new(Arc::clone(&idx), lf_cfg, tm.clone())),
|
||||
);
|
||||
|
||||
*state.local_index.write().await = Some(idx);
|
||||
*state.transcode_manager.write().await = tm;
|
||||
*state.sqlite_pool.write().await = Some(sqlite_pool);
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
@@ -269,15 +269,11 @@ async fn update_transcode_settings(
|
||||
CurrentUser(_user): CurrentUser,
|
||||
Json(req): Json<UpdateTranscodeSettingsRequest>,
|
||||
) -> Result<Json<TranscodeSettingsResponse>, ApiError> {
|
||||
let pool = state.sqlite_pool.read().await.clone()
|
||||
.ok_or_else(|| ApiError::not_implemented("sqlite not available"))?;
|
||||
|
||||
let ttl = req.cleanup_ttl_hours as i64;
|
||||
sqlx::query("UPDATE transcode_settings SET cleanup_ttl_hours = ? WHERE id = 1")
|
||||
.bind(ttl)
|
||||
.execute(&pool)
|
||||
.await
|
||||
.map_err(|e| ApiError::internal(e.to_string()))?;
|
||||
if let Some(repo) = &state.transcode_settings_repo {
|
||||
repo.save_cleanup_ttl(req.cleanup_ttl_hours)
|
||||
.await
|
||||
.map_err(|e| ApiError::internal(e.to_string()))?;
|
||||
}
|
||||
|
||||
let tm_opt = state.transcode_manager.read().await.clone();
|
||||
if let Some(tm) = tm_opt {
|
||||
|
||||
Reference in New Issue
Block a user