Add PWA Platform with PWA-specific badge controls

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
Michael Telatynski 2020-06-02 16:58:05 +01:00
parent 3869a4d22e
commit 41738c322a
3 changed files with 40 additions and 2 deletions

View File

@ -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

View File

@ -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());

View File

@ -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);
});
}
}