From 45d6efe02b48fc297f5cd4ef6cb241c43c1d8f82 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sun, 10 Jan 2016 10:36:07 -0800 Subject: Fixed #619: Add Podcasts to Auto --- .../dsub/service/AutoMediaBrowserService.java | 75 ++++++++++++++++++++++ .../github/daneren2005/dsub/util/Constants.java | 1 + .../dsub/util/compat/RemoteControlClientLP.java | 9 +++ 3 files changed, 85 insertions(+) (limited to 'app') diff --git a/app/src/main/java/github/daneren2005/dsub/service/AutoMediaBrowserService.java b/app/src/main/java/github/daneren2005/dsub/service/AutoMediaBrowserService.java index e07b58b0..6e161bf0 100644 --- a/app/src/main/java/github/daneren2005/dsub/service/AutoMediaBrowserService.java +++ b/app/src/main/java/github/daneren2005/dsub/service/AutoMediaBrowserService.java @@ -36,6 +36,8 @@ import github.daneren2005.dsub.R; import github.daneren2005.dsub.domain.MusicDirectory; import github.daneren2005.dsub.domain.MusicDirectory.Entry; import github.daneren2005.dsub.domain.Playlist; +import github.daneren2005.dsub.domain.PodcastChannel; +import github.daneren2005.dsub.domain.PodcastEpisode; import github.daneren2005.dsub.domain.ServerInfo; import github.daneren2005.dsub.util.Constants; import github.daneren2005.dsub.util.SilentBackgroundTask; @@ -50,7 +52,9 @@ public class AutoMediaBrowserService extends MediaBrowserService { private static final String BROWSER_ALBUM_LISTS = "albumLists"; private static final String BROWSER_LIBRARY = "library"; private static final String BROWSER_PLAYLISTS = "playlists"; + private static final String BROWSER_PODCASTS = "podcasts"; private static final String PLAYLIST_PREFIX = "pl-"; + private static final String PODCAST_PREFIX = "po-"; private static final String ALBUM_TYPE_PREFIX = "ty-"; private static final String MUSIC_DIRECTORY_PREFIX = "md-"; @@ -89,6 +93,11 @@ public class AutoMediaBrowserService extends MediaBrowserService { } else if(parentId.startsWith(PLAYLIST_PREFIX)) { String id = parentId.substring(PLAYLIST_PREFIX.length()); getPlayOptions(result, id, Constants.INTENT_EXTRA_NAME_PLAYLIST_ID); + } else if(BROWSER_PODCASTS.equals(parentId)) { + getPodcasts(result); + } else if(parentId.startsWith(PODCAST_PREFIX)) { + String id = parentId.substring(PODCAST_PREFIX.length()); + getPodcastEpisodes(result, id); } else { // No idea what it is, send empty result result.sendResult(new ArrayList()); @@ -113,6 +122,11 @@ public class AutoMediaBrowserService extends MediaBrowserService { .setMediaId(BROWSER_PLAYLISTS); mediaItems.add(new MediaBrowser.MediaItem(playlists.build(), MediaBrowser.MediaItem.FLAG_BROWSABLE)); + MediaDescription.Builder podcasts = new MediaDescription.Builder(); + podcasts.setTitle(downloadService.getString(R.string.button_bar_podcasts)) + .setMediaId(BROWSER_PODCASTS); + mediaItems.add(new MediaBrowser.MediaItem(podcasts.build(), MediaBrowser.MediaItem.FLAG_BROWSABLE)); + result.sendResult(mediaItems); } @@ -222,6 +236,67 @@ public class AutoMediaBrowserService extends MediaBrowserService { result.detach(); } + + private void getPodcasts(final Result> result) { + new SilentServiceTask>(downloadService) { + @Override + protected List doInBackground(MusicService musicService) throws Throwable { + return musicService.getPodcastChannels(false, downloadService, null); + } + + @Override + protected void done(List podcasts) { + List mediaItems = new ArrayList<>(); + + for(PodcastChannel podcast: podcasts) { + MediaDescription description = new MediaDescription.Builder() + .setTitle(podcast.getName()) + .setMediaId(PODCAST_PREFIX + podcast.getId()) + .build(); + + mediaItems.add(new MediaBrowser.MediaItem(description, MediaBrowser.MediaItem.FLAG_BROWSABLE)); + } + + result.sendResult(mediaItems); + } + }.execute(); + + result.detach(); + } + private void getPodcastEpisodes(final Result> result, final String podcastId) { + new SilentServiceTask(downloadService) { + @Override + protected MusicDirectory doInBackground(MusicService musicService) throws Throwable { + return musicService.getPodcastEpisodes(false, podcastId, downloadService, null); + } + + @Override + protected void done(MusicDirectory podcasts) { + List mediaItems = new ArrayList<>(); + + for(Entry entry: podcasts.getChildren(false, true)) { + PodcastEpisode podcast = (PodcastEpisode) entry; + Bundle podcastExtras = new Bundle(); + podcastExtras.putSerializable(Constants.INTENT_EXTRA_ENTRY, podcast); + podcastExtras.putString(Constants.INTENT_EXTRA_NAME_PODCAST_ID, podcast.getId()); + + MediaDescription description = new MediaDescription.Builder() + .setTitle(podcast.getTitle()) + .setSubtitle(Util.formatDate(downloadService, podcast.getDate())) + .setMediaId(PODCAST_PREFIX + podcast.getId()) + .setExtras(podcastExtras) + .build(); + + mediaItems.add(new MediaBrowser.MediaItem(description, MediaBrowser.MediaItem.FLAG_PLAYABLE)); + } + + result.sendResult(mediaItems); + } + }.execute(); + + result.detach(); + } + private void getPlayOptions(Result> result, String id, String idConstant) { List mediaItems = new ArrayList<>(); diff --git a/app/src/main/java/github/daneren2005/dsub/util/Constants.java b/app/src/main/java/github/daneren2005/dsub/util/Constants.java index 89e7de3b..bfb85492 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/Constants.java +++ b/app/src/main/java/github/daneren2005/dsub/util/Constants.java @@ -67,6 +67,7 @@ public final class Constants { public static final String INTENT_EXTRA_TOP_TRACKS = "topTracks"; public static final String INTENT_EXTRA_SHOW_ALL = "showAll"; public static final String INTENT_EXTRA_PLAY_LAST = "playLast"; + public static final String INTENT_EXTRA_ENTRY = "passedEntry"; // Preferences keys. public static final String PREFERENCES_KEY_SERVER_KEY = "server"; diff --git a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientLP.java b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientLP.java index fb489705..bf025849 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientLP.java +++ b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientLP.java @@ -36,6 +36,7 @@ import android.os.Bundle; import android.provider.MediaStore; import android.support.v7.media.MediaRouter; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -45,6 +46,7 @@ import github.daneren2005.dsub.activity.SubsonicFragmentActivity; import github.daneren2005.dsub.domain.MusicDirectory; import github.daneren2005.dsub.domain.MusicDirectory.Entry; import github.daneren2005.dsub.domain.Playlist; +import github.daneren2005.dsub.domain.PodcastEpisode; import github.daneren2005.dsub.domain.SearchCritera; import github.daneren2005.dsub.domain.SearchResult; import github.daneren2005.dsub.service.DownloadFile; @@ -492,6 +494,8 @@ public class RemoteControlClientLP extends RemoteControlClientBase { boolean shuffle = extras.getBoolean(Constants.INTENT_EXTRA_NAME_SHUFFLE, false); boolean playLast = extras.getBoolean(Constants.INTENT_EXTRA_PLAY_LAST, false); + Serializable entry = extras.getSerializable(Constants.INTENT_EXTRA_ENTRY); + String playlistId = extras.getString(Constants.INTENT_EXTRA_NAME_PLAYLIST_ID, null); if(playlistId != null) { Playlist playlist = new Playlist(playlistId, null); @@ -502,6 +506,11 @@ public class RemoteControlClientLP extends RemoteControlClientBase { Entry dir = new Entry(musicDirectoryId); playMusicDirectory(dir, shuffle, playLast); } + + String podcastId = extras.getString(Constants.INTENT_EXTRA_NAME_PODCAST_ID, null); + if(podcastId != null) { + playSong((PodcastEpisode) entry); + } } @Override -- cgit v1.2.3