Skip to content

Commit 40b2840

Browse files
committed
Added SinglePlayableProvider + renamed stuff
1 parent aee0b76 commit 40b2840

18 files changed

Lines changed: 108 additions & 60 deletions

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

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
import xyz.gianlu.librespot.player.remote.Remote3Frame;
2323
import xyz.gianlu.librespot.player.remote.Remote3Page;
2424
import xyz.gianlu.librespot.player.remote.Remote3Track;
25+
import xyz.gianlu.librespot.player.tracks.PlayablesProvider;
2526
import xyz.gianlu.librespot.player.tracks.PlaylistProvider;
2627
import xyz.gianlu.librespot.player.tracks.StationProvider;
27-
import xyz.gianlu.librespot.player.tracks.TracksProvider;
2828
import xyz.gianlu.librespot.spirc.FrameListener;
2929
import xyz.gianlu.librespot.spirc.SpotifyIrc;
3030

@@ -46,7 +46,7 @@ public class Player implements FrameListener, TrackHandler.Listener, Closeable {
4646
private final StateWrapper state;
4747
private final Configuration conf;
4848
private final LinesHolder lines;
49-
private TracksProvider tracksProvider;
49+
private PlayablesProvider playablesProvider;
5050
private TrackHandler trackHandler;
5151
private TrackHandler preloadTrackHandler;
5252

@@ -268,21 +268,21 @@ private void handleShuffle() {
268268
}
269269

270270
private void shuffleTracks(boolean fully) {
271-
if (tracksProvider == null) return;
271+
if (playablesProvider == null) return;
272272

273-
if (tracksProvider.canShuffle() && tracksProvider instanceof PlaylistProvider)
274-
((PlaylistProvider) tracksProvider).shuffleTracks(session.random(), fully);
273+
if (playablesProvider.canShuffle() && playablesProvider instanceof PlaylistProvider)
274+
((PlaylistProvider) playablesProvider).shuffleTracks(session.random(), fully);
275275
else
276-
LOGGER.warn("Cannot shuffle TracksProvider: " + tracksProvider);
276+
LOGGER.warn("Cannot shuffle TracksProvider: " + playablesProvider);
277277
}
278278

279279
private void unshuffleTracks() {
280-
if (tracksProvider == null) return;
280+
if (playablesProvider == null) return;
281281

282-
if (tracksProvider.canShuffle() && tracksProvider instanceof PlaylistProvider)
283-
((PlaylistProvider) tracksProvider).unshuffleTracks();
282+
if (playablesProvider.canShuffle() && playablesProvider instanceof PlaylistProvider)
283+
((PlaylistProvider) playablesProvider).unshuffleTracks();
284284
else
285-
LOGGER.warn("Cannot unshuffle TracksProvider: " + tracksProvider);
285+
LOGGER.warn("Cannot unshuffle TracksProvider: " + playablesProvider);
286286
}
287287

288288
private void handleSeek(int pos) {
@@ -294,7 +294,7 @@ private void handleSeek(int pos) {
294294

295295
private void loadTracksProvider(@NotNull String uri) throws SpotifyContext.UnsupportedContextException {
296296
SpotifyContext context = SpotifyContext.from(uri);
297-
tracksProvider = context.initProvider(session, state.state);
297+
playablesProvider = context.initProvider(session, state.state);
298298
}
299299

300300
@Override
@@ -358,9 +358,9 @@ public void endOfTrack(@NotNull TrackHandler handler) {
358358
@Override
359359
public void preloadNextTrack(@NotNull TrackHandler handler) {
360360
if (handler == trackHandler) {
361-
int index = tracksProvider.getNextTrackIndex(false);
361+
int index = playablesProvider.getNextTrackIndex(false);
362362
if (index < state.getTrackCount()) {
363-
PlayableId next = tracksProvider.getTrackAt(index);
363+
PlayableId next = playablesProvider.getTrackAt(index);
364364
preloadTrackHandler = new TrackHandler(session, lines, conf, this);
365365
preloadTrackHandler.sendLoad(next, false, 0);
366366
LOGGER.trace("Started next track preload, gid: " + Utils.bytesToHex(next.getGid()));
@@ -452,7 +452,7 @@ private void handleLoad(@NotNull Remote3Frame frame) {
452452
private void loadTrack(boolean play) {
453453
if (trackHandler != null) trackHandler.close();
454454

455-
PlayableId id = tracksProvider.getCurrentTrack();
455+
PlayableId id = playablesProvider.getCurrentTrack();
456456
if (preloadTrackHandler != null && preloadTrackHandler.isTrack(id)) {
457457
trackHandler = preloadTrackHandler;
458458
preloadTrackHandler = null;
@@ -497,9 +497,9 @@ private void handlePause() {
497497
}
498498

499499
private void handleNext() {
500-
if (tracksProvider == null) return;
500+
if (playablesProvider == null) return;
501501

502-
int newTrack = tracksProvider.getNextTrackIndex(true);
502+
int newTrack = playablesProvider.getNextTrackIndex(true);
503503
boolean play = true;
504504
if (newTrack >= state.getTrackCount()) {
505505
if (state.getRepeat()) {
@@ -540,15 +540,15 @@ private void loadAutoplay() {
540540
state.setPositionMs(0);
541541
state.setPositionMeasuredAt(TimeProvider.currentTimeMillis());
542542

543-
tracksProvider = new StationProvider(session, state.state);
543+
playablesProvider = new StationProvider(session, state.state);
544544
loadTrack(true);
545545

546546
LOGGER.debug(String.format("Loading context for autoplay, uri: %s", newContext));
547547
} else if (resp.statusCode == 204) {
548548
MercuryRequests.StationsWrapper station = session.mercury().sendSync(MercuryRequests.getStationFor(context));
549549
state.loadStation(station);
550550

551-
tracksProvider = new StationProvider(session, state.state);
551+
playablesProvider = new StationProvider(session, state.state);
552552
loadTrack(true);
553553

554554
LOGGER.debug(String.format("Loading context for autoplay (using radio-apollo), uri: %s", state.getContextUri()));
@@ -566,10 +566,10 @@ private void loadAutoplay() {
566566
}
567567

568568
private void handlePrev() {
569-
if (tracksProvider == null) return;
569+
if (playablesProvider == null) return;
570570

571571
if (getPosition() < 3000) {
572-
state.setPlayingTrackIndex(tracksProvider.getPrevTrackIndex());
572+
state.setPlayingTrackIndex(playablesProvider.getPrevTrackIndex());
573573
state.setPositionMs(0);
574574
state.setPositionMeasuredAt(TimeProvider.currentTimeMillis());
575575

@@ -607,7 +607,7 @@ public Metadata.Episode currentEpisode() {
607607

608608
@Nullable
609609
public PlayableId currentPlayableId() {
610-
return tracksProvider == null ? null : tracksProvider.getCurrentTrack();
610+
return playablesProvider == null ? null : playablesProvider.getCurrentTrack();
611611
}
612612

613613
public interface Configuration {
@@ -729,7 +729,7 @@ boolean getShuffle() {
729729
}
730730

731731
void setShuffle(boolean shuffle) {
732-
state.setShuffle(shuffle && (tracksProvider == null || tracksProvider.canShuffle()));
732+
state.setShuffle(shuffle && (playablesProvider == null || playablesProvider.canShuffle()));
733733
}
734734

735735
void seekTo(@Nullable String uri) {
@@ -770,7 +770,7 @@ boolean getRepeat() {
770770
}
771771

772772
void setRepeat(boolean repeat) {
773-
state.setRepeat(repeat && (tracksProvider == null || tracksProvider.canRepeat()));
773+
state.setRepeat(repeat && (playablesProvider == null || playablesProvider.canRepeat()));
774774
}
775775

776776
void setPlayingTrackIndex(int i) {
@@ -920,8 +920,8 @@ void updateContext(@NotNull Remote3Frame.Context context) throws SpotifyContext.
920920

921921
state.setPlayingTrackIndex(selector.playingIndex());
922922

923-
if (page.nextPageUrl != null && tracksProvider instanceof StationProvider)
924-
((StationProvider) tracksProvider).knowsNextPageUrl(page.nextPageUrl);
923+
if (page.nextPageUrl != null && playablesProvider instanceof StationProvider)
924+
((StationProvider) playablesProvider).knowsNextPageUrl(page.nextPageUrl);
925925
}
926926

927927
void setQueue(@NotNull Remote3Frame frame) {

core/src/main/java/xyz/gianlu/librespot/player/contexts/AlbumContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
import org.jetbrains.annotations.NotNull;
44
import xyz.gianlu.librespot.common.proto.Spirc;
55
import xyz.gianlu.librespot.core.Session;
6+
import xyz.gianlu.librespot.player.tracks.PlayablesProvider;
67
import xyz.gianlu.librespot.player.tracks.PlaylistProvider;
7-
import xyz.gianlu.librespot.player.tracks.TracksProvider;
88

99
/**
1010
* @author Gianlu
1111
*/
1212
public final class AlbumContext extends AbsTrackContext {
1313
@Override
14-
public @NotNull TracksProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
14+
public @NotNull PlayablesProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
1515
return new PlaylistProvider(session, state);
1616
}
1717
}

core/src/main/java/xyz/gianlu/librespot/player/contexts/ArtistContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
import org.jetbrains.annotations.NotNull;
44
import xyz.gianlu.librespot.common.proto.Spirc;
55
import xyz.gianlu.librespot.core.Session;
6+
import xyz.gianlu.librespot.player.tracks.PlayablesProvider;
67
import xyz.gianlu.librespot.player.tracks.PlaylistProvider;
7-
import xyz.gianlu.librespot.player.tracks.TracksProvider;
88

99
/**
1010
* @author Gianlu
1111
*/
1212
public final class ArtistContext extends AbsTrackContext {
1313
@Override
14-
public @NotNull TracksProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
14+
public @NotNull PlayablesProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
1515
return new PlaylistProvider(session, state);
1616
}
1717
}

core/src/main/java/xyz/gianlu/librespot/player/contexts/CollectionContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
import org.jetbrains.annotations.NotNull;
44
import xyz.gianlu.librespot.common.proto.Spirc;
55
import xyz.gianlu.librespot.core.Session;
6+
import xyz.gianlu.librespot.player.tracks.PlayablesProvider;
67
import xyz.gianlu.librespot.player.tracks.PlaylistProvider;
7-
import xyz.gianlu.librespot.player.tracks.TracksProvider;
88

99
/**
1010
* @author Gianlu
1111
*/
1212
public final class CollectionContext extends AbsTrackContext {
1313
@Override
14-
public @NotNull TracksProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
14+
public @NotNull PlayablesProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
1515
return new PlaylistProvider(session, state);
1616
}
1717
}

core/src/main/java/xyz/gianlu/librespot/player/contexts/DailyMixContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
import org.jetbrains.annotations.NotNull;
44
import xyz.gianlu.librespot.common.proto.Spirc;
55
import xyz.gianlu.librespot.core.Session;
6+
import xyz.gianlu.librespot.player.tracks.PlayablesProvider;
67
import xyz.gianlu.librespot.player.tracks.StationProvider;
7-
import xyz.gianlu.librespot.player.tracks.TracksProvider;
88

99
/**
1010
* @author Gianlu
1111
*/
1212
public final class DailyMixContext extends AbsTrackContext {
1313
@Override
14-
public @NotNull TracksProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
14+
public @NotNull PlayablesProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
1515
return new StationProvider(session, state);
1616
}
1717
}

core/src/main/java/xyz/gianlu/librespot/player/contexts/EpisodeContext.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@
33
import org.jetbrains.annotations.NotNull;
44
import xyz.gianlu.librespot.common.proto.Spirc;
55
import xyz.gianlu.librespot.core.Session;
6-
import xyz.gianlu.librespot.player.tracks.ShowProvider;
7-
import xyz.gianlu.librespot.player.tracks.TracksProvider;
6+
import xyz.gianlu.librespot.mercury.model.EpisodeId;
7+
import xyz.gianlu.librespot.player.tracks.PlayablesProvider;
8+
import xyz.gianlu.librespot.player.tracks.SinglePlayableProvider;
89

910
/**
1011
* @author Gianlu
1112
*/
1213
public final class EpisodeContext extends AbsEpisodeContext {
1314
@Override
14-
public @NotNull TracksProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
15-
return new ShowProvider(state);
15+
public @NotNull PlayablesProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
16+
return new SinglePlayableProvider(EpisodeId.fromTrackRef(state.getTrack(0)));
1617
}
1718
}

core/src/main/java/xyz/gianlu/librespot/player/contexts/GenreContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
import org.jetbrains.annotations.NotNull;
44
import xyz.gianlu.librespot.common.proto.Spirc;
55
import xyz.gianlu.librespot.core.Session;
6+
import xyz.gianlu.librespot.player.tracks.PlayablesProvider;
67
import xyz.gianlu.librespot.player.tracks.PlaylistProvider;
7-
import xyz.gianlu.librespot.player.tracks.TracksProvider;
88

99
/**
1010
* @author Gianlu
1111
*/
1212
public final class GenreContext extends AbsTrackContext {
1313
@Override
14-
public @NotNull TracksProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
14+
public @NotNull PlayablesProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
1515
return new PlaylistProvider(session, state);
1616
}
1717
}

core/src/main/java/xyz/gianlu/librespot/player/contexts/PlaylistContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
import org.jetbrains.annotations.NotNull;
44
import xyz.gianlu.librespot.common.proto.Spirc;
55
import xyz.gianlu.librespot.core.Session;
6+
import xyz.gianlu.librespot.player.tracks.PlayablesProvider;
67
import xyz.gianlu.librespot.player.tracks.PlaylistProvider;
7-
import xyz.gianlu.librespot.player.tracks.TracksProvider;
88

99
/**
1010
* @author Gianlu
1111
*/
1212
public final class PlaylistContext extends AbsTrackContext {
1313
@Override
14-
public @NotNull TracksProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
14+
public @NotNull PlayablesProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
1515
return new PlaylistProvider(session, state);
1616
}
1717
}

core/src/main/java/xyz/gianlu/librespot/player/contexts/SearchContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import org.jetbrains.annotations.NotNull;
44
import xyz.gianlu.librespot.common.proto.Spirc;
55
import xyz.gianlu.librespot.core.Session;
6+
import xyz.gianlu.librespot.player.tracks.PlayablesProvider;
67
import xyz.gianlu.librespot.player.tracks.PlaylistProvider;
7-
import xyz.gianlu.librespot.player.tracks.TracksProvider;
88

99
/**
1010
* @author Gianlu
@@ -17,7 +17,7 @@ public SearchContext(@NotNull String searchTerm) {
1717
}
1818

1919
@Override
20-
public @NotNull TracksProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
20+
public @NotNull PlayablesProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
2121
return new PlaylistProvider(session, state);
2222
}
2323
}

core/src/main/java/xyz/gianlu/librespot/player/contexts/ShowContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
import org.jetbrains.annotations.NotNull;
44
import xyz.gianlu.librespot.common.proto.Spirc;
55
import xyz.gianlu.librespot.core.Session;
6+
import xyz.gianlu.librespot.player.tracks.PlayablesProvider;
67
import xyz.gianlu.librespot.player.tracks.ShowProvider;
7-
import xyz.gianlu.librespot.player.tracks.TracksProvider;
88

99
/**
1010
* @author Gianlu
1111
*/
1212
public final class ShowContext extends AbsEpisodeContext {
1313
@Override
14-
public @NotNull TracksProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
14+
public @NotNull PlayablesProvider initProvider(@NotNull Session session, Spirc.State.@NotNull Builder state) {
1515
return new ShowProvider(state);
1616
}
1717
}

0 commit comments

Comments
 (0)