Skip to content

Commit

Permalink
MediaBrowser: expose search history
Browse files Browse the repository at this point in the history
  • Loading branch information
haggaie committed May 22, 2023
1 parent a77e5de commit c92f2c1
Showing 1 changed file with 46 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.schabi.newpipe.NewPipeDatabase;
import org.schabi.newpipe.R;
import org.schabi.newpipe.database.AppDatabase;
import org.schabi.newpipe.database.history.model.StreamHistoryEntry;
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
import org.schabi.newpipe.database.playlist.PlaylistStreamEntry;
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
Expand Down Expand Up @@ -72,6 +73,10 @@ public void release() {
private static final String ID_ROOT = "//${BuildConfig.APPLICATION_ID}/r";
@NonNull
private static final String ID_BOOKMARKS = ID_ROOT + "/playlists";
@NonNull
private static final String ID_HISTORY = ID_ROOT + "/history";
@NonNull
private static final String ID_STREAM = ID_ROOT + "/stream";

private MediaItem createRootMediaItem(final String mediaId, final String folderName) {
final var builder = new MediaDescriptionCompat.Builder();
Expand Down Expand Up @@ -141,7 +146,9 @@ public Single<List<MediaItem>> onLoadChildren(@NonNull final String parentId) {
mediaItems.add(
createRootMediaItem(ID_BOOKMARKS,
playerService.getResources().getString(R.string.tab_bookmarks)));

mediaItems.add(
createRootMediaItem(ID_HISTORY,
playerService.getResources().getString(R.string.action_history)));
} else if (parentId.startsWith(ID_BOOKMARKS)) {
final var path = parentIdUri.getPathSegments();
if (path.size() == 2) {
Expand All @@ -152,16 +159,38 @@ public Single<List<MediaItem>> onLoadChildren(@NonNull final String parentId) {
} else {
Log.w(TAG, "Unknown playlist uri " + parentId);
}
} else if (parentId.equals(ID_HISTORY)) {
return populateHistory();
}
return Single.just(mediaItems);
}

private LocalPlaylistManager getPlaylistManager() {
private Single<List<MediaItem>> populateHistory() {
final var streamHistory = getDatabase().streamHistoryDAO();
final var history = streamHistory.getHistory().firstOrError();
return history.map(items ->
items.stream().map(this::createHistoryMediaItem).collect(Collectors.toList()));
}

private MediaItem createHistoryMediaItem(@NonNull final StreamHistoryEntry streamHistoryEntry) {
final var builder = new MediaDescriptionCompat.Builder();
builder.setMediaId(ID_STREAM + '/' + streamHistoryEntry.getStreamId())
.setTitle(streamHistoryEntry.getStreamEntity().getTitle())
.setIconUri(Uri.parse(streamHistoryEntry.getStreamEntity().getThumbnailUrl()));

return new MediaItem(builder.build(), MediaItem.FLAG_PLAYABLE);
}

private AppDatabase getDatabase() {
if (database == null) {
database = NewPipeDatabase.getInstance(playerService);
}
return database;
}

private LocalPlaylistManager getPlaylistManager() {
if (localPlaylistManager == null) {
localPlaylistManager = new LocalPlaylistManager(database);
localPlaylistManager = new LocalPlaylistManager(getDatabase());
}
return localPlaylistManager;
}
Expand Down Expand Up @@ -211,6 +240,20 @@ private Single<PlayQueue> extractPlayQueueFromMediaId(final String mediaId) {
return new SinglePlayQueue(infoItems, index);
});
}
} else if (mediaId.startsWith(ID_STREAM)) {
final var path = mediaIdUri.getPathSegments();
if (path.size() == 3) {
final long streamId = Long.parseLong(path.get(2));
return getDatabase().streamHistoryDAO().getHistory()
.firstOrError()
.map(items -> {
final var infoItems = items.stream()
.filter(it -> it.getStreamId() == streamId)
.map(StreamHistoryEntry::toStreamInfoItem)
.collect(Collectors.toList());
return new SinglePlayQueue(infoItems, 0);
});
}
}

return Single.error(new NullPointerException());
Expand Down

0 comments on commit c92f2c1

Please sign in to comment.