Skip to content

Commit a65c841

Browse files
committed
Refined gradual volume adjustment
1 parent 82ee084 commit a65c841

File tree

1 file changed

+40
-30
lines changed

1 file changed

+40
-30
lines changed

src/main/java/org/digitalmediaserver/cast/Channel.java

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)