99 lines
2.4 KiB
Nim
99 lines
2.4 KiB
Nim
import std/os
|
|
import strutils
|
|
import std/osproc
|
|
import std/math
|
|
import base
|
|
|
|
proc get_current_volume(): string {.gcsafe.}
|
|
|
|
proc check_volume(volume: string): string =
|
|
var vol = volume
|
|
if strip(vol) == "Connection error":
|
|
discard execCmdEx("pulseaudio -k; sleep 5; pulseaudio -D")
|
|
vol = get_current_volume()
|
|
vol = check_volume(vol)
|
|
return vol
|
|
|
|
proc getDesign(volume: string): (string,string) =
|
|
let vol = check_volume(volume)
|
|
var icon = " "
|
|
if vol == "muted":
|
|
return (icon & "muted", "")
|
|
let pcnt = parseInt(strip(vol))
|
|
case pcnt:
|
|
of 85..100:
|
|
icon = " "
|
|
of 55..84:
|
|
icon = " "
|
|
of 35..54:
|
|
icon = " "
|
|
of 10..34:
|
|
icon = " "
|
|
else:
|
|
icon = " "
|
|
let main_text = icon & $pcnt & "%"
|
|
let text = "<span size=\"x-large\">" & icon & "</span>" & $pcnt & "%"
|
|
return (text, main_text)
|
|
|
|
proc get_current_volume(): string =
|
|
let mute = execCmdEx("pamixer --get-mute")
|
|
if strip(mute.output) == "true":
|
|
return "muted"
|
|
let vol = execCmdEx("pamixer --get-volume")
|
|
return vol.output
|
|
|
|
proc get_volume*(run_once: bool = false) =
|
|
var last_vol: string = ""
|
|
while true:
|
|
let vol = get_current_volume()
|
|
if vol != last_vol or true:
|
|
let (text, main_text) = getDesign(vol)
|
|
var data = Info()
|
|
data.title = "Volume : "
|
|
data.html_text = text
|
|
data.full_text = main_text
|
|
data.color = foreground
|
|
data.border = green
|
|
data.background = black
|
|
data.selected_background = green
|
|
data.selected_color = black
|
|
let args = @["up", "down", "mute", "ncpamixer", "pavucontrol"]
|
|
let option = outputJSON(data,args)
|
|
if option in args:
|
|
case option:
|
|
of "up":
|
|
discard execCmd("pamixer -i 5")
|
|
get_volume()
|
|
of "down":
|
|
discard execCmd("pamixer -d 5")
|
|
get_volume()
|
|
of "mute":
|
|
discard execCmd("pamixer -t")
|
|
get_volume()
|
|
of "ncpamixer":
|
|
discard execCmd("ncpamixer")
|
|
of "pavucontrol":
|
|
discard execCmd("pavucontrol")
|
|
else:
|
|
try:
|
|
let vol = parseInt(option)
|
|
discard execCmd("pamixer --set-volume " & $vol)
|
|
get_volume()
|
|
except:
|
|
echo getCurrentExceptionMsg()
|
|
|
|
|
|
|
|
|
|
if run_once:
|
|
break
|
|
last_vol = vol
|
|
sleep(1000)
|
|
if stoploop:
|
|
break
|
|
|
|
proc main() =
|
|
get_volume()
|
|
|
|
if isMainModule:
|
|
main()
|