Форк Rambox
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

126 lines
3.4 KiB

/**
* This file is loaded in the service web views to provide a Rambox API.
*/
const { desktopCapturer, ipcRenderer } = require("electron");
require("./darkreader.js")
const { ipcRenderer } = require('electron');
const { ContextMenuBuilder, ContextMenuListener } = require('electron-contextmenu-wrapper');
/**
* Make the Rambox API available via a global "rambox" variable.
*
* @type {{}}
*/
window.rambox = {};
/**
* Sets the unread count of the tab.
*
* @param {*} count The unread count
*/
window.rambox.setUnreadCount = function (count) {
ipcRenderer.sendToHost("rambox.setUnreadCount", count);
};
/**
* Clears the unread count.
*/
window.rambox.clearUnreadCount = function () {
ipcRenderer.sendToHost("rambox.clearUnreadCount");
};
/**
* Override to add notification click event to display Rambox window and activate service tab
*/
var NativeNotification = Notification;
Notification = function (title, options) {
var notification = new NativeNotification(title, options);
notification.addEventListener("click", function () {
ipcRenderer.sendToHost("rambox.showWindowAndActivateTab");
});
//It seems that gmail is checking if such event handler func are available. Just remplacing them by a void function that is always returning true is making the thing right!
notification.addEventListener = function () {
return true;
};
notification.attachEvent = function () {
return true;
};
notification.addListener = function () {
return true;
};
return notification;
};
Notification.prototype = NativeNotification.prototype;
Notification.permission = NativeNotification.permission;
Notification.requestPermission = NativeNotification.requestPermission.bind(
Notification
);
window.rambox.contextMenuBuilder = new ContextMenuBuilder();
window.rambox.contextMenuListener = new ContextMenuListener(function (
event,
info
) {
window.rambox.contextMenuBuilder.showPopupMenu(info);
});
const mousetrap = require("mousetrap");
mousetrap.bind(
process.platform === "darwin"
? ["command+left", "command+right"]
: ["alt+left", "alt+right"],
(e) => {
if (location.href.indexOf("slack.com") !== -1) return;
e.key === "ArrowLeft" ? history.back() : history.forward();
}
);
// ScreenShare
window.navigator.mediaDevices.getDisplayMedia = () =>
new Promise(async (resolve, reject) => {
try {
const sources = await desktopCapturer.getSources({
types: ["screen", "window"],
});
const unlisten = () => {
ipcRenderer.removeAllListeners("screenShare:cancel");
ipcRenderer.removeAllListeners("screenShare:share");
};
ipcRenderer.on("screenShare:cancel", () => {
unlisten();
reject(new Error("Cancelled by user"));
});
ipcRenderer.on("screenShare:share", (_, shareId) => {
unlisten();
window.navigator.mediaDevices
.getUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: "desktop",
chromeMediaSourceId: shareId,
},
},
})
.then((stream) => resolve(stream));
});
const mappedSources = sources.map((it) => ({
id: it.id,
name: it.name,
thumbnail: it.thumbnail.toDataURL(),
}));
ipcRenderer.send("screenShare:show", mappedSources);
} catch (err) {
reject(err);
}
});