debug: add detailed logging for browser notifications

- Log notification permission status
- Log critical event detection
- Log notification creation attempts
- Log notification failures with error details
- Help troubleshoot why notifications aren't showing
This commit is contained in:
spinline
2026-02-05 22:39:00 +03:00
parent 3efe60a0f0
commit 1361b5a228
2 changed files with 28 additions and 5 deletions

View File

@@ -213,6 +213,8 @@ pub fn provide_torrent_store() {
global_stats.set(stats); global_stats.set(stats);
} }
AppEvent::Notification(n) => { AppEvent::Notification(n) => {
log::info!("📬 Received notification: {} - {}", n.level == shared::NotificationLevel::Success, n.message);
// Show toast notification // Show toast notification
show_toast_with_signal(notifications, n.level.clone(), n.message.clone()); show_toast_with_signal(notifications, n.level.clone(), n.message.clone());
@@ -225,6 +227,7 @@ pub fn provide_torrent_store() {
|| n.level == shared::NotificationLevel::Error; || n.level == shared::NotificationLevel::Error;
if is_critical { if is_critical {
log::info!("🔴 Critical notification detected: {}", n.message);
let title = match n.level { let title = match n.level {
shared::NotificationLevel::Success => "✅ VibeTorrent", shared::NotificationLevel::Success => "✅ VibeTorrent",
shared::NotificationLevel::Error => "❌ VibeTorrent", shared::NotificationLevel::Error => "❌ VibeTorrent",

View File

@@ -34,7 +34,9 @@ pub async fn request_notification_permission() -> bool {
/// Check if browser notifications are supported and permitted /// Check if browser notifications are supported and permitted
pub fn is_notification_supported() -> bool { pub fn is_notification_supported() -> bool {
let window = web_sys::window().expect("no global window"); let window = web_sys::window().expect("no global window");
js_sys::Reflect::has(&window, &JsValue::from_str("Notification")).unwrap_or(false) let supported = js_sys::Reflect::has(&window, &JsValue::from_str("Notification")).unwrap_or(false);
log::debug!("📢 Notification API supported: {}", supported);
supported
} }
/// Get current notification permission status /// Get current notification permission status
@@ -58,11 +60,15 @@ pub fn get_notification_permission() -> String {
pub fn show_browser_notification(title: &str, body: &str, icon: Option<&str>) -> bool { pub fn show_browser_notification(title: &str, body: &str, icon: Option<&str>) -> bool {
// Check permission first // Check permission first
let permission = get_notification_permission(); let permission = get_notification_permission();
log::info!("📢 Notification permission: {}", permission);
if permission != "granted" { if permission != "granted" {
log::warn!("Notification permission not granted: {}", permission); log::warn!("Notification permission not granted: {}", permission);
return false; return false;
} }
log::info!("✅ Permission granted, creating notification: {}", title);
// Create notification options // Create notification options
let opts = NotificationOptions::new(); let opts = NotificationOptions::new();
opts.set_body(body); opts.set_body(body);
@@ -72,20 +78,24 @@ pub fn show_browser_notification(title: &str, body: &str, icon: Option<&str>) ->
opts.set_require_interaction(false); opts.set_require_interaction(false);
opts.set_silent(Some(false)); opts.set_silent(Some(false));
log::info!("🔧 Notification options created");
// Create and show notification // Create and show notification
match Notification::new_with_options(title, &opts) { match Notification::new_with_options(title, &opts) {
Ok(notification) => { Ok(notification) => {
log::info!("Browser notification shown: {}", title); log::info!("🔔 Browser notification shown: {}", title);
let title_owned = title.to_string();
// Auto-close after 5 seconds // Auto-close after 5 seconds
let _ = gloo_timers::callback::Timeout::new(5000, move || { let _ = gloo_timers::callback::Timeout::new(5000, move || {
log::info!("⏰ Notification auto-closed: {}", title_owned);
notification.close(); notification.close();
}).forget(); }).forget();
true true
} }
Err(e) => { Err(e) => {
log::error!("Failed to create notification: {:?}", e); log::error!("Failed to create notification: {:?}", e);
false false
} }
} }
@@ -93,6 +103,8 @@ pub fn show_browser_notification(title: &str, body: &str, icon: Option<&str>) ->
/// Show notification only if enabled in settings and permission granted /// Show notification only if enabled in settings and permission granted
pub fn show_notification_if_enabled(title: &str, body: &str) -> bool { pub fn show_notification_if_enabled(title: &str, body: &str) -> bool {
log::info!("📬 Checking if notification should be shown: {}", title);
// Check localStorage for user preference // Check localStorage for user preference
let window = web_sys::window().expect("no global window"); let window = web_sys::window().expect("no global window");
let storage = window.local_storage().ok().flatten(); let storage = window.local_storage().ok().flatten();
@@ -104,9 +116,17 @@ pub fn show_notification_if_enabled(title: &str, body: &str) -> bool {
.flatten() .flatten()
.unwrap_or("true".to_string()); .unwrap_or("true".to_string());
log::info!("💾 Browser notification enabled in settings: {}", enabled);
if enabled == "true" { if enabled == "true" {
return show_browser_notification(title, body, None); let result = show_browser_notification(title, body, None);
log::info!("📬 Notification result: {}", if result { "✅ shown" } else { "❌ failed" });
return result;
} else {
log::info!("📭 Browser notifications disabled in settings");
} }
} else {
log::warn!("⚠️ localStorage not available");
} }
false false