mirror of
https://github.com/Grasscutters/Cultivation.git
synced 2026-03-22 07:42:24 +01:00
delete download when stopping
This commit is contained in:
BIN
grasscutter.zip
BIN
grasscutter.zip
Binary file not shown.
1
src-tauri/Cargo.lock
generated
1
src-tauri/Cargo.lock
generated
@@ -643,6 +643,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"hudsucker",
|
"hudsucker",
|
||||||
|
"lazy_static",
|
||||||
"opener",
|
"opener",
|
||||||
"registry",
|
"registry",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ serde_json = "1.0"
|
|||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
tauri = { version = "1.0.0-rc.9", features = ["api-all"] }
|
tauri = { version = "1.0.0-rc.9", features = ["api-all"] }
|
||||||
|
|
||||||
|
# For creating a "global" downloads list
|
||||||
|
lazy_static = "1.4.0"
|
||||||
|
|
||||||
# Access to the Windows Registry.
|
# Access to the Windows Registry.
|
||||||
registry = "1.2.1"
|
registry = "1.2.1"
|
||||||
# Program opener.
|
# Program opener.
|
||||||
|
|||||||
@@ -1,12 +1,26 @@
|
|||||||
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
|
use tauri::App;
|
||||||
|
use tauri::Manager;
|
||||||
|
|
||||||
|
use std::sync::Mutex;
|
||||||
use std::cmp::min;
|
use std::cmp::min;
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
||||||
use futures_util::StreamExt;
|
use futures_util::StreamExt;
|
||||||
|
|
||||||
|
// This will create a downloads list that will be used to check if we should continue downloading the file
|
||||||
|
lazy_static!{
|
||||||
|
static ref DOWNLOADS: Mutex<Vec<String>> = {
|
||||||
|
let mut m = Vec::new();
|
||||||
|
Mutex::new(m)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// Lots of help from: https://gist.github.com/giuliano-oliveira/4d11d6b3bb003dba3a1b53f43d81b30d
|
// Lots of help from: https://gist.github.com/giuliano-oliveira/4d11d6b3bb003dba3a1b53f43d81b30d
|
||||||
// and docs ofc
|
// and docs ofc
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub async fn download_file(window: tauri::Window, url: &str, path: &str) -> Result<(), String> {
|
pub async fn download_file(window: tauri::Window, url: &str, path: &str) -> Result<(), String> {
|
||||||
// Reqwest setup
|
// Reqwest setup
|
||||||
@@ -35,6 +49,9 @@ pub async fn download_file(window: tauri::Window, url: &str, path: &str) -> Resu
|
|||||||
// File stream
|
// File stream
|
||||||
let mut stream = res.bytes_stream();
|
let mut stream = res.bytes_stream();
|
||||||
|
|
||||||
|
// Assuming all goes well, add to the downloads list
|
||||||
|
DOWNLOADS.lock().unwrap().push(path.to_string());
|
||||||
|
|
||||||
// Await chunks
|
// Await chunks
|
||||||
while let Some(item) = stream.next().await {
|
while let Some(item) = stream.next().await {
|
||||||
let chunk = match item {
|
let chunk = match item {
|
||||||
@@ -102,3 +119,20 @@ pub fn emit_download_err(window: tauri::Window, msg: std::string::String, path:
|
|||||||
|
|
||||||
window.emit("download_error", &res_hash).unwrap();
|
window.emit("download_error", &res_hash).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tauri::command]
|
||||||
|
pub fn stop_download(path: String) {
|
||||||
|
// Check if the path is in the downloads list
|
||||||
|
let mut downloads = DOWNLOADS.lock().unwrap();
|
||||||
|
let index = downloads.iter().position(|x| x == &path);
|
||||||
|
|
||||||
|
// Remove from list
|
||||||
|
if let Some(i) = index {
|
||||||
|
downloads.remove(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete the file from disk
|
||||||
|
if let Err(_e) = std::fs::remove_file(&path) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,6 +16,7 @@ fn main() {
|
|||||||
disconnect,
|
disconnect,
|
||||||
run_program,
|
run_program,
|
||||||
downloader::download_file,
|
downloader::download_file,
|
||||||
|
downloader::stop_download,
|
||||||
lang::get_lang
|
lang::get_lang
|
||||||
])
|
])
|
||||||
.run(tauri::generate_context!())
|
.run(tauri::generate_context!())
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
.ProgressText {
|
.ProgressText {
|
||||||
color: #c5c5c5;
|
color: #c5c5c5;
|
||||||
padding: 0px 10px;
|
padding: 0px 10px;
|
||||||
|
width: 30%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.MainProgressBarWrapper {
|
.MainProgressBarWrapper {
|
||||||
@@ -46,7 +47,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: flex-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
.DownloadControls {
|
.DownloadControls {
|
||||||
@@ -65,3 +66,7 @@
|
|||||||
.DownloadControls div img {
|
.DownloadControls div img {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.downloadStop:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
@@ -25,6 +25,8 @@ export default class ProgressBar extends React.Component<IProps, IState> {
|
|||||||
status: '',
|
status: '',
|
||||||
total: this.props.downloadManager.getDownloadProgress(this.props.path)?.total || 0,
|
total: this.props.downloadManager.getDownloadProgress(this.props.path)?.total || 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.stopDownload = this.stopDownload.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
@@ -33,7 +35,7 @@ export default class ProgressBar extends React.Component<IProps, IState> {
|
|||||||
const prog = this.props.downloadManager.getDownloadProgress(this.props.path)
|
const prog = this.props.downloadManager.getDownloadProgress(this.props.path)
|
||||||
this.setState({
|
this.setState({
|
||||||
progress: prog?.progress || 0,
|
progress: prog?.progress || 0,
|
||||||
status: prog?.status || 'error',
|
status: prog?.status || 'stopped',
|
||||||
total: prog?.total || 0,
|
total: prog?.total || 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -71,7 +73,7 @@ export default class ProgressBar extends React.Component<IProps, IState> {
|
|||||||
}}></div>
|
}}></div>
|
||||||
</div>
|
</div>
|
||||||
<div className="DownloadControls">
|
<div className="DownloadControls">
|
||||||
<div onClick={this.stopDownload}>
|
<div onClick={this.stopDownload} className="downloadStop">
|
||||||
<img src={Stop}></img>
|
<img src={Stop}></img>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -79,7 +81,7 @@ export default class ProgressBar extends React.Component<IProps, IState> {
|
|||||||
|
|
||||||
|
|
||||||
<div className="ProgressText">
|
<div className="ProgressText">
|
||||||
{capitalize(this.state.status)}
|
{capitalize(this.state.status) || 'Waiting'}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user