forked from matrix/element-web
Add PWA Platform with PWA-specific badge controls
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
parent
3869a4d22e
commit
41738c322a
|
@ -31,6 +31,12 @@ declare global {
|
||||||
// https://developer.mozilla.org/en-US/docs/Web/API/InstallTrigger
|
// https://developer.mozilla.org/en-US/docs/Web/API/InstallTrigger
|
||||||
InstallTrigger: any;
|
InstallTrigger: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface Navigator {
|
||||||
|
// PWA badging extensions https://w3c.github.io/badging/
|
||||||
|
setAppBadge?(count: number): Promise<void>;
|
||||||
|
clearAppBadge?(): Promise<void>;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// add method which is missing from the node typing
|
// add method which is missing from the node typing
|
||||||
|
|
|
@ -26,6 +26,7 @@ import * as React from "react";
|
||||||
import * as languageHandler from "matrix-react-sdk/src/languageHandler";
|
import * as languageHandler from "matrix-react-sdk/src/languageHandler";
|
||||||
import SettingsStore from "matrix-react-sdk/src/settings/SettingsStore";
|
import SettingsStore from "matrix-react-sdk/src/settings/SettingsStore";
|
||||||
import ElectronPlatform from "./platform/ElectronPlatform";
|
import ElectronPlatform from "./platform/ElectronPlatform";
|
||||||
|
import PWAPlatform from "./platform/PWAPlatform";
|
||||||
import WebPlatform from "./platform/WebPlatform";
|
import WebPlatform from "./platform/WebPlatform";
|
||||||
import PlatformPeg from "matrix-react-sdk/src/PlatformPeg";
|
import PlatformPeg from "matrix-react-sdk/src/PlatformPeg";
|
||||||
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
||||||
|
@ -39,8 +40,10 @@ export const rageshakePromise = initRageshake();
|
||||||
export function preparePlatform() {
|
export function preparePlatform() {
|
||||||
if (window.ipcRenderer) {
|
if (window.ipcRenderer) {
|
||||||
console.log("Using Electron platform");
|
console.log("Using Electron platform");
|
||||||
const plaf = new ElectronPlatform();
|
PlatformPeg.set(new ElectronPlatform());
|
||||||
PlatformPeg.set(plaf);
|
} else if (window.matchMedia('(display-mode: standalone)').matches) {
|
||||||
|
console.log("Using PWA platform");
|
||||||
|
PlatformPeg.set(new PWAPlatform());
|
||||||
} else {
|
} else {
|
||||||
console.log("Using Web platform");
|
console.log("Using Web platform");
|
||||||
PlatformPeg.set(new WebPlatform());
|
PlatformPeg.set(new WebPlatform());
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
Copyright 2020 New Vector Ltd
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import WebPlatform from "./WebPlatform";
|
||||||
|
|
||||||
|
export default class PWAPlatform extends WebPlatform {
|
||||||
|
setNotificationCount(count: number) {
|
||||||
|
if (!navigator.setAppBadge) return super.setNotificationCount(count);
|
||||||
|
if (this.notificationCount === count) return;
|
||||||
|
this.notificationCount = count;
|
||||||
|
|
||||||
|
navigator.setAppBadge(count).catch(e => {
|
||||||
|
console.error("Failed to update PWA app badge", e);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue