mirror of
https://github.com/Drop-OSS/drop-app.git
synced 2026-01-30 19:15:17 +01:00
* fix: launching on linux * feat: #70 * feat: add dummy store page * feat: add store redir and refresh button to library * feat: cache first object fetching * feat: Remove let_chains feature and update to Rust 2024 Signed-off-by: quexeky <git@quexeky.dev> * feat: Check for if process was manually stopped Signed-off-by: quexeky <git@quexeky.dev> * fix: use bitcode instead of serde * chore: remove logs * fix: clippy * fix: clippy 2 * fix: swap to stop icon --------- Signed-off-by: quexeky <git@quexeky.dev> Co-authored-by: quexeky <git@quexeky.dev>
62 lines
1.9 KiB
Rust
62 lines
1.9 KiB
Rust
use http::{header::CONTENT_TYPE, response::Builder as ResponseBuilder};
|
|
use log::warn;
|
|
use tauri::UriSchemeResponder;
|
|
|
|
use super::{
|
|
auth::generate_authorization_header,
|
|
cache::{cache_object, get_cached_object, ObjectCache},
|
|
requests::make_request,
|
|
};
|
|
|
|
pub fn fetch_object(request: http::Request<Vec<u8>>, responder: UriSchemeResponder) {
|
|
// Drop leading /
|
|
let object_id = &request.uri().path()[1..];
|
|
|
|
let cache_result = get_cached_object::<&str, ObjectCache>(object_id);
|
|
if let Ok(cache_result) = &cache_result
|
|
&& !cache_result.has_expired()
|
|
{
|
|
responder.respond(cache_result.into());
|
|
return;
|
|
}
|
|
|
|
let header = generate_authorization_header();
|
|
let client: reqwest::blocking::Client = reqwest::blocking::Client::new();
|
|
let response = make_request(&client, &["/api/v1/client/object/", object_id], &[], |f| {
|
|
f.header("Authorization", header)
|
|
})
|
|
.unwrap()
|
|
.send();
|
|
if response.is_err() {
|
|
match cache_result {
|
|
Ok(cache_result) => responder.respond(cache_result.into()),
|
|
Err(e) => {
|
|
warn!("{e}")
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
let response = response.unwrap();
|
|
|
|
let resp_builder = ResponseBuilder::new().header(
|
|
CONTENT_TYPE,
|
|
response.headers().get("Content-Type").unwrap(),
|
|
);
|
|
let data = Vec::from(response.bytes().unwrap());
|
|
let resp = resp_builder.body(data).unwrap();
|
|
if cache_result.is_err() || cache_result.unwrap().has_expired() {
|
|
cache_object::<&str, ObjectCache>(object_id, &resp.clone().into()).unwrap();
|
|
}
|
|
|
|
responder.respond(resp);
|
|
}
|
|
pub fn fetch_object_offline(request: http::Request<Vec<u8>>, responder: UriSchemeResponder) {
|
|
let object_id = &request.uri().path()[1..];
|
|
let data = get_cached_object::<&str, ObjectCache>(object_id);
|
|
|
|
match data {
|
|
Ok(data) => responder.respond(data.into()),
|
|
Err(e) => warn!("{e}"),
|
|
}
|
|
}
|