diff --git a/desktop/pages/store/index.vue b/desktop/pages/store/index.vue
index 18124edf..45170b5b 100644
--- a/desktop/pages/store/index.vue
+++ b/desktop/pages/store/index.vue
@@ -9,7 +9,12 @@
Download game
({{ Math.floor(progress * 1000) / 10 }}%)
-
+
diff --git a/desktop/src-tauri/src/downloads/download_agent.rs b/desktop/src-tauri/src/downloads/download_agent.rs
index 81b19559..cf5192b5 100644
--- a/desktop/src-tauri/src/downloads/download_agent.rs
+++ b/desktop/src-tauri/src/downloads/download_agent.rs
@@ -3,7 +3,7 @@ use crate::db::DatabaseImpls;
use crate::downloads::manifest::{DropDownloadContext, DropManifest};
use crate::remote::RemoteAccessError;
use crate::DB;
-use log::info;
+use log::{debug, error, info};
use rayon::ThreadPoolBuilder;
use std::fmt::{Display, Formatter};
use std::fs::{create_dir_all, File};
@@ -239,7 +239,7 @@ impl GameDownloadAgent {
}
},
Err(e) => {
- info!("GameDownloadError: {}", e);
+ error!("GameDownloadError: {}", e);
self.sender.send(DownloadManagerSignal::Error(e)).unwrap();
new_contexts_ref.lock().unwrap().push(context);
},
@@ -247,11 +247,10 @@ impl GameDownloadAgent {
});
}
});
- info!("Acquiring lock");
if !new_contexts.lock().unwrap().is_empty() {
- info!("New contexts not empty");
+ debug!("New contexts not empty");
*self.contexts.lock().unwrap() = Arc::into_inner(new_contexts).unwrap().into_inner().unwrap();
- info!("Contexts: {:?}", *self.contexts.lock().unwrap());
+ debug!("Contexts: {:?}", *self.contexts.lock().unwrap());
return Err(())
}
info!("Contexts: {:?}", *self.contexts.lock().unwrap());
diff --git a/desktop/src-tauri/src/downloads/download_commands.rs b/desktop/src-tauri/src/downloads/download_commands.rs
index f98a9fc8..88838367 100644
--- a/desktop/src-tauri/src/downloads/download_commands.rs
+++ b/desktop/src-tauri/src/downloads/download_commands.rs
@@ -1,5 +1,7 @@
use std::sync::Mutex;
+use log::info;
+
use crate::{AppError, AppState};
#[tauri::command]
@@ -37,6 +39,7 @@ pub fn stop_game_download(
state: tauri::State<'_, Mutex>,
game_id: String
) {
+ info!("Cancelling game download {}", game_id);
state
.lock()
.unwrap()
diff --git a/desktop/src-tauri/src/downloads/download_manager.rs b/desktop/src-tauri/src/downloads/download_manager.rs
index 0b674e32..a48034fd 100644
--- a/desktop/src-tauri/src/downloads/download_manager.rs
+++ b/desktop/src-tauri/src/downloads/download_manager.rs
@@ -7,7 +7,7 @@ use std::{
thread::spawn,
};
-use log::info;
+use log::{info, warn};
use super::{
download_agent::{GameDownloadAgent, GameDownloadError},
@@ -78,6 +78,7 @@ pub enum DownloadManagerSignal {
/// Tells the Manager to stop the current
/// download and return
Finish,
+ Cancel(String),
/// Any error which occurs in the agent
Error(GameDownloadError),
}
@@ -146,6 +147,9 @@ impl DownloadManagerBuilder {
DownloadManagerSignal::Error(e) => {
self.manage_error_signal(e);
},
+ DownloadManagerSignal::Cancel(id) => {
+ self.manage_cancel_signal(id);
+ },
};
}
}
@@ -220,10 +224,11 @@ impl DownloadManagerBuilder {
spawn(move || {
match download_agent.download() {
Ok(_) => {
- sender.send(DownloadManagerSignal::Completed(download_agent.id.clone()));
+ sender.send(DownloadManagerSignal::Completed(download_agent.id.clone())).unwrap();
},
- Err(_) => {
- todo!() // Account for if the setup_download function fails
+ Err(e) => {
+ warn!("Download failed");
+ //todo!() // Account for if the setup_download function fails
},
};
});
@@ -244,6 +249,22 @@ impl DownloadManagerBuilder {
*lock = GameDownloadStatus::Error;
self.set_status(DownloadManagerStatus::Error);
}
+ fn manage_cancel_signal(&mut self, game_id: String) {
+ if let Some(current_flag) = &self.active_control_flag {
+ current_flag.set(DownloadThreadControlFlag::Stop);
+ self.active_control_flag = None;
+ *self.progress.lock().unwrap() = None;
+ }
+ self.download_agent_registry.remove(&game_id);
+ let mut lock = self.download_queue.lock().unwrap();
+ let index = match lock.iter().position(|interface| interface.id == game_id) {
+ Some(index) => index,
+ None => return,
+ };
+ lock.remove(index);
+ self.sender.send(DownloadManagerSignal::Go).unwrap();
+ info!("{:?}", self.download_agent_registry.iter().map(|x| x.0.clone()).collect::());
+ }
fn set_status(&self, status: DownloadManagerStatus) {
*self.status.lock().unwrap() = status;
}
diff --git a/desktop/src-tauri/src/downloads/download_manager_interface.rs b/desktop/src-tauri/src/downloads/download_manager_interface.rs
index d626267c..790f6cd4 100644
--- a/desktop/src-tauri/src/downloads/download_manager_interface.rs
+++ b/desktop/src-tauri/src/downloads/download_manager_interface.rs
@@ -76,9 +76,9 @@ impl DownloadManager {
}
pub fn cancel_download(
&self,
- id: String
+ game_id: String
) {
- todo!()
+ self.command_sender.send(DownloadManagerSignal::Cancel(game_id)).unwrap();
}
pub fn edit(&self) -> MutexGuard<'_, VecDeque>> {
self.download_queue.lock().unwrap()
diff --git a/desktop/src-tauri/src/lib.rs b/desktop/src-tauri/src/lib.rs
index 5f9bd1fc..bd05f636 100644
--- a/desktop/src-tauri/src/lib.rs
+++ b/desktop/src-tauri/src/lib.rs
@@ -132,6 +132,7 @@ pub fn run() {
// Downloads
download_game,
get_current_game_download_progress,
+ stop_game_download
])
.plugin(tauri_plugin_shell::init())
.setup(|app| {