Skip to content

Commit 7169ce4

Browse files
committed
Add onPlaybackFailed callback. Fixes #449
1 parent 44d5aed commit 7169ce4

5 files changed

Lines changed: 37 additions & 2 deletions

File tree

api/src/main/java/xyz/gianlu/librespot/api/handlers/EventsHandler.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,14 @@ public void onPlaybackResumed(@NotNull Player player, long trackTime) {
9090
dispatch(obj);
9191
}
9292

93+
@Override
94+
public void onPlaybackFailed(@NotNull Player player, Exception e) {
95+
JsonObject obj = new JsonObject();
96+
obj.addProperty("event", "playbackFailed");
97+
obj.addProperty("exception", e.getMessage());
98+
dispatch(obj);
99+
}
100+
93101
@Override
94102
public void onTrackSeeked(@NotNull Player player, long trackTime) {
95103
JsonObject obj = new JsonObject();

player/src/main/java/xyz/gianlu/librespot/player/FileConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ public ShellEvents.Configuration toEventsShell() {
351351
.setOnPlaybackEnded(config.get("shell.onPlaybackEnded"))
352352
.setOnPlaybackPaused(config.get("shell.onPlaybackPaused"))
353353
.setOnPlaybackResumed(config.get("shell.onPlaybackResumed"))
354+
.setOnPlaybackFailed(config.get("shell.onPlaybackFailed"))
354355
.setOnTrackSeeked(config.get("shell.onTrackSeeked"))
355356
.setOnMetadataAvailable(config.get("shell.onMetadataAvailable"))
356357
.setOnVolumeChanged(config.get("shell.onVolumeChanged"))

player/src/main/java/xyz/gianlu/librespot/player/Player.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ public void finishedLoading(@NotNull MetadataWrapper metadata) {
382382
public void loadingError(@NotNull Exception ex) {
383383
if (ex instanceof PlayableContentFeeder.ContentRestrictedException) {
384384
LOGGER.error("Can't load track (content restricted).", ex);
385+
events.playbackFailed(ex);
385386
} else {
386387
LOGGER.error("Failed loading track.", ex);
387388
panicState(PlaybackMetrics.Reason.TRACK_ERROR);
@@ -871,6 +872,8 @@ public interface EventsListener {
871872

872873
void onPlaybackResumed(@NotNull Player player, long trackTime);
873874

875+
void onPlaybackFailed(@NotNull Player player, Exception e);
876+
874877
void onTrackSeeked(@NotNull Player player, long trackTime);
875878

876879
void onMetadataAvailable(@NotNull Player player, @NotNull MetadataWrapper metadata);
@@ -1001,6 +1004,10 @@ public void onPlaybackResumed(@NotNull Player player, long trackTime) {
10011004
onMetadataAvailable(player, metadata);
10021005
}
10031006

1007+
@Override
1008+
public void onPlaybackFailed(@NotNull Player player, Exception e) {
1009+
}
1010+
10041011
@Override
10051012
public void onTrackSeeked(@NotNull Player player, long trackTime) {
10061013
dacpPipe.sendPipeFlush();
@@ -1075,6 +1082,11 @@ void playbackResumed() {
10751082
executorService.execute(() -> l.onPlaybackResumed(Player.this, trackTime));
10761083
}
10771084

1085+
void playbackFailed(Exception ex) {
1086+
for (EventsListener l : new ArrayList<>(listeners))
1087+
executorService.execute(() -> l.onPlaybackFailed(Player.this, ex));
1088+
}
1089+
10781090
void contextChanged() {
10791091
String uri = state.getContextUri();
10801092
if (uri == null) return;

player/src/main/java/xyz/gianlu/librespot/player/ShellEvents.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ public void onPlaybackResumed(@NotNull Player player, long trackTime) {
8888
exec(conf.onPlaybackResumed, "POSITION=" + trackTime);
8989
}
9090

91+
@Override
92+
public void onPlaybackFailed(@NotNull Player player, Exception e) {
93+
exec(conf.onPlaybackFailed, "EXCEPTION=" + e.getMessage());
94+
}
95+
9196
@Override
9297
public void onTrackSeeked(@NotNull Player player, long trackTime) {
9398
exec(conf.onTrackSeeked, "POSITION=" + trackTime);
@@ -147,6 +152,7 @@ public static class Configuration {
147152
public final String onPlaybackEnded;
148153
public final String onPlaybackPaused;
149154
public final String onPlaybackResumed;
155+
public final String onPlaybackFailed;
150156
public final String onTrackSeeked;
151157
public final String onMetadataAvailable;
152158
public final String onVolumeChanged;
@@ -158,7 +164,7 @@ public static class Configuration {
158164
public final String onFinishedLoading;
159165

160166
public Configuration(boolean enabled, boolean executeWithBash, String onContextChanged, String onTrackChanged, String onPlaybackEnded, String onPlaybackPaused,
161-
String onPlaybackResumed, String onTrackSeeked, String onMetadataAvailable, String onVolumeChanged,
167+
String onPlaybackResumed, String onPlaybackFailed, String onTrackSeeked, String onMetadataAvailable, String onVolumeChanged,
162168
String onInactiveSession, String onPanicState, String onConnectionDropped, String onConnectionEstablished,
163169
String onStartedLoading, String onFinishedLoading) {
164170
this.enabled = enabled;
@@ -168,6 +174,7 @@ public Configuration(boolean enabled, boolean executeWithBash, String onContextC
168174
this.onPlaybackEnded = onPlaybackEnded;
169175
this.onPlaybackPaused = onPlaybackPaused;
170176
this.onPlaybackResumed = onPlaybackResumed;
177+
this.onPlaybackFailed = onPlaybackFailed;
171178
this.onTrackSeeked = onTrackSeeked;
172179
this.onMetadataAvailable = onMetadataAvailable;
173180
this.onVolumeChanged = onVolumeChanged;
@@ -187,6 +194,7 @@ public static class Builder {
187194
private String onPlaybackEnded = "";
188195
private String onPlaybackPaused = "";
189196
private String onPlaybackResumed = "";
197+
private String onPlaybackFailed = "";
190198
private String onTrackSeeked = "";
191199
private String onMetadataAvailable = "";
192200
private String onVolumeChanged = "";
@@ -235,6 +243,11 @@ public Builder setOnPlaybackResumed(String command) {
235243
return this;
236244
}
237245

246+
public Builder setOnPlaybackFailed(String command) {
247+
this.onPlaybackFailed = command;
248+
return this;
249+
}
250+
238251
public Builder setOnTrackSeeked(String command) {
239252
this.onTrackSeeked = command;
240253
return this;
@@ -283,7 +296,7 @@ public Builder setOnFinishedLoading(String onFinishedLoading) {
283296
@NotNull
284297
public Configuration build() {
285298
return new Configuration(enabled, executeWithBash, onContextChanged, onTrackChanged, onPlaybackEnded, onPlaybackPaused, onPlaybackResumed,
286-
onTrackSeeked, onMetadataAvailable, onVolumeChanged, onInactiveSession, onPanicState, onConnectionDropped, onConnectionEstablished,
299+
onPlaybackFailed, onTrackSeeked, onMetadataAvailable, onVolumeChanged, onInactiveSession, onPanicState, onConnectionDropped, onConnectionEstablished,
287300
onStartedLoading, onFinishedLoading);
288301
}
289302
}

player/src/main/resources/default.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ onTrackChanged = ""
7474
onPlaybackEnded = ""
7575
onPlaybackPaused = ""
7676
onPlaybackResumed = ""
77+
onPlaybackFailed = ""
7778
onTrackSeeked = ""
7879
onMetadataAvailable = ""
7980
onVolumeChanged = ""

0 commit comments

Comments
 (0)