Skip to content

Commit 59f3fd8

Browse files
committed
MediaBrowser: expose search history
1 parent 43935e2 commit 59f3fd8

File tree

1 file changed

+46
-3
lines changed

1 file changed

+46
-3
lines changed

app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserConnector.java

+46-3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.schabi.newpipe.NewPipeDatabase;
2222
import org.schabi.newpipe.R;
2323
import org.schabi.newpipe.database.AppDatabase;
24+
import org.schabi.newpipe.database.history.model.StreamHistoryEntry;
2425
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
2526
import org.schabi.newpipe.database.playlist.PlaylistStreamEntry;
2627
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
@@ -70,6 +71,10 @@ public void release() {
7071
private static final String ID_ROOT = "//${BuildConfig.APPLICATION_ID}/r";
7172
@NonNull
7273
private static final String ID_BOOKMARKS = ID_ROOT + "/playlists";
74+
@NonNull
75+
private static final String ID_HISTORY = ID_ROOT + "/history";
76+
@NonNull
77+
private static final String ID_STREAM = ID_ROOT + "/stream";
7378

7479
private MediaItem createRootMediaItem(final String mediaId, final String folderName) {
7580
final var builder = new MediaDescriptionCompat.Builder();
@@ -135,7 +140,9 @@ public Single<List<MediaItem>> onLoadChildren(@NonNull final String parentId) {
135140
mediaItems.add(
136141
createRootMediaItem(ID_BOOKMARKS,
137142
playerService.getResources().getString(R.string.tab_bookmarks)));
138-
143+
mediaItems.add(
144+
createRootMediaItem(ID_HISTORY,
145+
playerService.getResources().getString(R.string.action_history)));
139146
} else if (parentId.startsWith(ID_BOOKMARKS)) {
140147
final var path = parentIdUri.getPathSegments();
141148
if (path.size() == 2) {
@@ -146,16 +153,38 @@ public Single<List<MediaItem>> onLoadChildren(@NonNull final String parentId) {
146153
} else {
147154
Log.w(TAG, "Unknown playlist uri " + parentId);
148155
}
156+
} else if (parentId.equals(ID_HISTORY)) {
157+
return populateHistory();
149158
}
150159
return Single.just(mediaItems);
151160
}
152161

153-
private LocalPlaylistManager getPlaylistManager() {
162+
private Single<List<MediaItem>> populateHistory() {
163+
final var streamHistory = getDatabase().streamHistoryDAO();
164+
final var history = streamHistory.getHistory().firstOrError();
165+
return history.map(items ->
166+
items.stream().map(this::createHistoryMediaItem).collect(Collectors.toList()));
167+
}
168+
169+
private MediaItem createHistoryMediaItem(@NonNull final StreamHistoryEntry streamHistoryEntry) {
170+
final var builder = new MediaDescriptionCompat.Builder();
171+
builder.setMediaId(ID_STREAM + '/' + streamHistoryEntry.getStreamId())
172+
.setTitle(streamHistoryEntry.getStreamEntity().getTitle())
173+
.setIconUri(Uri.parse(streamHistoryEntry.getStreamEntity().getThumbnailUrl()));
174+
175+
return new MediaItem(builder.build(), MediaItem.FLAG_PLAYABLE);
176+
}
177+
178+
private AppDatabase getDatabase() {
154179
if (database == null) {
155180
database = NewPipeDatabase.getInstance(playerService);
156181
}
182+
return database;
183+
}
184+
185+
private LocalPlaylistManager getPlaylistManager() {
157186
if (localPlaylistManager == null) {
158-
localPlaylistManager = new LocalPlaylistManager(database);
187+
localPlaylistManager = new LocalPlaylistManager(getDatabase());
159188
}
160189
return localPlaylistManager;
161190
}
@@ -205,6 +234,20 @@ private Single<PlayQueue> extractPlayQueueFromMediaId(final String mediaId) {
205234
return new SinglePlayQueue(infoItems, index);
206235
});
207236
}
237+
} else if (mediaId.startsWith(ID_STREAM)) {
238+
final var path = mediaIdUri.getPathSegments();
239+
if (path.size() == 3) {
240+
final long streamId = Long.parseLong(path.get(2));
241+
return getDatabase().streamHistoryDAO().getHistory()
242+
.firstOrError()
243+
.map(items -> {
244+
final var infoItems = items.stream()
245+
.filter(it -> it.getStreamId() == streamId)
246+
.map(StreamHistoryEntry::toStreamInfoItem)
247+
.collect(Collectors.toList());
248+
return new SinglePlayQueue(infoItems, 0);
249+
});
250+
}
208251
}
209252

210253
return Single.error(new NullPointerException());

0 commit comments

Comments
 (0)