Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions apps/app/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -178,9 +178,26 @@
| tauri_plugin_window_state::StateFlags::SIZE
| tauri_plugin_window_state::StateFlags::MAXIMIZED,
)
.build(),

Check warning on line 181 in apps/app/src/main.rs

View workflow job for this annotation

GitHub Actions / Lint and Test

Diff in /home/runner/_work/code/code/apps/app/src/main.rs
)
.setup(|app| {
#[cfg(target_os = "windows")]
{
let app_name = app.package_info().name.clone();
tauri::async_runtime::spawn(async move {
match theseus::cleanup_updater_temp_folders(&app_name).await
{
Ok(0) => {}
Ok(count) => tracing::info!(
"Cleaned up {count} updater temp folders"
),
Err(error) => tracing::warn!(
"Failed to clean up updater temp folders: {error}"
),
}
});
}

#[cfg(target_os = "macos")]
{
let payload = macos::deep_link::get_or_init_payload(app);
Expand Down
2 changes: 2 additions & 0 deletions packages/app-lib/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub mod install;
mod launcher;
mod logger;
mod state;
mod updater;

pub use api::*;
pub use error::*;
Expand All @@ -26,6 +27,7 @@ pub use event::{
};
pub use logger::start_logger;
pub use state::State;
pub use updater::cleanup_updater_temp_folders;
pub use util::fetch::DownloadReason;

pub fn launcher_user_agent() -> String {
Expand Down
58 changes: 58 additions & 0 deletions packages/app-lib/src/updater.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
use std::io;

const UPDATER_SEPARATOR: &str = "-updater-";

Check warning on line 3 in packages/app-lib/src/updater.rs

View workflow job for this annotation

GitHub Actions / Lint and Test

Diff in /home/runner/_work/code/code/packages/app-lib/src/updater.rs
const UPDATER_RANDOM_SUFFIX_LENGTH: usize = 6;

pub async fn cleanup_updater_temp_folders(
app_name: &str,
) -> io::Result<usize> {
let mut entries = tokio::fs::read_dir(std::env::temp_dir()).await?;
let mut removed = 0;

while let Some(entry) = entries.next_entry().await? {
let file_name = entry.file_name();
let Some(file_name) = file_name.to_str() else {
continue;
};

if !is_updater_temp_folder(app_name, file_name)
|| !entry.file_type().await?.is_dir()
{
continue;
}

let path = entry.path();
match tokio::fs::remove_dir_all(&path).await {
Ok(()) => removed += 1,
Err(error) => {
tracing::warn!(
"Failed to clean up updater temp folder {}: {error}",
path.display()
);
}
}
}

Ok(removed)
}

fn is_updater_temp_folder(app_name: &str, file_name: &str) -> bool {
let Some(name) = file_name

Check warning on line 40 in packages/app-lib/src/updater.rs

View workflow job for this annotation

GitHub Actions / Lint and Test

Diff in /home/runner/_work/code/code/packages/app-lib/src/updater.rs
.strip_prefix(app_name)
.and_then(|name| name.strip_prefix('-'))
else {
return false;
};
let Some((version, random_suffix)) =
name.rsplit_once(UPDATER_SEPARATOR)
else {
return false;
};

!version.is_empty()
&& version
.bytes()
.all(|byte| byte.is_ascii_alphanumeric() || b".-+".contains(&byte))
&& random_suffix.len() == UPDATER_RANDOM_SUFFIX_LENGTH
&& random_suffix.bytes().all(|byte| byte.is_ascii_alphanumeric())
}
Loading