diff --git a/desktop/src-tauri/src/download_manager/mod.rs b/desktop/src-tauri/src/download_manager/mod.rs index 0eb77882..66e7d9d3 100644 --- a/desktop/src-tauri/src/download_manager/mod.rs +++ b/desktop/src-tauri/src/download_manager/mod.rs @@ -4,7 +4,4 @@ pub mod progress_object; pub mod queue; pub mod download_thread_control_flag; pub mod downloadable; -pub mod application_download_error; -pub mod download_logic; -pub mod manifest; -pub mod stored_manifest; \ No newline at end of file +pub mod application_download_error; \ No newline at end of file diff --git a/desktop/src-tauri/src/downloads/download_agent.rs b/desktop/src-tauri/src/downloads/download_agent.rs index 3c38b4e5..df0b3cac 100644 --- a/desktop/src-tauri/src/downloads/download_agent.rs +++ b/desktop/src-tauri/src/downloads/download_agent.rs @@ -1,13 +1,11 @@ use crate::auth::generate_authorization_header; use crate::db::DatabaseImpls; use crate::download_manager::application_download_error::ApplicationDownloadError; -use crate::download_manager::download_logic::download_game_chunk; use crate::download_manager::download_manager::DownloadManagerSignal; use crate::download_manager::download_thread_control_flag::{DownloadThreadControl, DownloadThreadControlFlag}; use crate::download_manager::downloadable::Downloadable; -use crate::download_manager::manifest::{DropDownloadContext, DropManifest}; use crate::download_manager::progress_object::{ProgressHandle, ProgressObject}; -use crate::download_manager::stored_manifest::StoredManifest; +use crate::downloads::manifest::{DropDownloadContext, DropManifest}; use crate::remote::RemoteAccessError; use crate::DB; use log::{debug, error, info}; @@ -23,17 +21,19 @@ use urlencoding::encode; #[cfg(target_os = "linux")] use rustix::fs::{fallocate, FallocateFlags}; +use super::download_logic::download_game_chunk; +use super::stored_manifest::StoredManifest; pub struct GameDownloadAgent { - id: String, - version: String, - control_flag: DownloadThreadControl, + pub id: String, + pub version: String, + pub control_flag: DownloadThreadControl, contexts: Vec, completed_contexts: VecDeque, - manifest: Mutex>, - progress: Arc, + pub manifest: Mutex>, + pub progress: Arc, sender: Sender, - stored_manifest: StoredManifest, + pub stored_manifest: StoredManifest, } diff --git a/desktop/src-tauri/src/download_manager/download_logic.rs b/desktop/src-tauri/src/downloads/download_logic.rs similarity index 99% rename from desktop/src-tauri/src/download_manager/download_logic.rs rename to desktop/src-tauri/src/downloads/download_logic.rs index 43622347..de0f6159 100644 --- a/desktop/src-tauri/src/download_manager/download_logic.rs +++ b/desktop/src-tauri/src/downloads/download_logic.rs @@ -3,6 +3,7 @@ use crate::db::DatabaseImpls; use crate::download_manager::application_download_error::ApplicationDownloadError; use crate::download_manager::download_thread_control_flag::{DownloadThreadControl, DownloadThreadControlFlag}; use crate::download_manager::progress_object::ProgressHandle; +use crate::downloads::manifest::DropDownloadContext; use crate::remote::RemoteAccessError; use crate::DB; use http::StatusCode; @@ -21,8 +22,6 @@ use std::{ }; use urlencoding::encode; -use super::manifest::DropDownloadContext; - pub struct DropWriter { hasher: Context, destination: W, diff --git a/desktop/src-tauri/src/download_manager/manifest.rs b/desktop/src-tauri/src/downloads/manifest.rs similarity index 100% rename from desktop/src-tauri/src/download_manager/manifest.rs rename to desktop/src-tauri/src/downloads/manifest.rs diff --git a/desktop/src-tauri/src/downloads/mod.rs b/desktop/src-tauri/src/downloads/mod.rs index 5948b1bb..8709ca6b 100644 --- a/desktop/src-tauri/src/downloads/mod.rs +++ b/desktop/src-tauri/src/downloads/mod.rs @@ -1,2 +1,5 @@ pub mod download_agent; pub mod download_commands; +mod download_logic; +mod manifest; +mod stored_manifest; diff --git a/desktop/src-tauri/src/download_manager/stored_manifest.rs b/desktop/src-tauri/src/downloads/stored_manifest.rs similarity index 100% rename from desktop/src-tauri/src/download_manager/stored_manifest.rs rename to desktop/src-tauri/src/downloads/stored_manifest.rs diff --git a/desktop/src-tauri/src/tools/external_component.rs b/desktop/src-tauri/src/tools/external_component.rs new file mode 100644 index 00000000..2aec4b7c --- /dev/null +++ b/desktop/src-tauri/src/tools/external_component.rs @@ -0,0 +1,8 @@ +use std::path::PathBuf; + +pub trait ExternalComponent { + fn download(&mut self); + fn version(&self) -> &String; + fn is_installed(&self) -> bool; + fn location(&self) -> &Option; +} \ No newline at end of file diff --git a/desktop/src-tauri/src/tools/mod.rs b/desktop/src-tauri/src/tools/mod.rs index 960f1321..6b8f4133 100644 --- a/desktop/src-tauri/src/tools/mod.rs +++ b/desktop/src-tauri/src/tools/mod.rs @@ -1,3 +1,4 @@ +mod external_component; mod prefix; mod registry; mod tool; \ No newline at end of file diff --git a/desktop/src-tauri/src/tools/registry.rs b/desktop/src-tauri/src/tools/registry.rs index 182c90f4..c1b000fb 100644 --- a/desktop/src-tauri/src/tools/registry.rs +++ b/desktop/src-tauri/src/tools/registry.rs @@ -1,8 +1,7 @@ use std::collections::HashMap; -use crate::download_manager::downloadable::Downloadable; +use super::external_component::ExternalComponent; - -pub struct Registry { +pub struct Registry { tools: HashMap } diff --git a/desktop/src-tauri/src/tools/tool.rs b/desktop/src-tauri/src/tools/tool.rs index 0fb60110..6fab0251 100644 --- a/desktop/src-tauri/src/tools/tool.rs +++ b/desktop/src-tauri/src/tools/tool.rs @@ -1,42 +1,26 @@ -use std::{path::PathBuf, sync::Arc}; +use std::path::PathBuf; -use rustix::path::Arg; +use super::external_component::ExternalComponent; -use crate::download_manager::{download_thread_control_flag::DownloadThreadControl, downloadable::Downloadable, progress_object::ProgressObject}; - -pub struct ToolDownloader { - id: String, +pub struct Tool { + name: String, version: String, location: Option, - progress: Arc, - control_flag: DownloadThreadControl } -impl Downloadable for ToolDownloader { - fn get_progress_object(&self) -> std::sync::Arc { +impl ExternalComponent for Tool { + fn download(&mut self) { todo!() } - fn version(&self) -> String { - self.version.clone() + fn version(&self) -> &String { + &self.version } - fn id(&self) -> String { - self.id.clone() + fn is_installed(&self) -> bool { + self.location.is_some() } - fn download(&mut self) -> Result<(), crate::download_manager::application_download_error::ApplicationDownloadError> { - todo!() - } - - fn progress(&self) -> Arc { - self.progress.clone() - } - - fn control_flag(&self) -> DownloadThreadControl { - self.control_flag.clone() - } - - fn install_dir(&self) -> String { - self.location.clone().unwrap().to_string_lossy().to_string() + fn location(&self) -> &Option { + &self.location } } \ No newline at end of file