mirror of
https://git.asonix.dog/asonix/pict-rs
synced 2024-12-22 03:11:24 +00:00
Remove a couple redundant db accesses
This commit is contained in:
parent
d4d7ce9366
commit
89161d03c9
2 changed files with 21 additions and 16 deletions
|
@ -8,25 +8,19 @@ use crate::{
|
|||
formats::ProcessableFormat,
|
||||
magick::{MagickError, MAGICK_CONFIGURE_PATH, MAGICK_TEMPORARY_PATH},
|
||||
process::Process,
|
||||
repo::Alias,
|
||||
repo::Hash,
|
||||
state::State,
|
||||
store::Store,
|
||||
};
|
||||
|
||||
pub(crate) async fn generate<S>(
|
||||
state: &State<S>,
|
||||
alias: &Alias,
|
||||
hash: Hash,
|
||||
original_details: &Details,
|
||||
) -> Result<String, Error>
|
||||
where
|
||||
S: Store + 'static,
|
||||
{
|
||||
let hash = state
|
||||
.repo
|
||||
.hash(alias)
|
||||
.await?
|
||||
.ok_or(UploadError::MissingIdentifier)?;
|
||||
|
||||
let identifier = if original_details.is_video() {
|
||||
crate::generate::ensure_motion_identifier(state, hash, original_details).await?
|
||||
} else {
|
||||
|
|
27
src/lib.rs
27
src/lib.rs
|
@ -120,6 +120,17 @@ async fn ensure_details<S: Store + 'static>(
|
|||
ensure_details_identifier(state, &identifier).await
|
||||
}
|
||||
|
||||
async fn ensure_details_hash<S: Store + 'static>(
|
||||
state: &State<S>,
|
||||
hash: Hash,
|
||||
) -> Result<Details, Error> {
|
||||
let Some(identifier) = state.repo.identifier(hash).await? else {
|
||||
return Err(UploadError::MissingIdentifier.into());
|
||||
};
|
||||
|
||||
ensure_details_identifier(state, &identifier).await
|
||||
}
|
||||
|
||||
#[tracing::instrument(skip(state))]
|
||||
async fn ensure_details_identifier<S: Store + 'static>(
|
||||
state: &State<S>,
|
||||
|
@ -1117,14 +1128,14 @@ async fn do_serve<S: Store + 'static>(
|
|||
alias: Alias,
|
||||
state: web::Data<State<S>>,
|
||||
) -> Result<HttpResponse, Error> {
|
||||
let (hash, alias, not_found) = if let Some(hash) = state.repo.hash(&alias).await? {
|
||||
(hash, alias, false)
|
||||
let (hash, not_found) = if let Some(hash) = state.repo.hash(&alias).await? {
|
||||
(hash, false)
|
||||
} else {
|
||||
let Some((alias, hash)) = not_found_hash(&state.repo).await? else {
|
||||
let Some((_, hash)) = not_found_hash(&state.repo).await? else {
|
||||
return Ok(HttpResponse::NotFound().finish());
|
||||
};
|
||||
|
||||
(hash, alias, true)
|
||||
(hash, true)
|
||||
};
|
||||
|
||||
let Some(identifier) = state.repo.identifier(hash.clone()).await? else {
|
||||
|
@ -1133,7 +1144,7 @@ async fn do_serve<S: Store + 'static>(
|
|||
return Ok(HttpResponse::NotFound().finish());
|
||||
};
|
||||
|
||||
let details = ensure_details(&state, &alias).await?;
|
||||
let details = ensure_details_identifier(&state, &identifier).await?;
|
||||
|
||||
if let Some(public_url) = state.store.public_url(&identifier) {
|
||||
return Ok(HttpResponse::SeeOther()
|
||||
|
@ -1174,7 +1185,7 @@ async fn do_serve_head<S: Store + 'static>(
|
|||
return Ok(HttpResponse::NotFound().finish());
|
||||
};
|
||||
|
||||
let details = ensure_details(&state, &alias).await?;
|
||||
let details = ensure_details_identifier(&state, &identifier).await?;
|
||||
|
||||
if let Some(public_url) = state.store.public_url(&identifier) {
|
||||
return Ok(HttpResponse::SeeOther()
|
||||
|
@ -1385,8 +1396,8 @@ async fn blurhash<S: Store + 'static>(
|
|||
let blurhash = if let Some(blurhash) = state.repo.blurhash(hash.clone()).await? {
|
||||
blurhash
|
||||
} else {
|
||||
let details = ensure_details(&state, &alias).await?;
|
||||
let blurhash = blurhash::generate(&state, &alias, &details).await?;
|
||||
let details = ensure_details_hash(&state, hash.clone()).await?;
|
||||
let blurhash = blurhash::generate(&state, hash.clone(), &details).await?;
|
||||
let blurhash: Arc<str> = Arc::from(blurhash);
|
||||
state.repo.relate_blurhash(hash, blurhash.clone()).await?;
|
||||
|
||||
|
|
Loading…
Reference in a new issue