83 lines
4.3 KiB
Plaintext
83 lines
4.3 KiB
Plaintext
|
|
(deflisten radio
|
|
:initial '{"is_paused":1,"song":{"artist":"","song":"","image600":""},"radio":0,"stations":[],"media":{"player":"","status":"Stopped","artist":"","title":"","art":""}}'
|
|
"scripts/radio")
|
|
(defvar radio-vol 80)
|
|
(defvar radio-muted false)
|
|
|
|
(defwidget radio-win []
|
|
(box :class "sys-win" :orientation "v" :space-evenly false
|
|
|
|
; --- Now Playing ---
|
|
(box :orientation "v" :space-evenly false :class "sys-section"
|
|
(section-header :title "Media" :accent "radio-accent")
|
|
(box :orientation "h" :space-evenly false :valign "center" :spacing 10 :class "radio-now-playing"
|
|
(box :class "radio-art"
|
|
:style "background-image: url('${radio.is_paused == 0 ? radio.song.image600 : (radio.media.status != 'Stopped' ? radio.media.art : radio.song.image600)}'); background-size: cover; background-position: center;"
|
|
(label :class "radio-art-icon" :halign "center" :valign "center"
|
|
:visible {radio.is_paused == 0
|
|
? radio.song.image600 == ""
|
|
: (radio.media.status != "Stopped"
|
|
? radio.media.art == ""
|
|
: radio.song.image600 == "")}
|
|
:text ""))
|
|
(box :orientation "v" :space-evenly false :hexpand true :valign "center"
|
|
(label :class "radio-song" :halign "start" :wrap true :limit-width 20
|
|
:text {radio.is_paused == 0
|
|
? (radio.song.song != "" ? radio.song.song : "Tuning in...")
|
|
: (radio.media.status != "Stopped"
|
|
? (radio.media.title != "" ? radio.media.title : "Playing")
|
|
: (radio.song.song != "" ? radio.song.song : "Nothing playing"))})
|
|
(label :class "radio-artist" :halign "start" :wrap true :limit-width 22
|
|
:text {radio.is_paused == 0
|
|
? radio.song.artist
|
|
: (radio.media.status != "Stopped"
|
|
? (radio.media.artist != "" ? radio.media.artist : radio.media.player)
|
|
: "")})))
|
|
|
|
; Controls - hidden only in placeholder state
|
|
(box :visible {radio.is_paused == 0 || radio.radio > 0 || radio.media.status != "Stopped"}
|
|
:orientation "v" :space-evenly false :class "radio-controls"
|
|
(box :orientation "h" :space-evenly true :halign "center"
|
|
(button :visible {radio.is_paused == 1 && radio.media.status != "Stopped"}
|
|
:class "radio-ctrl-btn" :timeout "2s" :onclick "scripts/media previous"
|
|
(label :text ""))
|
|
(button :class "radio-ctrl-btn" :timeout "2s"
|
|
:onclick {radio.is_paused == 1 && radio.media.status != "Stopped" ? "scripts/media play-pause" : "scripts/radio toggle"}
|
|
(label :text {radio.is_paused == 0 ? "" : (radio.media.status == "Playing" ? "" : "")}))
|
|
(button :visible {radio.is_paused == 1 && radio.media.status != "Stopped"}
|
|
:class "radio-ctrl-btn" :timeout "2s" :onclick "scripts/media next"
|
|
(label :text "")))
|
|
(vol-row
|
|
:icon ""
|
|
:value {radio-vol}
|
|
:onchange "scripts/radio vol {}"
|
|
:onclick "scripts/radio mute"
|
|
:muted {radio-muted})))
|
|
|
|
(box :class "section-sep")
|
|
|
|
; --- Stations ---
|
|
(box :orientation "v" :space-evenly false :class "sys-section"
|
|
(section-header :title "Radio Stations" :accent "radio-accent")
|
|
(scroll :vscroll true :hscroll false :height 130
|
|
(box :class "station-list" :space-evenly false :orientation "v"
|
|
(for station in {radio.stations}
|
|
(button
|
|
:class "station-row ${radio.radio == station.id ? 'station-row-active' : ''}"
|
|
:timeout "2s"
|
|
:onclick "scripts/radio start ${station.id}"
|
|
:tooltip {station.title}
|
|
(box :orientation "h" :space-evenly false :valign "center"
|
|
(box :class "station-icon"
|
|
:style "background-image: url('${station.icon_fill_white}'); background-size: contain; background-position: center;")
|
|
(label :class "station-name" :text {station.title}
|
|
:hexpand true :halign "start" :limit-width 16)))))))))
|
|
|
|
(defwidget radio-mod []
|
|
(module
|
|
(eventbox
|
|
:onclick "(sleep 0.1 && scripts/panel-toggle radio)"
|
|
(box :orientation "v"
|
|
(label :show-truncated false :class "icon-text" :text "")))))
|