1- package xyz .gianlu .librespot .player ;
1+ package xyz .gianlu .librespot .player . tracks ;
22
33import com .google .gson .JsonArray ;
44import com .google .gson .JsonElement ;
2222 */
2323public class StationProvider implements TracksProvider {
2424 private static final Logger LOGGER = Logger .getLogger (StationProvider .class );
25+ private static final int LOAD_NEXT_PAGE_THRESHOLD = 3 ;
2526 private final MercuryClient mercury ;
2627 private final Spirc .State .Builder state ;
2728 private String nextPageUri ;
@@ -38,7 +39,7 @@ public StationProvider(@NotNull Session session, @NotNull Spirc.State.Builder st
3839 @ Override
3940 public int getNextTrackIndex (boolean consume ) {
4041 int next = state .getPlayingTrackIndex () + 1 ;
41- if (next >= state .getTrackCount ()) {
42+ if (next >= state .getTrackCount () - LOAD_NEXT_PAGE_THRESHOLD ) {
4243 try {
4344 requestMore ();
4445 } catch (IOException | MercuryClient .MercuryException ex ) {
@@ -51,9 +52,7 @@ public int getNextTrackIndex(boolean consume) {
5152 }
5253
5354 private void requestMore () throws IOException , MercuryClient .MercuryException {
54- if (nextPageUri == null )
55- resolveContext ();
56-
55+ if (nextPageUri == null ) resolveContext ();
5756 getNextPage ();
5857 }
5958
@@ -70,18 +69,17 @@ private void getNextPage() throws IOException {
7069 JsonArray tracks = obj .getAsJsonArray ("tracks" );
7170 for (JsonElement elm : tracks ) {
7271 JsonObject track = elm .getAsJsonObject ();
72+ String uri = track .get ("uri" ).getAsString ();
7373 state .addTrack (Spirc .TrackRef .newBuilder ()
74- .setUri (track . get ( " uri" ). getAsString () )
75- .setGid (ByteString .copyFrom (TrackId .fromUri (track . get ( " uri" ). getAsString () ).getGid ()))
74+ .setUri (uri )
75+ .setGid (ByteString .copyFrom (TrackId .fromUri (uri ).getGid ()))
7676 .build ());
7777 }
7878 }
7979
8080 private void resolveContext () throws IOException , MercuryClient .MercuryException {
81- if (!state .hasContextUri ()) {
82- LOGGER .fatal ("Missing context URI!" );
83- return ;
84- }
81+ if (!state .hasContextUri ())
82+ throw new IOException ("Missing context URI!" );
8583
8684 MercuryRequests .ResolvedContextWrapper json = mercury .sendSync (MercuryRequests .resolveContext (state .getContextUri ()));
8785 JsonObject firstPage = json .pages ().get (0 ).getAsJsonObject ();
0 commit comments