mirror of
https://github.com/zhom/donutbrowser.git
synced 2026-08-28 13:50:26 +02:00
fix: background status/update loop and window-color command
This commit is contained in:
+28
-5
@@ -72,7 +72,7 @@ use profile::manager::{
|
|||||||
list_browser_profiles, rename_profile, update_camoufox_config, update_profile_dns_blocklist,
|
list_browser_profiles, rename_profile, update_camoufox_config, update_profile_dns_blocklist,
|
||||||
update_profile_launch_hook, update_profile_note, update_profile_proxy,
|
update_profile_launch_hook, update_profile_note, update_profile_proxy,
|
||||||
update_profile_proxy_bypass_rules, update_profile_tags, update_profile_vpn,
|
update_profile_proxy_bypass_rules, update_profile_tags, update_profile_vpn,
|
||||||
update_wayfern_config,
|
update_profile_window_color, update_wayfern_config,
|
||||||
};
|
};
|
||||||
|
|
||||||
use profile::password::{
|
use profile::password::{
|
||||||
@@ -1193,6 +1193,7 @@ async fn generate_sample_fingerprint(
|
|||||||
group_id: None,
|
group_id: None,
|
||||||
tags: Vec::new(),
|
tags: Vec::new(),
|
||||||
note: None,
|
note: None,
|
||||||
|
window_color: None,
|
||||||
sync_mode: crate::profile::types::SyncMode::Disabled,
|
sync_mode: crate::profile::types::SyncMode::Disabled,
|
||||||
encryption_salt: None,
|
encryption_salt: None,
|
||||||
last_sync: None,
|
last_sync: None,
|
||||||
@@ -1816,14 +1817,18 @@ pub fn run() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
tauri::async_runtime::spawn(async move {
|
tauri::async_runtime::spawn(async move {
|
||||||
let updater = app_auto_updater::AppAutoUpdater::instance();
|
|
||||||
let mut interval = tokio::time::interval(tokio::time::Duration::from_secs(3 * 60 * 60));
|
let mut interval = tokio::time::interval(tokio::time::Duration::from_secs(3 * 60 * 60));
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
interval.tick().await;
|
interval.tick().await;
|
||||||
|
|
||||||
log::info!("Checking for app updates...");
|
log::info!("Checking for app updates...");
|
||||||
match updater.check_for_updates().await {
|
// Route through check_for_app_updates (not the raw check_for_updates)
|
||||||
|
// so the background loop respects portable mode and the
|
||||||
|
// disable_auto_updates setting. Previously it bypassed both, so a
|
||||||
|
// portable install would auto-download and run the NSIS installer,
|
||||||
|
// clobbering the portable folder instead of updating in place (#468).
|
||||||
|
match app_auto_updater::check_for_app_updates().await {
|
||||||
Ok(Some(update_info)) => {
|
Ok(Some(update_info)) => {
|
||||||
log::info!(
|
log::info!(
|
||||||
"App update available: {} -> {}",
|
"App update available: {} -> {}",
|
||||||
@@ -1992,6 +1997,7 @@ pub fn run() {
|
|||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
for profile in profiles_to_check {
|
for profile in profiles_to_check {
|
||||||
|
let had_pid = profile.process_id.is_some();
|
||||||
// Check browser status and track changes
|
// Check browser status and track changes
|
||||||
match runner
|
match runner
|
||||||
.check_browser_status(app_handle_status.clone(), &profile)
|
.check_browser_status(app_handle_status.clone(), &profile)
|
||||||
@@ -2004,8 +2010,14 @@ pub fn run() {
|
|||||||
.copied()
|
.copied()
|
||||||
.unwrap_or(false);
|
.unwrap_or(false);
|
||||||
|
|
||||||
// Only emit event if state actually changed
|
// Emit when the running state changed, or when we still had a
|
||||||
if last_state != is_running {
|
// stored PID but the browser is gone — the launch path sets the
|
||||||
|
// frontend to "running" immediately, and a missed transition
|
||||||
|
// here leaves the stop button stuck.
|
||||||
|
let should_emit =
|
||||||
|
last_state != is_running || (!is_running && had_pid);
|
||||||
|
|
||||||
|
if should_emit {
|
||||||
log::debug!(
|
log::debug!(
|
||||||
"Status checker detected change for profile {}: {} -> {}",
|
"Status checker detected change for profile {}: {} -> {}",
|
||||||
profile.name,
|
profile.name,
|
||||||
@@ -2057,6 +2069,16 @@ pub fn run() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Release the cloud team lock when the browser exits naturally
|
||||||
|
// (window closed by the user). The explicit kill path in
|
||||||
|
// browser_runner.rs already releases it, but this branch did
|
||||||
|
// not — leaking the lock, which the 30s heartbeat then renews
|
||||||
|
// indefinitely (issue #474). No-op for non-sync/non-paid
|
||||||
|
// profiles thanks to the guards inside the helper.
|
||||||
|
if !is_running {
|
||||||
|
crate::team_lock::release_team_lock_if_needed(&profile).await;
|
||||||
|
}
|
||||||
|
|
||||||
last_running_states.insert(profile_id, is_running);
|
last_running_states.insert(profile_id, is_running);
|
||||||
} else {
|
} else {
|
||||||
// Update the state even if unchanged to ensure we have it tracked
|
// Update the state even if unchanged to ensure we have it tracked
|
||||||
@@ -2232,6 +2254,7 @@ pub fn run() {
|
|||||||
update_profile_tags,
|
update_profile_tags,
|
||||||
update_profile_note,
|
update_profile_note,
|
||||||
update_profile_launch_hook,
|
update_profile_launch_hook,
|
||||||
|
update_profile_window_color,
|
||||||
update_profile_proxy_bypass_rules,
|
update_profile_proxy_bypass_rules,
|
||||||
update_profile_dns_blocklist,
|
update_profile_dns_blocklist,
|
||||||
check_browser_status,
|
check_browser_status,
|
||||||
|
|||||||
Reference in New Issue
Block a user