247 lines
6 KiB
Lua
247 lines
6 KiB
Lua
local constants = require 'constants'
|
|
local settings = require 'config.settings'
|
|
|
|
local popupWidth <const> = settings.dimens.graphics.popup.width + 20
|
|
|
|
sbar.exec 'killall sk-network-load >/dev/null; sk-network-load en0 network_update 2.0'
|
|
|
|
local wifiUp = sbar.add('item', constants.items.WIFI .. '.up', {
|
|
position = 'right',
|
|
width = 0,
|
|
icon = {
|
|
padding_left = 0,
|
|
padding_right = 0,
|
|
font = {
|
|
style = settings.fonts.styles.bold,
|
|
size = 10.0,
|
|
},
|
|
string = settings.icons.text.wifi.upload,
|
|
},
|
|
label = {
|
|
font = {
|
|
family = settings.fonts.numbers,
|
|
style = settings.fonts.styles.bold,
|
|
size = 10.0,
|
|
},
|
|
color = settings.colors.orange,
|
|
string = '??? Bps',
|
|
},
|
|
y_offset = 4,
|
|
})
|
|
|
|
local wifiDown = sbar.add('item', constants.items.WIFI .. '.down', {
|
|
position = 'right',
|
|
icon = {
|
|
padding_left = 0,
|
|
padding_right = 0,
|
|
font = {
|
|
style = settings.fonts.styles.bold,
|
|
size = 10.0,
|
|
},
|
|
string = settings.icons.text.wifi.download,
|
|
},
|
|
label = {
|
|
font = {
|
|
family = settings.fonts.numbers,
|
|
style = settings.fonts.styles.bold,
|
|
size = 10,
|
|
},
|
|
color = settings.colors.blue,
|
|
string = '??? Bps',
|
|
},
|
|
y_offset = -4,
|
|
})
|
|
|
|
local wifi = sbar.add('item', constants.items.WIFI .. '.padding', {
|
|
position = 'right',
|
|
label = { drawing = false },
|
|
padding_right = 0,
|
|
})
|
|
|
|
local wifiBracket = sbar.add('bracket', constants.items.WIFI .. '.bracket', {
|
|
wifi.name,
|
|
wifiUp.name,
|
|
wifiDown.name,
|
|
}, {
|
|
popup = { align = 'center' },
|
|
})
|
|
|
|
local ssid = sbar.add('item', {
|
|
align = 'center',
|
|
position = 'popup.' .. wifiBracket.name,
|
|
width = popupWidth,
|
|
height = 16,
|
|
icon = {
|
|
string = settings.icons.text.wifi.router,
|
|
font = {
|
|
style = settings.fonts.styles.bold,
|
|
},
|
|
},
|
|
label = {
|
|
font = {
|
|
style = settings.fonts.styles.bold,
|
|
size = settings.dimens.text.label,
|
|
},
|
|
max_chars = 18,
|
|
string = '????????????',
|
|
},
|
|
})
|
|
|
|
local hostname = sbar.add('item', {
|
|
position = 'popup.' .. wifiBracket.name,
|
|
background = {
|
|
height = 16,
|
|
},
|
|
icon = {
|
|
align = 'left',
|
|
string = 'Hostname:',
|
|
width = popupWidth / 2,
|
|
font = {
|
|
size = settings.dimens.text.label,
|
|
},
|
|
},
|
|
label = {
|
|
max_chars = 20,
|
|
string = '????????????',
|
|
width = popupWidth / 2,
|
|
align = 'right',
|
|
},
|
|
})
|
|
|
|
local ip = sbar.add('item', {
|
|
position = 'popup.' .. wifiBracket.name,
|
|
background = {
|
|
height = 16,
|
|
},
|
|
icon = {
|
|
align = 'left',
|
|
string = 'IP:',
|
|
width = popupWidth / 2,
|
|
font = {
|
|
size = settings.dimens.text.label,
|
|
},
|
|
},
|
|
label = {
|
|
align = 'right',
|
|
string = '???.???.???.???',
|
|
width = popupWidth / 2,
|
|
},
|
|
})
|
|
|
|
local router = sbar.add('item', {
|
|
position = 'popup.' .. wifiBracket.name,
|
|
background = {
|
|
height = 16,
|
|
},
|
|
icon = {
|
|
align = 'left',
|
|
string = 'Router:',
|
|
width = popupWidth / 2,
|
|
font = {
|
|
size = settings.dimens.text.label,
|
|
},
|
|
},
|
|
label = {
|
|
align = 'right',
|
|
string = '???.???.???.???',
|
|
width = popupWidth / 2,
|
|
},
|
|
})
|
|
|
|
sbar.add('item', { position = 'right', width = settings.dimens.padding.item })
|
|
|
|
wifiUp:subscribe('network_update', function(env)
|
|
local upColor = (env.upload == '000 Bps') and settings.colors.grey or settings.colors.orange
|
|
local downColor = (env.download == '000 Bps') and settings.colors.grey or settings.colors.blue
|
|
|
|
wifiUp:set {
|
|
icon = { color = upColor },
|
|
label = {
|
|
string = env.upload,
|
|
color = upColor,
|
|
},
|
|
}
|
|
wifiDown:set {
|
|
icon = { color = downColor },
|
|
label = {
|
|
string = env.download,
|
|
color = downColor,
|
|
},
|
|
}
|
|
end)
|
|
|
|
wifi:subscribe({ 'wifi_change', 'system_woke', 'forced' }, function(env)
|
|
wifi:set {
|
|
icon = {
|
|
string = settings.icons.text.wifi.disconnected,
|
|
color = settings.colors.magenta,
|
|
},
|
|
}
|
|
|
|
sbar.exec([[ipconfig getifaddr en0]], function(ip)
|
|
local ipConnected = not (ip == '')
|
|
|
|
local wifiIcon
|
|
local wifiColor
|
|
|
|
if ipConnected then
|
|
wifiIcon = settings.icons.text.wifi.connected
|
|
wifiColor = settings.colors.white
|
|
end
|
|
|
|
wifi:set {
|
|
icon = {
|
|
string = wifiIcon,
|
|
color = wifiColor,
|
|
},
|
|
}
|
|
|
|
sbar.exec([[sleep 2; scutil --nwi | grep -m1 'utun' | awk '{ print $1 }']], function(vpn)
|
|
local isVPNConnected = not (vpn == '')
|
|
|
|
if isVPNConnected then
|
|
wifiIcon = settings.icons.text.wifi.vpn
|
|
wifiColor = settings.colors.green
|
|
end
|
|
|
|
wifi:set {
|
|
icon = {
|
|
string = wifiIcon,
|
|
color = wifiColor,
|
|
},
|
|
}
|
|
end)
|
|
end)
|
|
end)
|
|
|
|
local function hideDetails() wifiBracket:set { popup = { drawing = false } } end
|
|
|
|
local function toggleDetails()
|
|
local shouldDrawDetails = wifiBracket:query().popup.drawing == 'off'
|
|
|
|
if shouldDrawDetails then
|
|
wifiBracket:set { popup = { drawing = true } }
|
|
sbar.exec('networksetup -getcomputername', function(result) hostname:set { label = result } end)
|
|
sbar.exec('ipconfig getifaddr en0', function(result) ip:set { label = result } end)
|
|
sbar.exec("ipconfig getsummary en0 | awk -F ' SSID : ' '/ SSID : / {print $2}'", function(result) ssid:set { label = result } end)
|
|
sbar.exec("networksetup -getinfo Wi-Fi | awk -F 'Router: ' '/^Router: / {print $2}'", function(result) router:set { label = result } end)
|
|
else
|
|
hideDetails()
|
|
end
|
|
end
|
|
|
|
local function copyLabelToClipboard(env)
|
|
local label = sbar.query(env.NAME).label.value
|
|
sbar.exec('echo "' .. label .. '" | pbcopy')
|
|
sbar.set(env.NAME, { label = { string = settings.icons.text.clipboard, align = 'center' } })
|
|
sbar.delay(1, function() sbar.set(env.NAME, { label = { string = label, align = 'right' } }) end)
|
|
end
|
|
|
|
wifiUp:subscribe('mouse.clicked', toggleDetails)
|
|
wifiDown:subscribe('mouse.clicked', toggleDetails)
|
|
wifi:subscribe('mouse.clicked', toggleDetails)
|
|
|
|
ssid:subscribe('mouse.clicked', copyLabelToClipboard)
|
|
hostname:subscribe('mouse.clicked', copyLabelToClipboard)
|
|
ip:subscribe('mouse.clicked', copyLabelToClipboard)
|
|
router:subscribe('mouse.clicked', copyLabelToClipboard)
|