mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-19 05:55:34 +09:00
fix(self-host): unfurl media hosted by the instance itself (#2451)
This commit is contained in:
1 parent
4c0f02d8a5
commit
c01d22dc05
9 files changed
+390
-20
No files matched your search
@@ -121,6 +121,10 @@ impl UnfurlShard {
|
||||
) -> anyhow::Result<UnfurlResult> {
|
||||
let parsed = Url::parse(url_str)?;
|
||||
|
||||
if self.media_proxy.is_own_url(parsed.as_str()) {
|
||||
return Ok(self.resolve_own_media(&parsed, nsfw_mode).await);
|
||||
}
|
||||
|
||||
let (fetch_url, matched_resolver_idx) = self.find_transform(&parsed);
|
||||
|
||||
let ctx = ResolveContext {
|
||||
@@ -177,6 +181,25 @@ impl UnfurlShard {
|
||||
})
|
||||
}
|
||||
|
||||
async fn resolve_own_media(&self, url: &Url, nsfw_mode: NsfwMode) -> UnfurlResult {
|
||||
match resolvers::media::build_own_media_embed(&self.media_proxy, url, nsfw_mode).await {
|
||||
Ok(Some(embed)) => self.finalize_result(ResolverResult {
|
||||
embeds: vec![embed],
|
||||
}),
|
||||
Ok(None) => UnfurlResult {
|
||||
embeds: Vec::new(),
|
||||
cache_ttl_seconds: None,
|
||||
},
|
||||
Err(err) => {
|
||||
tracing::warn!(error = %err, url = %url, "own media unfurl failed");
|
||||
UnfurlResult {
|
||||
embeds: Vec::new(),
|
||||
cache_ttl_seconds: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn find_transform(&self, url: &Url) -> (Url, Option<usize>) {
|
||||
for (i, resolver) in self.resolvers.iter().enumerate() {
|
||||
if let Some(transformed) = resolver.transform_url(url) {
|
||||
|
||||
Reference in new issue
Block a user