@@ -24,26 +24,48 @@ public PlayerHandler(@NotNull PlayerWrapper wrapper) {
2424 super (wrapper );
2525 }
2626
27- private static void setVolume (HttpServerExchange exchange , @ NotNull Player player , @ Nullable String valStr ) {
28- if (valStr == null ) {
29- Utils .invalidParameter (exchange , "volume" );
30- return ;
31- }
27+ private static void setVolume (HttpServerExchange exchange , @ NotNull Player player , @ Nullable String valStr , @ Nullable String stepStr ) {
28+ if (valStr != null && stepStr != null ) {
29+ // Reject requests with both parameters
30+ Utils .invalidParameter (exchange , "step" , "Cannot be passed alongside volume" );
31+ } else if (valStr != null ) {
32+ // Absolute volume change
33+ int val ;
34+ try {
35+ val = Integer .parseInt (valStr );
36+ } catch (Exception ex ) {
37+ Utils .invalidParameter (exchange , "volume" , "Not an integer" );
38+ return ;
39+ }
3240
33- int val ;
34- try {
35- val = Integer .parseInt (valStr );
36- } catch (Exception ex ) {
37- Utils .invalidParameter (exchange , "volume" , "Not an integer" );
38- return ;
39- }
41+ if (val < 0 || val > Player .VOLUME_MAX ) {
42+ Utils .invalidParameter (exchange , "volume" , "Must be >= 0 and <= " + Player .VOLUME_MAX );
43+ return ;
44+ }
45+
46+ player .setVolume (val );
47+ } else if (stepStr != null ) {
48+ // Relative volume change in number of steps
49+ int val ;
50+ try {
51+ val = Integer .parseInt (stepStr );
52+ } catch (Exception ex ) {
53+ Utils .invalidParameter (exchange , "step" , "Not an integer" );
54+ return ;
55+ }
4056
41- if (val < 0 || val > Player .VOLUME_MAX ) {
42- Utils .invalidParameter (exchange , "volume" , "Must be >= 0 and <= " + Player .VOLUME_MAX );
57+ if (val > 0 ) {
58+ player .volumeUp (val );
59+ } else if (val < 0 ) {
60+ player .volumeDown (Math .abs (val ));
61+ } else {
62+ Utils .invalidParameter (exchange , "step" , "Must be non zero" );
63+ return ;
64+ }
65+ } else {
66+ Utils .invalidParameter (exchange , "volume" );
4367 return ;
4468 }
45-
46- player .setVolume (val );
4769 }
4870
4971 private static void load (HttpServerExchange exchange , @ NotNull Player player , @ Nullable String uri , boolean play ) {
@@ -168,7 +190,7 @@ protected void handleRequest(@NotNull HttpServerExchange exchange, @NotNull Sess
168190 current (exchange , player );
169191 return ;
170192 case SET_VOLUME :
171- setVolume (exchange , player , Utils .getFirstString (params , "volume" ));
193+ setVolume (exchange , player , Utils .getFirstString (params , "volume" ), Utils . getFirstString ( params , "step" ) );
172194 return ;
173195 case VOLUME_UP :
174196 player .volumeUp ();
0 commit comments