move logic to init script

pull/326/head
Lucas Nogueira 2 years ago
parent 510723f3d6
commit fbe8bd69ac
No known key found for this signature in database
GPG Key ID: 7C32FCA95C8C95D7

@ -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<PermissionState>('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.
*

@ -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')
}
})
})()

@ -105,6 +105,7 @@ pub fn init<R: Runtime>() -> TauriPlugin<R> {
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)?;

Loading…
Cancel
Save