262 lines
6.0 KiB
Lua
262 lines
6.0 KiB
Lua
local constants = require("constants")
|
|
local settings = require("config.settings")
|
|
|
|
local popupWidth <const> = settings.dimens.graphics.popup.width + 20
|
|
|
|
sbar.exec(
|
|
"killall network_load >/dev/null; $CONFIG_DIR/bridge/network_load/bin/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.magenta
|
|
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)
|