refactor(download manager): Moved manifest and stored_manifest to download_manager

Signed-off-by: quexeky <git@quexeky.dev>
This commit is contained in:
quexeky
2024-12-31 12:53:31 +11:00
parent 61b3271559
commit 8db2393346
10 changed files with 46 additions and 37 deletions

View File

@ -3,7 +3,6 @@ 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 log::warn;
@ -21,6 +20,8 @@ use std::{
};
use urlencoding::encode;
use super::manifest::DropDownloadContext;
pub struct DropWriter<W: Write> {
hasher: Context,
destination: W,

View File

@ -4,4 +4,7 @@ pub mod progress_object;
pub mod queue;
pub mod download_thread_control_flag;
pub mod downloadable;
pub mod application_download_error;
pub mod application_download_error;
pub mod download_logic;
pub mod manifest;
pub mod stored_manifest;

View File

@ -1,11 +1,13 @@
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::downloads::manifest::{DropDownloadContext, DropManifest};
use crate::download_manager::stored_manifest::StoredManifest;
use crate::remote::RemoteAccessError;
use crate::DB;
use log::{debug, error, info};
@ -21,19 +23,17 @@ 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 {
pub id: String,
pub version: String,
pub control_flag: DownloadThreadControl,
id: String,
version: String,
control_flag: DownloadThreadControl,
contexts: Vec<DropDownloadContext>,
completed_contexts: VecDeque<usize>,
pub manifest: Mutex<Option<DropManifest>>,
pub progress: Arc<ProgressObject>,
manifest: Mutex<Option<DropManifest>>,
progress: Arc<ProgressObject>,
sender: Sender<DownloadManagerSignal>,
pub stored_manifest: StoredManifest,
stored_manifest: StoredManifest,
}

View File

@ -1,5 +1,2 @@
pub mod download_agent;
pub mod download_commands;
mod download_logic;
mod manifest;
mod stored_manifest;

View File

@ -1,8 +0,0 @@
use std::path::PathBuf;
pub trait ExternalComponent {
fn download(&mut self);
fn version(&self) -> &String;
fn is_installed(&self) -> bool;
fn location(&self) -> &Option<PathBuf>;
}

View File

@ -1,4 +1,3 @@
mod external_component;
mod prefix;
mod registry;
mod tool;

View File

@ -1,7 +1,8 @@
use std::collections::HashMap;
use super::external_component::ExternalComponent;
use crate::download_manager::downloadable::Downloadable;
pub struct Registry<T: ExternalComponent> {
pub struct Registry<T: Downloadable> {
tools: HashMap<String, T>
}

View File

@ -1,26 +1,42 @@
use std::path::PathBuf;
use std::{path::PathBuf, sync::Arc};
use super::external_component::ExternalComponent;
use rustix::path::Arg;
pub struct Tool {
name: String,
use crate::download_manager::{download_thread_control_flag::DownloadThreadControl, downloadable::Downloadable, progress_object::ProgressObject};
pub struct ToolDownloader {
id: String,
version: String,
location: Option<PathBuf>,
progress: Arc<ProgressObject>,
control_flag: DownloadThreadControl
}
impl ExternalComponent for Tool {
fn download(&mut self) {
impl Downloadable for ToolDownloader {
fn get_progress_object(&self) -> std::sync::Arc<crate::download_manager::progress_object::ProgressObject> {
todo!()
}
fn version(&self) -> &String {
&self.version
fn version(&self) -> String {
self.version.clone()
}
fn is_installed(&self) -> bool {
self.location.is_some()
fn id(&self) -> String {
self.id.clone()
}
fn location(&self) -> &Option<PathBuf> {
&self.location
fn download(&mut self) -> Result<(), crate::download_manager::application_download_error::ApplicationDownloadError> {
todo!()
}
fn progress(&self) -> Arc<ProgressObject> {
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()
}
}