Refine more about desktop capturer API.
* Simplify the coffeescript code. * Add more options in desktopCapturer.startUpdating.
This commit is contained in:
parent
1e69ef79de
commit
36c0ad7fda
8 changed files with 104 additions and 84 deletions
|
@ -1,10 +1,8 @@
|
|||
ipc = require 'ipc'
|
||||
BrowserWindow = require 'browser-window'
|
||||
EventEmitter = require('events').EventEmitter
|
||||
|
||||
# The browser module manages all desktop-capturer moduels in renderer process.
|
||||
desktopCapturer = process.atomBinding('desktop_capturer').desktopCapturer
|
||||
desktopCapturer.__proto__ = EventEmitter.prototype
|
||||
|
||||
getWebContentsFromId = (id) ->
|
||||
windows = BrowserWindow.getAllWindows()
|
||||
|
@ -15,28 +13,26 @@ webContentsIds = new Set
|
|||
|
||||
stopDesktopCapture = (id) ->
|
||||
webContentsIds.delete id
|
||||
# Stop updating if no renderer process listens the desktop capturer.
|
||||
if webContentsIds.size is 0
|
||||
desktopCapturer.stopUpdating()
|
||||
|
||||
ipc.on 'ATOM_BROWSER_DESKTOP_CAPTURER_REQUIRED', (event) ->
|
||||
id = event.sender.getId()
|
||||
# Remove the tracked webContents when it is destroyed.
|
||||
getWebContentsFromId(id).on 'destroyed', ()->
|
||||
stopDesktopCapture id
|
||||
event.returnValue = 'done'
|
||||
|
||||
# Handle `desktopCapturer.startUpdating` API.
|
||||
ipc.on 'ATOM_BROWSER_DESKTOP_CAPTURER_START_UPDATING', (event, args) ->
|
||||
id = event.sender.getId()
|
||||
if not webContentsIds.has id
|
||||
# Stop sending desktop capturer events to the destroyed webContents.
|
||||
event.sender.on 'destroyed', ()->
|
||||
stopDesktopCapture id
|
||||
# Start updating the desktopCapturer if it doesn't.
|
||||
if webContentsIds.size is 0
|
||||
desktopCapturer.startUpdating args
|
||||
webContentsIds.add id
|
||||
desktopCapturer.startUpdating args
|
||||
|
||||
# Handle `desktopCapturer.stopUpdating` API.
|
||||
ipc.on 'ATOM_BROWSER_DESKTOP_CAPTURER_STOP_UPDATING', (event) ->
|
||||
stopDesktopCapture event.sender.getId()
|
||||
|
||||
for event_name in ['source-added', 'source-removed', 'source-name-changed', "source-thumbnail-changed"]
|
||||
do (event_name) ->
|
||||
desktopCapturer.on event_name, (event, source) ->
|
||||
webContentsIds.forEach (id) ->
|
||||
getWebContentsFromId(id).send event_name, { id: source.id, name: source.name, dataUrl: source.thumbnail.toDataUrl() }
|
||||
desktopCapturer.emit = (event_name, event, desktopId, name, thumbnail) ->
|
||||
webContentsIds.forEach (id) ->
|
||||
getWebContentsFromId(id).send 'ATOM_RENDERER_DESKTOP_CAPTURER', event_name, desktopId, name, thumbnail?.toDataUrl()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue