@@ -24,26 +24,42 @@ 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+ }
4045
41- if (val < 0 || val > Player .VOLUME_MAX ) {
42- Utils .invalidParameter (exchange , "volume" , "Must be >= 0 and <= " + Player .VOLUME_MAX );
43- return ;
44- }
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+ }
4556
46- player .setVolume (val );
57+ if (val > 0 ) player .volumeUp (val );
58+ else if (val < 0 ) player .volumeDown (Math .abs (val ));
59+ else Utils .invalidParameter (exchange , "step" , "Must be non zero" );
60+ } else {
61+ Utils .invalidParameter (exchange , "volume" );
62+ }
4763 }
4864
4965 private static void load (HttpServerExchange exchange , @ NotNull Player player , @ Nullable String uri , boolean play ) {
@@ -168,7 +184,7 @@ protected void handleRequest(@NotNull HttpServerExchange exchange, @NotNull Sess
168184 current (exchange , player );
169185 return ;
170186 case SET_VOLUME :
171- setVolume (exchange , player , Utils .getFirstString (params , "volume" ));
187+ setVolume (exchange , player , Utils .getFirstString (params , "volume" ), Utils . getFirstString ( params , "step" ) );
172188 return ;
173189 case VOLUME_UP :
174190 player .volumeUp ();
0 commit comments