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 Feb 7, 2023
1 parent eb884ec commit 978d811
Showing 1 changed file with 41 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,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 @@ -64,6 +65,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 @@ -130,7 +135,9 @@ public void 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 @@ -141,16 +148,38 @@ public void onLoadChildren(@NonNull final String parentId,
} else {
Log.w(TAG, "Unknown playlist uri " + parentId);
}
} else if (parentId.equals(ID_HISTORY)) {
populateHistory(mediaItems);
}
result.sendResult(mediaItems);
}

private LocalPlaylistManager getPlaylistManager() {
private void populateHistory(final List<MediaItem> mediaItems) {
final var streamHistory = getDatabase().streamHistoryDAO();
final var history = streamHistory.getHistory().blockingFirst();
mediaItems.addAll(history.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 @@ -202,6 +231,15 @@ private PlayQueue extractPlayQueueFromMediaId(final String mediaId) {

return new SinglePlayQueue(items, index);
}
} else if (mediaId.startsWith(ID_STREAM)) {
final var path = mediaIdUri.getPathSegments();
if (path.size() == 3) {
final long streamId = Long.parseLong(path.get(2));
final var items = getDatabase().streamHistoryDAO().getHistory()
.blockingFirst().stream().filter(it -> it.getStreamId() == streamId)
.map(StreamHistoryEntry::toStreamInfoItem).collect(Collectors.toList());
return new SinglePlayQueue(items, 0);
}
}

playbackError(R.string.error_http_not_found,
Expand Down

0 comments on commit 978d811

Please sign in to comment.