Skip to content

Commit f3bbcb9

Browse files
committed
Infer URI of ProvidedTracks too (#281)
1 parent 4379c5f commit f3bbcb9

2 files changed

Lines changed: 14 additions & 9 deletions

File tree

lib/src/main/java/xyz/gianlu/librespot/common/ProtoUtils.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -292,14 +292,19 @@ public static void enrichTrack(@NotNull Player.ProvidedTrack.Builder subject, @N
292292
}
293293

294294
@Nullable
295-
@Contract("null -> null")
296-
public static Player.ProvidedTrack toProvidedTrack(@Nullable ContextTrack track) {
295+
@Contract("null, _ -> null")
296+
public static Player.ProvidedTrack toProvidedTrack(@Nullable ContextTrack track, String contextUri) {
297297
if (track == null) return null;
298298

299299
Player.ProvidedTrack.Builder builder = Player.ProvidedTrack.newBuilder();
300300
builder.setProvider("context");
301-
if (track.hasUri() && !track.getUri().isEmpty()) builder.setUri(track.getUri());
302301
if (track.hasUid()) builder.setUid(track.getUid());
302+
if (track.hasUri() && !track.getUri().isEmpty()) {
303+
builder.setUri(track.getUri());
304+
} else if (track.hasGid()) {
305+
String uriPrefix = PlayableId.inferUriPrefix(contextUri);
306+
builder.setUri(uriPrefix + new String(PlayableId.BASE62.encode(track.getGid().toByteArray(), 22)));
307+
}
303308

304309
try {
305310
builder.setAlbumUri(track.getMetadataOrThrow("album_uri"));

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -930,14 +930,14 @@ private void updatePrevNextTracks() {
930930

931931
state.clearPrevTracks();
932932
for (int i = Math.max(0, index - MAX_PREV_TRACKS); i < index; i++)
933-
state.addPrevTracks(ProtoUtils.toProvidedTrack(tracks.get(i)));
933+
state.addPrevTracks(ProtoUtils.toProvidedTrack(tracks.get(i), getContextUri()));
934934

935935
state.clearNextTracks();
936936
for (ContextTrack track : queue)
937-
state.addNextTracks(ProtoUtils.toProvidedTrack(track));
937+
state.addNextTracks(ProtoUtils.toProvidedTrack(track, getContextUri()));
938938

939939
for (int i = index + 1; i < Math.min(tracks.size(), index + 1 + MAX_NEXT_TRACKS); i++)
940-
state.addNextTracks(ProtoUtils.toProvidedTrack(tracks.get(i)));
940+
state.addNextTracks(ProtoUtils.toProvidedTrack(tracks.get(i), getContextUri()));
941941
}
942942

943943
void updateTrackDuration(int duration) {
@@ -976,8 +976,8 @@ private void updateLikeDislike() {
976976
* <b>This will also REMOVE a track from the queue if needed. Calling this twice will break the queue.</b>
977977
*/
978978
private void updateState() {
979-
if (isPlayingQueue) state.setTrack(ProtoUtils.toProvidedTrack(queue.remove()));
980-
else state.setTrack(ProtoUtils.toProvidedTrack(tracks.get(getCurrentTrackIndex())));
979+
if (isPlayingQueue) state.setTrack(ProtoUtils.toProvidedTrack(queue.remove(), getContextUri()));
980+
else state.setTrack(ProtoUtils.toProvidedTrack(tracks.get(getCurrentTrackIndex()), getContextUri()));
981981

982982
updateLikeDislike();
983983

@@ -1116,7 +1116,7 @@ private void enrichCurrentTrack(@NotNull ContextTrack track) {
11161116
ContextTrack.Builder current = tracks.get(index).toBuilder();
11171117
ProtoUtils.enrichTrack(current, track);
11181118
tracks.set(index, current.build());
1119-
state.setTrack(ProtoUtils.toProvidedTrack(current.build()));
1119+
state.setTrack(ProtoUtils.toProvidedTrack(current.build(), getContextUri()));
11201120
}
11211121
}
11221122

0 commit comments

Comments
 (0)