Frontend now listen to event sent from backend
This commit is contained in:
parent
dce77e1e3d
commit
6697c38af0
@ -5,6 +5,7 @@ use std::path::{Path, self};
|
||||
use anyhow::{Result, bail};
|
||||
use reqwest::{Client, StatusCode};
|
||||
use serde::{Serialize, Deserialize};
|
||||
use tauri::Manager;
|
||||
use tokio::{fs, io::{AsyncWriteExt, AsyncSeekExt}};
|
||||
|
||||
use crate::authentification::GameProfile;
|
||||
@ -19,6 +20,13 @@ const ACTUAL_OS: OSName = OSName::Linux;
|
||||
#[cfg(target_os="macos")]
|
||||
const ACTUAL_OS: OSName = OSName::MacOsX;
|
||||
|
||||
#[derive(Clone, serde::Serialize)]
|
||||
struct ProgressMessage {
|
||||
p_type: String,
|
||||
current: usize,
|
||||
total: usize,
|
||||
}
|
||||
|
||||
pub struct ClientOptions<'a> {
|
||||
pub authorization: GameProfile,
|
||||
pub root_path: &'a Path,
|
||||
@ -55,7 +63,7 @@ impl<'a> MinecraftClient<'_> {
|
||||
Ok(details)
|
||||
}
|
||||
|
||||
pub async fn download_assets(&mut self) -> Result<()> {
|
||||
pub async fn download_assets(&mut self, app: tauri::AppHandle) -> Result<()> {
|
||||
// create root folder if it doesn't exist
|
||||
if !self.opts.root_path.exists() {
|
||||
fs::create_dir_all(self.opts.root_path).await?;
|
||||
@ -65,7 +73,8 @@ impl<'a> MinecraftClient<'_> {
|
||||
fs::create_dir(lib).await?;
|
||||
}
|
||||
self.filter_non_necessary_librairies();
|
||||
for (_, i) in self.details.libraries.iter().enumerate() {
|
||||
let total = self.details.libraries.len();
|
||||
for (progress, i) in self.details.libraries.iter().enumerate() {
|
||||
let p = i.downloads.artifact.path.clone();
|
||||
let mut splited = p.split("/").collect::<Vec<&str>>();
|
||||
let filename = splited.pop().ok_or(anyhow::anyhow!("Invalid filename"))?; // remove last element
|
||||
@ -112,6 +121,7 @@ impl<'a> MinecraftClient<'_> {
|
||||
} else {
|
||||
println!("{} already downloaded", i.name);
|
||||
}
|
||||
app.emit_all("progress", ProgressMessage { p_type: "libraries".to_string(), current: progress + 1, total })?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
@ -42,7 +42,7 @@ async fn login(app: tauri::AppHandle, _window: tauri::Window, state: tauri::Stat
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
async fn download(state: tauri::State<'_, Mutex<CustomState>>) -> Result<String, String> {
|
||||
async fn download(app: tauri::AppHandle, state: tauri::State<'_, Mutex<CustomState>>) -> Result<String, String> {
|
||||
if let Some(base_dir) = BaseDirs::new() {
|
||||
let data_folder = base_dir.data_dir().join(".altarik_test");
|
||||
let root_path = data_folder.as_path();
|
||||
@ -66,7 +66,7 @@ async fn download(state: tauri::State<'_, Mutex<CustomState>>) -> Result<String,
|
||||
let client = MinecraftClient::new(&opts).await;
|
||||
match client {
|
||||
Ok(mut client) => {
|
||||
match client.download_assets().await {
|
||||
match client.download_assets(app).await {
|
||||
Ok(_) => {
|
||||
Ok("Content downloaded".to_string())
|
||||
},
|
||||
|
@ -1,4 +1,4 @@
|
||||
export default {
|
||||
const vue = {
|
||||
data() {
|
||||
return {
|
||||
button_message: "Login to minecraft",
|
||||
@ -7,6 +7,15 @@ export default {
|
||||
hideDownloadButton: true,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
console.log(this)
|
||||
this.listen('progress', (event) => {
|
||||
// event.event is the event name (useful if you want to use a single callback fn for multiple event types)
|
||||
// event.payload is the payload object
|
||||
console.log(event.payload)
|
||||
this.greet_message = event.payload
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
login (e) {
|
||||
e.preventDefault()
|
||||
@ -25,7 +34,7 @@ export default {
|
||||
e.preventDefault()
|
||||
if(!this.hideDownloadButton) {
|
||||
this.invoke("download", {}).then(value => {
|
||||
this.greet_message = value
|
||||
// this.greet_message = value
|
||||
}).catch(err => {
|
||||
this.greet_message = "Error: " + err
|
||||
})
|
||||
@ -33,7 +42,8 @@ export default {
|
||||
},
|
||||
},
|
||||
props: {
|
||||
invoke: Object
|
||||
invoke: Object,
|
||||
listen: Object,
|
||||
},
|
||||
template: `
|
||||
<h1>Welcome to Tauri!</h1>
|
||||
@ -48,3 +58,5 @@ export default {
|
||||
<p id="greet-msg">{{ greet_message }}</p>
|
||||
`
|
||||
}
|
||||
|
||||
export default vue;
|
@ -16,7 +16,7 @@
|
||||
|
||||
<body>
|
||||
<div id="container">
|
||||
<loginpage :invoke="invoke"></loginpage>
|
||||
<loginpage :invoke="invoke" :listen="listen"></loginpage>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
10
src/main.js
10
src/main.js
@ -1,13 +1,15 @@
|
||||
const { invoke } = window.__TAURI__.tauri;
|
||||
const { listen } = window.__TAURI__.event;
|
||||
|
||||
const { createApp } = Vue
|
||||
|
||||
import loginpage from './components/login.js'
|
||||
|
||||
createApp({
|
||||
let app = createApp({
|
||||
data() {
|
||||
return {
|
||||
invoke: invoke
|
||||
invoke: invoke,
|
||||
listen: listen,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@ -16,4 +18,6 @@ createApp({
|
||||
components: {
|
||||
loginpage
|
||||
}
|
||||
}).mount('#container')
|
||||
});
|
||||
|
||||
app.mount('#container')
|
||||
|
Reference in New Issue
Block a user