"use strict";
const { desktopCapturer } = require('electron');
const path = require('path');
window.navigator.mediaDevices.getDisplayMedia = () => {
return new Promise(async (resolve, reject) => {
try {
const sources = await desktopCapturer.getSources({ types: ['screen', 'window'] });
const selectionElem = document.createElement('div');
selectionElem.classList = 'desktop-capturer-selection';
selectionElem.innerHTML = `
`;
document.body.appendChild(selectionElem);
document.querySelectorAll('.desktop-capturer-selection__btn')
.forEach(button => {
button.addEventListener('click', async () => {
try {
const id = button.getAttribute('data-id');
const source = sources.find(source => source.id === id);
if (!source) {
throw new Error(`Source with id ${id} does not exist`);
}
const stream = await window.navigator.mediaDevices.getUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: source.id
}
}
});
resolve(stream);
selectionElem.remove();
} catch (err) {
reject(err);
}
});
});
} catch (err) {
reject(err);
}
})
}
window.electronSafeIpc = {
send: () => null,
on: () => null
};
window.desktop = undefined;
module.exports = Franz => {
const getMessages = () => {
let messages = 0;
const badge = document.querySelector('.activity-badge.dot-activity-badge .activity-badge');
if (badge) {
const value = parseInt(badge.innerHTML, 10);
if (!isNaN(value)) {
messages = value;
}
}
const indirectMessages = document.querySelectorAll("[class*=channel-anchor][class*=ts-unread-channel]").length;
Franz.setBadge(messages, indirectMessages);
};
Franz.injectCSS(path.join(__dirname, 'service.css'));
Franz.loop(getMessages);
};