merge next

This commit is contained in:
or-else
2023-01-09 11:56:46 -08:00
7 changed files with 90 additions and 87 deletions
+2 -2
View File
@@ -111,8 +111,8 @@ self.addEventListener('notificationclick', event => {
event.waitUntil(self.clients.matchAll({ event.waitUntil(self.clients.matchAll({
type: 'window', type: 'window',
includeUncontrolled: true includeUncontrolled: true})
}).then(windowClients => { .then(windowClients => {
let anyClient = null; let anyClient = null;
for (let i = 0; i < windowClients.length; i++) { for (let i = 0; i < windowClients.length; i++) {
const url = new URL(windowClients[i].url); const url = new URL(windowClients[i].url);
+21 -15
View File
@@ -306,11 +306,7 @@ class TinodeWeb extends React.Component {
}).then(_ => { }).then(_ => {
// Initialize desktop alerts. // Initialize desktop alerts.
if (this.state.desktopAlertsEnabled) { if (this.state.desktopAlertsEnabled) {
this.initFCMessaging().then(_ => { this.initFCMessaging().catch(_ => {
if (this.state.desktopAlerts) {
this.tinode.setDeviceToken(this.state.firebaseToken);
}
}).catch(_ => {
// do nothing: handled earlier. // do nothing: handled earlier.
// catch needed to pervent unnecessary logging of error. // catch needed to pervent unnecessary logging of error.
}); });
@@ -377,20 +373,23 @@ class TinodeWeb extends React.Component {
const onError = (msg, err) => { const onError = (msg, err) => {
console.error(msg, err); console.error(msg, err);
this.handleError(formatMessage(messages.push_init_failed), 'err'); this.handleError(formatMessage(messages.push_init_failed), 'err');
this.setState({desktopAlertsEnabled: false, firebaseToken: null}); this.setState({firebaseToken: null});
LocalStorageUtil.updateObject('settings', {desktopAlerts: false}); LocalStorageUtil.updateObject('settings', {desktopAlerts: false});
} }
try { try {
this.fcm = firebaseGetMessaging(firebaseInitApp(FIREBASE_INIT, APP_NAME)); this.fcm = firebaseGetMessaging(firebaseInitApp(FIREBASE_INIT, APP_NAME));
return navigator.serviceWorker.register('/service-worker.js').then((reg) => { return navigator.serviceWorker.getRegistration('/service-worker.js').then(reg => {
return reg || navigator.serviceWorker.register('/service-worker.js').then(reg => {
this.checkForAppUpdate(reg); this.checkForAppUpdate(reg);
reg.active.postMessage(JSON.stringify({locale: locale, version: PACKAGE_VERSION}));
return reg; return reg;
}).then((reg) => { });
}).then(reg => {
// Pass locale and version config to the service worker.
(reg.active || reg.installing).postMessage(JSON.stringify({locale: locale, version: PACKAGE_VERSION}));
// Request token. // Request token.
return TinodeWeb.requestFCMToken(this.fcm, reg); return TinodeWeb.requestFCMToken(this.fcm, reg);
}).then((token) => { }).then(token => {
const persist = LocalStorageUtil.getObject('keep-logged-in'); const persist = LocalStorageUtil.getObject('keep-logged-in');
if (token != this.state.firebaseToken) { if (token != this.state.firebaseToken) {
this.tinode.setDeviceToken(token); this.tinode.setDeviceToken(token);
@@ -406,7 +405,7 @@ class TinodeWeb extends React.Component {
// Handhe FCM pushes // Handhe FCM pushes
// (a) for channels always, // (a) for channels always,
// (b) pushes when the app is in foreground but has no focus. // (b) pushes when the app is in foreground but has no focus.
firebaseOnMessage(this.fcm, (payload) => { this.handlePushMessage(payload); }); firebaseOnMessage(this.fcm, payload => { this.handlePushMessage(payload); });
}).catch(err => { }).catch(err => {
// SW registration or FCM has failed :( // SW registration or FCM has failed :(
onError(err); onError(err);
@@ -423,17 +422,17 @@ class TinodeWeb extends React.Component {
return firebaseGetToken(fcm, { return firebaseGetToken(fcm, {
serviceWorkerRegistration: sw, serviceWorkerRegistration: sw,
vapidKey: FIREBASE_INIT.messagingVapidKey vapidKey: FIREBASE_INIT.messagingVapidKey
}).then((token) => { }).then(token => {
if (token) { if (token) {
return token; return token;
} else { } else {
// Try to request permissions. // Try to request permissions.
return Notification.requestPermission().then((permission) => { return Notification.requestPermission().then(permission => {
if (permission === 'granted') { if (permission === 'granted') {
return firebaseGetToken(fcm, { return firebaseGetToken(fcm, {
serviceWorkerRegistration: reg, serviceWorkerRegistration: reg,
vapidKey: FIREBASE_INIT.messagingVapidKey vapidKey: FIREBASE_INIT.messagingVapidKey
}).then((token) => { }).then(token => {
if (token) { if (token) {
return token; return token;
} else { } else {
@@ -583,6 +582,12 @@ class TinodeWeb extends React.Component {
this.handleError(err.message, 'err'); this.handleError(err.message, 'err');
}); });
} }
if (this.state.desktopAlertsEnabled && !this.state.firebaseToken) {
// Firefox and Safari: "The Notification permission may only be requested from inside a
// short running user-generated event handler".
this.initFCMessaging();
}
} }
// Enable or disable saving the password and IndexedDB. // Enable or disable saving the password and IndexedDB.
@@ -1944,6 +1949,7 @@ class TinodeWeb extends React.Component {
: :
null null
} }
{this.state.alertVisible ?
<Alert <Alert
visible={this.state.alertVisible} visible={this.state.alertVisible}
title={this.state.alertParams.title} title={this.state.alertParams.title}
@@ -1952,7 +1958,7 @@ class TinodeWeb extends React.Component {
reject={this.state.alertParams.reject} reject={this.state.alertParams.reject}
onConfirm={_ => {this.setState({alertVisible: false}); this.state.alertParams.onConfirm();}} onConfirm={_ => {this.setState({alertVisible: false}); this.state.alertParams.onConfirm();}}
confirm={this.state.alertParams.confirm} confirm={this.state.alertParams.confirm}
/> /> : null}
<SidepanelView <SidepanelView
tinode={this.tinode} tinode={this.tinode}
connected={this.state.connected} connected={this.state.connected}
-3
View File
@@ -3,7 +3,6 @@ import { FormattedMessage } from 'react-intl';
export default class Alert extends React.PureComponent { export default class Alert extends React.PureComponent {
render() { render() {
return this.props.visible ?
<div className="alert-container"> <div className="alert-container">
<div className="alert"> <div className="alert">
<div className="title">{this.props.title}</div> <div className="title">{this.props.title}</div>
@@ -22,7 +21,5 @@ export default class Alert extends React.PureComponent {
</div> </div>
</div> </div>
</div> </div>
:
null;
} }
}; };
+14 -14
View File
@@ -7971,11 +7971,7 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
this.tinode.onDataMessage = this.handleDataMessage; this.tinode.onDataMessage = this.handleDataMessage;
}).then(_ => { }).then(_ => {
if (this.state.desktopAlertsEnabled) { if (this.state.desktopAlertsEnabled) {
this.initFCMessaging().then(_ => { this.initFCMessaging().catch(_ => {});
if (this.state.desktopAlerts) {
this.tinode.setDeviceToken(this.state.firebaseToken);
}
}).catch(_ => {});
} }
const parsedNav = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_18__["default"].parseUrlHash(window.location.hash); const parsedNav = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_18__["default"].parseUrlHash(window.location.hash);
this.resetContactList(); this.resetContactList();
@@ -8033,7 +8029,6 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
console.error(msg, err); console.error(msg, err);
this.handleError(formatMessage(messages.push_init_failed), 'err'); this.handleError(formatMessage(messages.push_init_failed), 'err');
this.setState({ this.setState({
desktopAlertsEnabled: false,
firebaseToken: null firebaseToken: null
}); });
_lib_local_storage_js__WEBPACK_IMPORTED_MODULE_17__["default"].updateObject('settings', { _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_17__["default"].updateObject('settings', {
@@ -8042,14 +8037,16 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
}; };
try { try {
this.fcm = (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.getMessaging)((0,firebase_app__WEBPACK_IMPORTED_MODULE_2__.initializeApp)(FIREBASE_INIT, _config_js__WEBPACK_IMPORTED_MODULE_12__.APP_NAME)); this.fcm = (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.getMessaging)((0,firebase_app__WEBPACK_IMPORTED_MODULE_2__.initializeApp)(FIREBASE_INIT, _config_js__WEBPACK_IMPORTED_MODULE_12__.APP_NAME));
return navigator.serviceWorker.register('/service-worker.js').then(reg => { return navigator.serviceWorker.getRegistration('/service-worker.js').then(reg => {
return reg || navigator.serviceWorker.register('/service-worker.js').then(reg => {
this.checkForAppUpdate(reg); this.checkForAppUpdate(reg);
reg.active.postMessage(JSON.stringify({ return reg;
});
}).then(reg => {
(reg.active || reg.installing).postMessage(JSON.stringify({
locale: locale, locale: locale,
version: _version_js__WEBPACK_IMPORTED_MODULE_14__.PACKAGE_VERSION version: _version_js__WEBPACK_IMPORTED_MODULE_14__.PACKAGE_VERSION
})); }));
return reg;
}).then(reg => {
return TinodeWeb.requestFCMToken(this.fcm, reg); return TinodeWeb.requestFCMToken(this.fcm, reg);
}).then(token => { }).then(token => {
const persist = _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_17__["default"].getObject('keep-logged-in'); const persist = _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_17__["default"].getObject('keep-logged-in');
@@ -8239,6 +8236,9 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
this.handleError(err.message, 'err'); this.handleError(err.message, 'err');
}); });
} }
if (this.state.desktopAlertsEnabled && !this.state.firebaseToken) {
this.initFCMessaging();
}
} }
handlePersistenceChange(persist) { handlePersistenceChange(persist) {
if (persist) { if (persist) {
@@ -9413,7 +9413,7 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
onRinging: this.handleCallRinging, onRinging: this.handleCallRinging,
onAcceptCall: this.handleCallAccept, onAcceptCall: this.handleCallAccept,
onReject: this.handleCallHangup onReject: this.handleCallHangup
}) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_alert_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { }) : null, this.state.alertVisible ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_alert_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
visible: this.state.alertVisible, visible: this.state.alertVisible,
title: this.state.alertParams.title, title: this.state.alertParams.title,
content: this.state.alertParams.content, content: this.state.alertParams.content,
@@ -9428,7 +9428,7 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
this.state.alertParams.onConfirm(); this.state.alertParams.onConfirm();
}, },
confirm: this.state.alertParams.confirm confirm: this.state.alertParams.confirm
}), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_sidepanel_view_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], { }) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_sidepanel_view_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], {
tinode: this.tinode, tinode: this.tinode,
connected: this.state.connected, connected: this.state.connected,
displayMobile: this.state.displayMobile, displayMobile: this.state.displayMobile,
@@ -9745,7 +9745,7 @@ __webpack_require__.r(__webpack_exports__);
class Alert extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) { class Alert extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
render() { render() {
return this.props.visible ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
className: "alert-container" className: "alert-container"
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
className: "alert" className: "alert"
@@ -9773,7 +9773,7 @@ class Alert extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent)
"type": 0, "type": 0,
"value": "OK" "value": "OK"
}] }]
}))))) : null; })))));
} }
} }
; ;
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long