Skip to content

Commit d4a33ad

Browse files
committed
LAUNCHER-9 feat: Send notification when downloading a package
1 parent 3770d7b commit d4a33ad

File tree

1 file changed

+39
-13
lines changed

1 file changed

+39
-13
lines changed

packages/core/src/api/cluster/content/package.rs

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
use crate::data::{Loader, ManagedPackage, ManagedVersion, PackageType};
44
use crate::prelude::PackagePath;
55
use crate::processor::Cluster;
6-
use crate::proxy::send::send_internet;
6+
use crate::proxy::send::{init_ingress, send_ingress, send_internet};
77
use crate::store::{ClusterPath, ManagedVersionFile, Package, PackageMetadata};
88
use crate::utils::http;
99
use crate::{Result, State};
1010
use onelauncher_utils::io;
11+
use reqwest::Method;
1112
// TODO: Implement proper error handling
1213

1314
/// Find a managed version using filters
@@ -85,14 +86,9 @@ pub async fn download_package(
8586
let file = managed_version
8687
.get_primary_file()
8788
.ok_or_else(|| anyhow::anyhow!("no primary file found"))?;
88-
tracing::info!(
89-
"downloading file '{}' version '{}'",
90-
file.file_name,
91-
managed_version.name
92-
);
9389

94-
let package_path = download_file(file, &package.package_type, cluster).await?;
95-
let sha1 = file.hashes.get("sha1").unwrap_or(&"".to_string()).clone();
90+
let package_path = download_file(package, &managed_version, file, &package.package_type, cluster).await?;
91+
let sha1 = file.hashes.get("sha1").unwrap_or(&String::new()).clone();
9692

9793
let package = Package {
9894
file_name: file.file_name.clone(),
@@ -105,28 +101,54 @@ pub async fn download_package(
105101
}
106102

107103
/// Download a file to a cluster from a managed version file.
108-
#[tracing::instrument(skip(file, cluster))]
104+
#[tracing::instrument(skip_all)]
109105
async fn download_file(
106+
package: &ManagedPackage,
107+
version: &ManagedVersion,
110108
file: &ManagedVersionFile,
111109
package_type: &PackageType,
112110
cluster: &Cluster,
113111
) -> Result<PackagePath> {
114112
// TODO: Implement hash checking
113+
let cluster_path = &cluster.get_full_path().await?;
114+
115115
let path = PackagePath::new(
116-
&cluster
117-
.get_full_path()
118-
.await?
116+
&cluster_path
119117
.join(package_type.get_folder())
120118
.join(&file.file_name),
121119
);
122120

121+
let ingress_id = init_ingress(
122+
crate::IngressType::DownloadPackage {
123+
cluster_path: cluster_path.to_owned(),
124+
package_name: package.title.clone(),
125+
icon: None,
126+
package_id: Some(package.id.clone()),
127+
package_version: Some(version.id.clone()),
128+
}, 100.0, "downloading package").await?;
129+
130+
tracing::info!(
131+
"downloading file '{}' version '{}'",
132+
file.file_name,
133+
version.name
134+
);
135+
123136
let state = State::get().await?;
124-
let bytes = http::fetch(
137+
let bytes = http::fetch_advanced(
138+
Method::GET,
125139
&file.url,
126140
file.hashes.get("sha1").map(String::as_str),
141+
None,
142+
None,
143+
Some((&ingress_id, 90.0)),
127144
&state.fetch_semaphore,
128145
)
129146
.await?;
147+
148+
if let Err(err) = send_ingress(&ingress_id, 5.0, Some("saving file")).await {
149+
tracing::error!("{err}");
150+
}
151+
130152
if let Err(err) = http::write(&path.0, &bytes, &state.io_semaphore).await {
131153
tracing::error!("failed to write file to cluster: {err}");
132154
if path.0.exists() {
@@ -136,6 +158,10 @@ async fn download_file(
136158
return Err(err);
137159
};
138160

161+
if let Err(err) = send_ingress(&ingress_id, 100.0, Some(format!("downloaded package {}", package.title).as_str())).await {
162+
tracing::error!("{err}");
163+
}
164+
139165
drop(state);
140166

141167
Ok(path)

0 commit comments

Comments
 (0)