diff --git a/.changes/permission-granted-return-val.md b/.changes/permission-granted-return-val.md new file mode 100644 index 00000000000..fdbff13486a --- /dev/null +++ b/.changes/permission-granted-return-val.md @@ -0,0 +1,5 @@ +--- +"api": patch +--- + +The notification's `isPermissionGranted` function now returns `boolean` instead of `boolean | null`. The response is never `null` because we won't check the permission for now, always returning `true` instead. diff --git a/.changes/remove-notification-permission-prompt.md b/.changes/remove-notification-permission-prompt.md new file mode 100644 index 00000000000..42037d7fa7b --- /dev/null +++ b/.changes/remove-notification-permission-prompt.md @@ -0,0 +1,5 @@ +--- +"tauri": patch +--- + +No longer ask for permission to send notifications and always allow it. diff --git a/.changes/remove-settings-module.md b/.changes/remove-settings-module.md new file mode 100644 index 00000000000..4b66360d9d2 --- /dev/null +++ b/.changes/remove-settings-module.md @@ -0,0 +1,5 @@ +--- +"tauri": patch +--- + +**Breaking change:** Removed the `settings` module. diff --git a/core/tauri/Cargo.toml b/core/tauri/Cargo.toml index f90e5d0c8dc..5dda511ec1c 100644 --- a/core/tauri/Cargo.toml +++ b/core/tauri/Cargo.toml @@ -68,7 +68,6 @@ zip = { version = "0.6", default-features = false, optional = true } ignore = "0.4" flate2 = "1.0" http = "0.2" -bincode = "1.3" dirs-next = "2.0" percent-encoding = "2.1" base64 = { version = "0.13", optional = true } diff --git a/core/tauri/src/api/error.rs b/core/tauri/src/api/error.rs index f518eeb2bd0..d722bcf6de4 100644 --- a/core/tauri/src/api/error.rs +++ b/core/tauri/src/api/error.rs @@ -53,9 +53,6 @@ pub enum Error { /// JSON error. #[error(transparent)] Json(#[from] serde_json::Error), - /// Bincode error. - #[error(transparent)] - Bincode(#[from] Box), /// IO error. #[error(transparent)] Io(#[from] std::io::Error), diff --git a/core/tauri/src/endpoints/notification.rs b/core/tauri/src/endpoints/notification.rs index f07bc142c8d..105b5940789 100644 --- a/core/tauri/src/endpoints/notification.rs +++ b/core/tauri/src/endpoints/notification.rs @@ -13,7 +13,6 @@ use tauri_macros::{command_enum, module_command_handler, CommandModule}; use crate::{api::notification::Notification, Env, Manager}; // `Granted` response from `request_permission`. Matches the Web API return value. -#[cfg(notification_all)] const PERMISSION_GRANTED: &str = "granted"; // `Denied` response from `request_permission`. Matches the Web API return value. const PERMISSION_DENIED: &str = "denied"; @@ -49,13 +48,6 @@ impl Cmd { context: InvokeContext, options: NotificationOptions, ) -> super::Result<()> { - let allowed = match is_permission_granted(&context) { - Some(p) => p, - None => request_permission(&context), - }; - if !allowed { - return Err(crate::Error::NotificationNotAllowed.into_anyhow()); - } let mut notification = Notification::new(context.config.tauri.bundle.identifier.clone()).title(options.title); if let Some(body) = options.body { @@ -68,80 +60,23 @@ impl Cmd { Ok(()) } - #[cfg(notification_all)] - fn request_notification_permission( - context: InvokeContext, - ) -> super::Result<&'static str> { - if request_permission(&context) { - Ok(PERMISSION_GRANTED) - } else { - Ok(PERMISSION_DENIED) - } - } - - #[cfg(not(notification_all))] fn request_notification_permission( _context: InvokeContext, ) -> super::Result<&'static str> { - Ok(PERMISSION_DENIED) - } - - #[cfg(notification_all)] - fn is_notification_permission_granted( - context: InvokeContext, - ) -> super::Result> { - if let Some(allow_notification) = is_permission_granted(&context) { - Ok(Some(allow_notification)) + Ok(if cfg!(notification_all) { + PERMISSION_GRANTED } else { - Ok(None) - } + PERMISSION_DENIED + }) } - #[cfg(not(notification_all))] fn is_notification_permission_granted( _context: InvokeContext, - ) -> super::Result> { - Ok(Some(false)) + ) -> super::Result { + Ok(cfg!(notification_all)) } } -#[cfg(notification_all)] -fn request_permission(context: &InvokeContext) -> bool { - let mut settings = crate::settings::read_settings( - &context.config, - &context.package_info, - context.window.state::().inner(), - ); - if let Some(allow_notification) = settings.allow_notification { - return allow_notification; - } - let answer = crate::api::dialog::blocking::ask( - Some(&context.window), - "Permissions", - "This app wants to show notifications. Do you allow?", - ); - - settings.allow_notification = Some(answer); - let _ = crate::settings::write_settings( - &context.config, - &context.package_info, - context.window.state::().inner(), - settings, - ); - - answer -} - -#[cfg(notification_all)] -fn is_permission_granted(context: &InvokeContext) -> Option { - crate::settings::read_settings( - &context.config, - &context.package_info, - context.window.state::().inner(), - ) - .allow_notification -} - #[cfg(test)] mod tests { use super::NotificationOptions; @@ -163,16 +98,21 @@ mod tests { fn request_notification_permission() { assert_eq!( super::Cmd::request_notification_permission(crate::test::mock_invoke_context()).unwrap(), - super::PERMISSION_DENIED + if cfg!(notification_all) { + super::PERMISSION_GRANTED + } else { + super::PERMISSION_DENIED + } ) } #[cfg(not(notification_all))] #[test] fn is_notification_permission_granted() { + let expected = cfg!(notification_all); assert_eq!( super::Cmd::is_notification_permission_granted(crate::test::mock_invoke_context()).unwrap(), - Some(false) + expected, ); } diff --git a/core/tauri/src/lib.rs b/core/tauri/src/lib.rs index 5c2b0e14030..40de769ada3 100644 --- a/core/tauri/src/lib.rs +++ b/core/tauri/src/lib.rs @@ -172,7 +172,6 @@ pub mod window; use tauri_runtime as runtime; /// The allowlist scopes. pub mod scope; -pub mod settings; mod state; #[cfg(updater)] #[cfg_attr(doc_cfg, doc(cfg(feature = "updater")))] diff --git a/core/tauri/src/settings.rs b/core/tauri/src/settings.rs deleted file mode 100644 index f61b15e71aa..00000000000 --- a/core/tauri/src/settings.rs +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2019-2021 Tauri Programme within The Commons Conservancy -// SPDX-License-Identifier: Apache-2.0 -// SPDX-License-Identifier: MIT - -//! The Tauri-specific settings for your application. -//! -//! This only contains notification permission status for now, but is able to expand in the future. - -use crate::{ - api::{ - file::read_binary, - path::{resolve_path, BaseDirectory}, - }, - Config, Env, PackageInfo, -}; -use serde::{Deserialize, Serialize}; -use std::{ - fs::File, - io::Write, - path::{Path, PathBuf}, -}; - -/// The Tauri Settings. -#[derive(Debug, Clone, Default, Deserialize, Serialize)] -#[non_exhaustive] -pub struct Settings { - /// Whether the user allows notifications or not. - #[cfg(notification_all)] - pub allow_notification: Option, -} - -/// Gets the path to the settings file. -fn get_settings_path( - config: &Config, - package_info: &PackageInfo, - env: &Env, -) -> crate::api::Result { - resolve_path( - config, - package_info, - env, - ".tauri-settings", - Some(BaseDirectory::App), - ) -} - -/// Write the settings to the file system. -#[allow(dead_code)] -pub(crate) fn write_settings( - config: &Config, - package_info: &PackageInfo, - env: &Env, - settings: Settings, -) -> crate::Result<()> { - let settings_path = get_settings_path(config, package_info, env)?; - let settings_folder = Path::new(&settings_path).parent().unwrap(); - if !settings_folder.exists() { - std::fs::create_dir(settings_folder)?; - } - File::create(settings_path) - .map_err(Into::into) - .and_then(|mut f| { - f.write_all(&bincode::serialize(&settings).map_err(crate::api::Error::Bincode)?) - .map_err(Into::into) - }) -} - -/// Reads the settings from the file system. -pub fn read_settings(config: &Config, package_info: &PackageInfo, env: &Env) -> Settings { - if let Ok(settings_path) = get_settings_path(config, package_info, env) { - if settings_path.exists() { - read_binary(settings_path) - .and_then(|settings| bincode::deserialize(&settings).map_err(Into::into)) - .unwrap_or_default() - } else { - Settings::default() - } - } else { - Settings::default() - } -} diff --git a/examples/api/src-tauri/Cargo.lock b/examples/api/src-tauri/Cargo.lock index 4902efa695e..6be38eaf7eb 100644 --- a/examples/api/src-tauri/Cargo.lock +++ b/examples/api/src-tauri/Cargo.lock @@ -172,15 +172,6 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - [[package]] name = "bitflags" version = "1.3.2" @@ -3052,7 +3043,6 @@ dependencies = [ "anyhow", "attohttpc", "base64", - "bincode", "bytes", "clap", "cocoa", diff --git a/tooling/api/src/notification.ts b/tooling/api/src/notification.ts index 744b6e75606..f7d9245cb48 100644 --- a/tooling/api/src/notification.ts +++ b/tooling/api/src/notification.ts @@ -46,7 +46,7 @@ type Permission = 'granted' | 'denied' | 'default' * * @returns */ -async function isPermissionGranted(): Promise { +async function isPermissionGranted(): Promise { if (window.Notification.permission !== 'default') { return Promise.resolve(window.Notification.permission === 'granted') }