From fbe8bd69ac5c184b95736979e990e5595a49b8b1 Mon Sep 17 00:00:00 2001 From: Lucas Nogueira Date: Thu, 27 Apr 2023 12:58:09 -0300 Subject: [PATCH] move logic to init script --- plugins/notification/guest-js/index.ts | 76 -------------------------- plugins/notification/src/init.js | 71 ++++++++++++++++++++++++ plugins/notification/src/lib.rs | 1 + 3 files changed, 72 insertions(+), 76 deletions(-) create mode 100644 plugins/notification/src/init.js diff --git a/plugins/notification/guest-js/index.ts b/plugins/notification/guest-js/index.ts index 6752de44..a480105b 100644 --- a/plugins/notification/guest-js/index.ts +++ b/plugins/notification/guest-js/index.ts @@ -26,82 +26,6 @@ import { invoke } from '@tauri-apps/api/tauri' -type PermissionState = 'granted' | 'denied' - - ; (function () { - let permissionSettable = false - let permissionValue = 'default' - - function isPermissionGranted() { - if (window.Notification.permission !== 'default') { - return Promise.resolve(window.Notification.permission === 'granted') - } - return invoke('plugin:notification|is_permission_granted') - } - - function setNotificationPermission(value: 'default' | PermissionState) { - permissionSettable = true - // @ts-expect-error we can actually set this value on the webview - window.Notification.permission = value - permissionSettable = false - } - - function requestPermission() { - return invoke('plugin:notification|request_permission') - .then(function (permission) { - setNotificationPermission(permission) - return permission - }) - } - - function sendNotification(options: Options) { - if (typeof options === 'object') { - Object.freeze(options) - } - - return invoke('plugin:notification|notify', { - options: typeof options === 'string' - ? { - title: options - } - : options - }) - } - - // @ts-expect-error unfortunately we can't implement the whole type, so we overwrite it with our own version - window.Notification = function (title, options) { - const opts = options || {} - sendNotification( - Object.assign(opts, { - title: title - }) - ) - } - - window.Notification.requestPermission = requestPermission - - Object.defineProperty(window.Notification, 'permission', { - enumerable: true, - get: function () { - return permissionValue - }, - set: function (v) { - if (!permissionSettable) { - throw new Error('Readonly property') - } - permissionValue = v - } - }) - - isPermissionGranted().then(function (response) { - if (response === null) { - setNotificationPermission('default') - } else { - setNotificationPermission(response ? 'granted' : 'denied') - } - }) - })() - /** * Options to send a notification. * diff --git a/plugins/notification/src/init.js b/plugins/notification/src/init.js new file mode 100644 index 00000000..105a7f9b --- /dev/null +++ b/plugins/notification/src/init.js @@ -0,0 +1,71 @@ +(function () { + let permissionSettable = false + let permissionValue = 'default' + + function isPermissionGranted() { + if (window.Notification.permission !== 'default') { + return Promise.resolve(window.Notification.permission === 'granted') + } + return __TAURI__.invoke('plugin:notification|is_permission_granted') + } + + function setNotificationPermission(value) { + permissionSettable = true + // @ts-expect-error we can actually set this value on the webview + window.Notification.permission = value + permissionSettable = false + } + + function requestPermission() { + return __TAURI__.invoke('plugin:notification|request_permission') + .then(function (permission) { + setNotificationPermission(permission) + return permission + }) + } + + function sendNotification(options) { + if (typeof options === 'object') { + Object.freeze(options) + } + + return __TAURI__.invoke('plugin:notification|notify', { + options: typeof options === 'string' + ? { + title: options + } + : options + }) + } + + // @ts-expect-error unfortunately we can't implement the whole type, so we overwrite it with our own version + window.Notification = function (title, options) { + const opts = options || {} + sendNotification( + Object.assign(opts, { title }) + ) + } + + window.Notification.requestPermission = requestPermission + + Object.defineProperty(window.Notification, 'permission', { + enumerable: true, + get: function () { + return permissionValue + }, + set: function (v) { + if (!permissionSettable) { + throw new Error('Readonly property') + } + permissionValue = v + } + }) + + isPermissionGranted().then(function (response) { + if (response === null) { + setNotificationPermission('default') + } else { + setNotificationPermission(response ? 'granted' : 'denied') + } + }) +})() diff --git a/plugins/notification/src/lib.rs b/plugins/notification/src/lib.rs index 8ade2761..cb63758a 100644 --- a/plugins/notification/src/lib.rs +++ b/plugins/notification/src/lib.rs @@ -105,6 +105,7 @@ pub fn init() -> TauriPlugin { commands::request_permission, commands::is_permission_granted ]) + .js_init_script(include_str!("init.js").into()) .setup(|app, api| { #[cfg(mobile)] let notification = mobile::init(app, api)?;