@@ -1602,20 +1602,21 @@ public void setVolume(Volume volume) throws IOException {
16021602 stepInterval = -stepInterval ;
16031603 }
16041604 task = new GradualVolumeTask (stepInterval , targetLevel );
1605- volume = volume .modify ().level (Double .valueOf (currentLevel + stepInterval )).build ();
16061605 }
16071606 }
16081607
16091608 synchronized (gradualVolumeLock ) {
16101609 if (gradualVolumeTask != null ) {
16111610 gradualVolumeTask .cancel ();
1611+ gradualVolumeTask = null ;
16121612 }
16131613 if (task != null ) {
16141614 if (gradualVolumeTimer == null ) {
16151615 gradualVolumeTimer = new Timer (remoteName + " gradual volume timer" );
16161616 }
16171617 gradualVolumeTask = task ;
16181618 gradualVolumeTimer .schedule (task , 150 , 150 );
1619+ return ;
16191620 } else if (gradualVolumeTimer != null ) {
16201621 gradualVolumeTimer .cancel ();
16211622 gradualVolumeTimer = null ;
@@ -2221,39 +2222,48 @@ public GradualVolumeTask(double interval, double target) {
22212222
22222223 @ Override
22232224 public void run () {
2224- Volume currentVolume ;
2225- synchronized (cachedVolumeLock ) {
2226- currentVolume = cachedVolume ;
2227- }
2228- if (currentVolume == null || currentVolume .getLevel () == null ) {
2229- shutdownTask ();
2230- } else {
2231- double currentLevel = currentVolume .getLevel ().doubleValue ();
2232- double newLevel = currentLevel + interval ;
2233- if (interval > 0d ) {
2234- if (newLevel > target ) {
2235- newLevel = target ;
2236- shutdownTask ();
2237- }
2225+ try {
2226+ Volume currentVolume ;
2227+ synchronized (cachedVolumeLock ) {
2228+ currentVolume = cachedVolume ;
2229+ }
2230+ if (currentVolume == null || currentVolume .getLevel () == null ) {
2231+ shutdownTask ();
22382232 } else {
2239- if (newLevel < target ) {
2240- newLevel = target ;
2233+ double currentLevel = currentVolume .getLevel ().doubleValue ();
2234+ double newLevel = currentLevel + interval ;
2235+ if (interval > 0d ) {
2236+ if (newLevel > target ) {
2237+ newLevel = target ;
2238+ shutdownTask ();
2239+ }
2240+ } else {
2241+ if (newLevel < target ) {
2242+ newLevel = target ;
2243+ shutdownTask ();
2244+ }
2245+ }
2246+ Volume newVolume = new Volume (null , Double .valueOf (newLevel ), null , null );
2247+ try {
2248+ doSetVolume (newVolume , false , DEFAULT_RESPONSE_TIMEOUT );
2249+ } catch (IOException e ) {
2250+ LOGGER .warn (
2251+ CAST_API_MARKER ,
2252+ "An error occurred while gradually adjusting the volume " +
2253+ "level of {}, stopping gradual adjustment: {}" , remoteName ,
2254+ e .getMessage ()
2255+ );
2256+ LOGGER .trace (CAST_API_MARKER , "" , e );
22412257 shutdownTask ();
22422258 }
22432259 }
2244- Volume newVolume = new Volume (null , Double .valueOf (newLevel ), null , null );
2245- try {
2246- doSetVolume (newVolume , false , DEFAULT_RESPONSE_TIMEOUT );
2247- } catch (IOException e ) {
2248- LOGGER .warn (
2249- CAST_API_MARKER ,
2250- "An error occurred while gradually adjusting the volume " +
2251- "level of {}, stopping gradual adjustment: {}" , remoteName ,
2252- e .getMessage ()
2253- );
2254- LOGGER .trace (CAST_API_MARKER , "" , e );
2255- shutdownTask ();
2256- }
2260+ } catch (Exception e ) {
2261+ LOGGER .error (
2262+ CAST_API_MARKER ,
2263+ "An unexpected exception occurred in GradualVolumeTask: {}" ,
2264+ e .getMessage ()
2265+ );
2266+ LOGGER .trace (CAST_API_MARKER , "" , e );
22572267 }
22582268 }
22592269
0 commit comments