Fix auto updater, add failure message, fix modals (#2335)

* Fix auto updater, add failure message, fix modals

* Fix ads hiding, updater UI

* dummy version, fix gh actions cache

* fix release conf

* actual version bump

* Fix ads hiding sometimes

* Fix event state init

* fix remaining bugs

* Fix lint on linux

* Fix deep linking on Windows

* Fix ad links opening multiple times
This commit is contained in:
Geometrically
2024-08-30 10:42:58 -07:00
committed by GitHub
parent 016c3d779b
commit bd61f5d591
70 changed files with 941 additions and 310 deletions

View File

@@ -33,7 +33,7 @@ const CLI_PROGRESS_BAR_TOTAL: u64 = 1000;
pub async fn loading_function() -> crate::Result<()> {
let loading_bar = init_loading(LoadingBarType::StateInit, 100.0, "Loading something long...").await;
for i in 0..100 {
emit_loading(&loading_bar, 1.0, None).await?;
emit_loading(&loading_bar, 1.0, None)?;
tokio::time::sleep(Duration::from_millis(100)).await;
}
}
@@ -62,7 +62,7 @@ pub async fn init_loading_unsafe(
total: f64,
title: &str,
) -> crate::Result<LoadingBarId> {
let event_state = crate::EventState::get().await?;
let event_state = crate::EventState::get()?;
let key = LoadingBarId(Uuid::new_v4());
event_state.loading_bars.insert(
@@ -91,7 +91,7 @@ pub async fn init_loading_unsafe(
},
);
// attempt an initial loading_emit event to the frontend
emit_loading(&key, 0.0, None).await?;
emit_loading(&key, 0.0, None)?;
Ok(key)
}
@@ -118,7 +118,7 @@ pub async fn edit_loading(
total: f64,
title: &str,
) -> crate::Result<()> {
let event_state = crate::EventState::get().await?;
let event_state = crate::EventState::get()?;
if let Some(mut bar) = event_state.loading_bars.get_mut(&id.0) {
bar.bar_type = bar_type;
@@ -132,7 +132,7 @@ pub async fn edit_loading(
}
};
emit_loading(id, 0.0, None).await?;
emit_loading(id, 0.0, None)?;
Ok(())
}
@@ -144,12 +144,12 @@ pub async fn edit_loading(
#[allow(unused_variables)]
#[tracing::instrument(level = "debug")]
pub async fn emit_loading(
pub fn emit_loading(
key: &LoadingBarId,
increment_frac: f64,
message: Option<&str>,
) -> crate::Result<()> {
let event_state = crate::EventState::get().await?;
let event_state = crate::EventState::get()?;
let mut loading_bar = match event_state.loading_bars.get_mut(&key.0) {
Some(f) => f,
@@ -211,7 +211,7 @@ pub async fn emit_loading(
pub async fn emit_warning(message: &str) -> crate::Result<()> {
#[cfg(feature = "tauri")]
{
let event_state = crate::EventState::get().await?;
let event_state = crate::EventState::get()?;
event_state
.app
.emit(
@@ -235,7 +235,7 @@ pub async fn emit_command(command: CommandPayload) -> crate::Result<()> {
tracing::debug!("Command: {}", serde_json::to_string(&command)?);
#[cfg(feature = "tauri")]
{
let event_state = crate::EventState::get().await?;
let event_state = crate::EventState::get()?;
event_state
.app
.emit("command", command)
@@ -254,7 +254,7 @@ pub async fn emit_process(
) -> crate::Result<()> {
#[cfg(feature = "tauri")]
{
let event_state = crate::EventState::get().await?;
let event_state = crate::EventState::get()?;
event_state
.app
.emit(
@@ -279,7 +279,7 @@ pub async fn emit_profile(
) -> crate::Result<()> {
#[cfg(feature = "tauri")]
{
let event_state = crate::EventState::get().await?;
let event_state = crate::EventState::get()?;
event_state
.app
.emit(
@@ -329,7 +329,7 @@ macro_rules! loading_join {
async move {
let res = $task.await;
if let Some(key) = key {
$crate::event::emit::emit_loading(key, increment, message).await?;
$crate::event::emit::emit_loading(key, increment, message)?;
}
res
}
@@ -376,8 +376,7 @@ where
async move {
f.await?;
if let Some(key) = key {
emit_loading(key, total / (num_futs as f64), message)
.await?;
emit_loading(key, total / (num_futs as f64), message)?;
}
Ok(())
}

View File

@@ -45,21 +45,14 @@ impl EventState {
.cloned()
}
#[cfg(feature = "tauri")]
pub async fn get() -> crate::Result<Arc<Self>> {
pub fn get() -> crate::Result<Arc<Self>> {
Ok(EVENT_STATE.get().ok_or(EventError::NotInitialized)?.clone())
}
// Initialization requires no app handle in non-tauri mode, so we can just use the same function
#[cfg(not(feature = "tauri"))]
pub async fn get() -> crate::Result<Arc<Self>> {
Self::init().await
}
// Values provided should not be used directly, as they are clones and are not guaranteed to be up-to-date
pub async fn list_progress_bars() -> crate::Result<DashMap<Uuid, LoadingBar>>
{
let value = Self::get().await?;
let value = Self::get()?;
Ok(value.loading_bars.clone())
}
@@ -67,7 +60,7 @@ impl EventState {
pub async fn get_main_window() -> crate::Result<Option<tauri::WebviewWindow>>
{
use tauri::Manager;
let value = Self::get().await?;
let value = Self::get()?;
Ok(value.app.get_webview_window("main"))
}
}
@@ -95,7 +88,7 @@ impl Drop for LoadingBarId {
fn drop(&mut self) {
let loader_uuid = self.0;
tokio::spawn(async move {
if let Ok(event_state) = EventState::get().await {
if let Ok(event_state) = EventState::get() {
#[cfg(any(feature = "tauri", feature = "cli"))]
if let Some((_, bar)) =
event_state.loading_bars.remove(&loader_uuid)
@@ -180,6 +173,11 @@ pub enum LoadingBarType {
import_location: PathBuf,
profile_name: String,
},
CheckingForUpdates,
LauncherUpdate {
version: String,
current_version: String,
},
}
#[derive(Serialize, Clone)]