forked from CringeStudios/gamja
Add Notification workaround for Chrome on Android
Closes: https://todo.sr.ht/~emersion/gamja/78
This commit is contained in:
parent
a952742d86
commit
63773f99ee
@ -88,6 +88,21 @@ function debounce(f, delay) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showNotification(title, options) {
|
||||||
|
if (!window.Notification || Notification.permission !== "granted") {
|
||||||
|
return new EventTarget();
|
||||||
|
}
|
||||||
|
|
||||||
|
// This can still fail due to:
|
||||||
|
// https://bugs.chromium.org/p/chromium/issues/detail?id=481856
|
||||||
|
try {
|
||||||
|
return new Notification(title, options);
|
||||||
|
} catch (err) {
|
||||||
|
console.error("Failed to show notification: ", err);
|
||||||
|
return new EventTarget();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export default class App extends Component {
|
export default class App extends Component {
|
||||||
state = {
|
state = {
|
||||||
connectParams: {
|
connectParams: {
|
||||||
@ -345,12 +360,12 @@ export default class App extends Component {
|
|||||||
msgUnread = Unread.MESSAGE;
|
msgUnread = Unread.MESSAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msgUnread == Unread.HIGHLIGHT && window.Notification && Notification.permission === "granted" && !isDelivered && !irc.parseCTCP(msg)) {
|
if (msgUnread == Unread.HIGHLIGHT && !isDelivered && !irc.parseCTCP(msg)) {
|
||||||
var title = "New " + kind + " from " + msg.prefix.name;
|
var title = "New " + kind + " from " + msg.prefix.name;
|
||||||
if (client.isChannel(bufName)) {
|
if (client.isChannel(bufName)) {
|
||||||
title += " in " + bufName;
|
title += " in " + bufName;
|
||||||
}
|
}
|
||||||
var notif = new Notification(title, {
|
var notif = showNotification(title, {
|
||||||
body: stripANSI(text),
|
body: stripANSI(text),
|
||||||
requireInteraction: true,
|
requireInteraction: true,
|
||||||
});
|
});
|
||||||
@ -364,25 +379,23 @@ export default class App extends Component {
|
|||||||
msgUnread = Unread.HIGHLIGHT;
|
msgUnread = Unread.HIGHLIGHT;
|
||||||
|
|
||||||
var channel = msg.params[1];
|
var channel = msg.params[1];
|
||||||
if (window.Notification && Notification.permission === "granted") {
|
var notif = new Notification("Invitation to " + channel, {
|
||||||
var notif = new Notification("Invitation to " + channel, {
|
body: msg.prefix.name + " has invited you to " + channel,
|
||||||
body: msg.prefix.name + " has invited you to " + channel,
|
requireInteraction: true,
|
||||||
requireInteraction: true,
|
actions: [{
|
||||||
actions: [{
|
action: "accept",
|
||||||
action: "accept",
|
title: "Accept",
|
||||||
title: "Accept",
|
}],
|
||||||
}],
|
});
|
||||||
});
|
notif.addEventListener("click", (event) => {
|
||||||
notif.addEventListener("click", (event) => {
|
if (event.action === "accept") {
|
||||||
if (event.action === "accept") {
|
this.setReceipt(bufName, ReceiptType.READ, msg);
|
||||||
this.setReceipt(bufName, ReceiptType.READ, msg);
|
this.open(channel, serverID);
|
||||||
this.open(channel, serverID);
|
} else {
|
||||||
} else {
|
// TODO: scroll to message
|
||||||
// TODO: scroll to message
|
this.switchBuffer({ server: serverID, name: bufName });
|
||||||
this.switchBuffer({ server: serverID, name: bufName });
|
}
|
||||||
}
|
});
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!client.isMyNick(msg.prefix.name) && (msg.command != "PART" && msg.comand != "QUIT")) {
|
if (!client.isMyNick(msg.prefix.name) && (msg.command != "PART" && msg.comand != "QUIT")) {
|
||||||
|
@ -306,6 +306,21 @@ class FoldGroup extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=481856
|
||||||
|
var notificationsSupported = false;
|
||||||
|
if (window.Notification) {
|
||||||
|
notificationsSupported = true;
|
||||||
|
if (Notification.permission === "default") {
|
||||||
|
try {
|
||||||
|
new Notification("");
|
||||||
|
} catch (err) {
|
||||||
|
if (err.name === "TypeError") {
|
||||||
|
notificationsSupported = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class NotificationNagger extends Component {
|
class NotificationNagger extends Component {
|
||||||
state = { nag: false };
|
state = { nag: false };
|
||||||
|
|
||||||
@ -318,7 +333,7 @@ class NotificationNagger extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
shouldNag() {
|
shouldNag() {
|
||||||
return window.Notification && Notification.permission !== "granted" && Notification.permission !== "denied";
|
return notificationsSupported && Notification.permission === "default";
|
||||||
}
|
}
|
||||||
|
|
||||||
handleClick(event) {
|
handleClick(event) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user