blob: 0fd5253ff26e1950d762f4d22988ed6e2800c181 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
"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 = `
<div class="desktop-capturer-selection__scroller">
<ul class="desktop-capturer-selection__list">
${sources.map(({ id, name, thumbnail, display_id, appIcon }) => `
<li class="desktop-capturer-selection__item">
<button class="desktop-capturer-selection__btn" data-id="${id}" title="${name}">
<img class="desktop-capturer-selection__thumbnail" src="${thumbnail.toDataURL()}" />
<span class="desktop-capturer-selection__name">${name}</span>
</button>
</li>
`).join('')}
</ul>
</div>
`;
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;
}
}
Franz.setBadge(messages);
};
Franz.injectCSS(path.join(__dirname, 'service.css'));
Franz.loop(getMessages);
};
|