diff --git a/.config/ags/modules/bar/normal/music.js b/.config/ags/modules/bar/normal/music.js index 35fb8288d..99cdb589c 100644 --- a/.config/ags/modules/bar/normal/music.js +++ b/.config/ags/modules/bar/normal/music.js @@ -26,6 +26,22 @@ function trimTrackTitle(title) { return title; } +function adjustVolume(direction) { + const step = 0.03; + execAsync(['playerctl', 'volume']) + .then((output) => { + let currentVolume = parseFloat(output.trim()); + let newVolume = direction === 'up' ? currentVolume + step : currentVolume - step; + + if (newVolume > 1.0) newVolume = 1.0; + if (newVolume < 0.0) newVolume = 0.0; + + execAsync(['playerctl', 'volume', newVolume.toFixed(2)]).catch(print); + }) + .catch(print); +} + + const BarGroup = ({ child }) => Box({ className: 'bar-group-margin bar-sides', children: [ @@ -105,6 +121,8 @@ const switchToRelativeWorkspace = async (self, num) => { } } + + export default () => { // TODO: use cairo to make button bounce smaller on click, if that's possible const playingState = Box({ // Wrap a box cuz overlay can't have margins itself @@ -208,8 +226,8 @@ export default () => { }); } return EventBox({ - onScrollUp: (self) => switchToRelativeWorkspace(self, -1), - onScrollDown: (self) => switchToRelativeWorkspace(self, +1), + onScrollUp: () => adjustVolume('up'), + onScrollDown: () => adjustVolume('down'), child: Box({ className: 'spacing-h-4', children: [ @@ -228,3 +246,4 @@ export default () => { }) }); } +