mirror of
https://github.com/zero-peak/ZeroOmega.git
synced 2025-01-23 15:28:12 -05:00
63 lines
2.0 KiB
CoffeeScript
63 lines
2.0 KiB
CoffeeScript
|
OmegaTarget = require('omega-target')
|
||
|
OmegaPac = OmegaTarget.OmegaPac
|
||
|
Promise = OmegaTarget.Promise
|
||
|
|
||
|
module.exports = class ExternalApi
|
||
|
constructor: (options) ->
|
||
|
@options = options
|
||
|
knownExts:
|
||
|
'padekgcemlokbadohgkifijomclgjgif': 32
|
||
|
disabled: false
|
||
|
listen: ->
|
||
|
chrome.runtime.onConnectExternal.addListener (port) =>
|
||
|
port.onMessage.addListener (msg) => @onMessage(msg, port)
|
||
|
port.onDisconnect.addListener @reenable.bind(this)
|
||
|
|
||
|
_previousProfileName: null
|
||
|
|
||
|
reenable: ->
|
||
|
return unless @disabled
|
||
|
|
||
|
@options.setProxyNotControllable(null)
|
||
|
chrome.browserAction.setPopup({popup: 'popup.html'})
|
||
|
@options.reloadQuickSwitch()
|
||
|
@disabled = false
|
||
|
@options.clearBadge()
|
||
|
@options.applyProfile(@_previousProfileName)
|
||
|
|
||
|
checkPerm: (port, level) ->
|
||
|
perm = @knownExts[port.sender.id] || 0
|
||
|
if perm < level
|
||
|
port.postMessage({action: 'error', error: 'permission'})
|
||
|
false
|
||
|
else
|
||
|
true
|
||
|
|
||
|
onMessage: (msg, port) ->
|
||
|
@options.log.log("#{port.sender.id} -> #{msg.action}", msg)
|
||
|
switch msg.action
|
||
|
when 'disable'
|
||
|
return unless @checkPerm(port, 16)
|
||
|
return if @disabled
|
||
|
@disabled = true
|
||
|
@_previousProfileName = @options.currentProfile()?.name || 'system'
|
||
|
@options.applyProfile('system').then =>
|
||
|
reason = 'disabled'
|
||
|
if @knownExts[port.sender.id] >= 32
|
||
|
reason = 'upgrade'
|
||
|
@options.setProxyNotControllable reason, {text: 'X', color: '#5ab432'}
|
||
|
chrome.browserAction.setPopup({popup: 'popup.html'})
|
||
|
port.postMessage({action: 'state', state: 'disabled'})
|
||
|
when 'enable'
|
||
|
@reenable()
|
||
|
port.postMessage({action: 'state', state: 'enabled'})
|
||
|
when 'getOptions'
|
||
|
return unless @checkPerm(port, 8)
|
||
|
port.postMessage({action: 'options', options: @options.getAll()})
|
||
|
else
|
||
|
port.postMessage(
|
||
|
action: 'error'
|
||
|
error: 'noSuchAction'
|
||
|
action_name: msg.action
|
||
|
)
|