package tv.emby.embyatv.browsing; import android.os.Bundle; import java.util.ArrayList; import java.util.List; import mediabrowser.apiinteraction.Response; import mediabrowser.model.dto.BaseItemDto; import mediabrowser.model.entities.SortOrder; import mediabrowser.model.livetv.LiveTvChannelQuery; import mediabrowser.model.livetv.RecommendedProgramQuery; import mediabrowser.model.livetv.RecordingQuery; import mediabrowser.model.querying.ItemFields; import mediabrowser.model.querying.ItemFilter; import mediabrowser.model.querying.ItemQuery; import mediabrowser.model.querying.ItemSortBy; import mediabrowser.model.querying.ItemsResult; import mediabrowser.model.querying.NextUpQuery; import tv.emby.embyatv.R; import tv.emby.embyatv.TvApp; import tv.emby.embyatv.model.ChangeTriggerType; import tv.emby.embyatv.querying.QueryType; import tv.emby.embyatv.querying.StdItemQuery; /** * Created by Eric on 12/4/2014. */ public class BrowseViewFragment extends EnhancedBrowseFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public void onResume() { super.onResume(); } @Override protected void setupQueries(final IRowLoader rowLoader) { String type = mFolder.getCollectionType() != null ? mFolder.getCollectionType().toLowerCase() : ""; switch (type) { case "movies": itemTypeString = "Movie"; //Resume StdItemQuery resumeMovies = new StdItemQuery(); resumeMovies.setIncludeItemTypes(new String[]{"Movie"}); resumeMovies.setRecursive(true); resumeMovies.setParentId(mFolder.getId()); resumeMovies.setImageTypeLimit(1); resumeMovies.setFilters(new ItemFilter[]{ItemFilter.IsResumable}); resumeMovies.setSortBy(new String[]{ItemSortBy.DatePlayed}); resumeMovies.setSortOrder(SortOrder.Descending); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_continue_watching), resumeMovies, 50, new ChangeTriggerType[] {ChangeTriggerType.MoviePlayback})); //Latest StdItemQuery latestMovies = new StdItemQuery(); latestMovies.setIncludeItemTypes(new String[]{"Movie"}); latestMovies.setRecursive(true); latestMovies.setParentId(mFolder.getId()); latestMovies.setLimit(50); latestMovies.setImageTypeLimit(1); latestMovies.setCollapseBoxSetItems(false); if (TvApp.getApplication().getCurrentUser().getConfiguration().getHidePlayedInLatest()) latestMovies.setFilters(new ItemFilter[]{ItemFilter.IsUnplayed}); latestMovies.setSortBy(new String[]{ItemSortBy.DateCreated}); latestMovies.setSortOrder(SortOrder.Descending); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_latest), latestMovies, 0, new ChangeTriggerType[] {ChangeTriggerType.MoviePlayback, ChangeTriggerType.LibraryUpdated})); //Favorites StdItemQuery favorites = new StdItemQuery(); favorites.setIncludeItemTypes(new String[]{"Movie"}); favorites.setRecursive(true); favorites.setParentId(mFolder.getId()); favorites.setImageTypeLimit(1); favorites.setFilters(new ItemFilter[]{ItemFilter.IsFavorite}); favorites.setSortBy(new String[]{ItemSortBy.SortName}); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_favorites), favorites, 60, new ChangeTriggerType[] {ChangeTriggerType.LibraryUpdated, ChangeTriggerType.FavoriteUpdate})); //Collections StdItemQuery collections = new StdItemQuery(); collections.setIncludeItemTypes(new String[]{"BoxSet"}); collections.setRecursive(true); collections.setImageTypeLimit(1); collections.setParentId(mFolder.getId()); collections.setSortBy(new String[]{ItemSortBy.SortName}); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_collections), collections, 60, new ChangeTriggerType[] {ChangeTriggerType.LibraryUpdated})); rowLoader.loadRows(mRows); break; case "tvshows": itemTypeString = "Series"; //Next up NextUpQuery nextUpQuery = new NextUpQuery(); nextUpQuery.setUserId(TvApp.getApplication().getCurrentUser().getId()); nextUpQuery.setLimit(50); nextUpQuery.setParentId(mFolder.getId()); nextUpQuery.setImageTypeLimit(1); nextUpQuery.setFields(new ItemFields[] {ItemFields.PrimaryImageAspectRatio, ItemFields.Overview}); mRows.add(new BrowseRowDef(mApplication.getResources().getString(R.string.lbl_next_up), nextUpQuery, new ChangeTriggerType[] {ChangeTriggerType.TvPlayback})); //Premieres StdItemQuery newQuery = new StdItemQuery(new ItemFields[]{ItemFields.DateCreated, ItemFields.PrimaryImageAspectRatio, ItemFields.Overview}); newQuery.setUserId(TvApp.getApplication().getCurrentUser().getId()); newQuery.setIncludeItemTypes(new String[]{"Episode"}); newQuery.setParentId(mFolder.getId()); newQuery.setRecursive(true); newQuery.setIsVirtualUnaired(false); newQuery.setIsMissing(false); newQuery.setImageTypeLimit(1); newQuery.setFilters(new ItemFilter[]{ItemFilter.IsUnplayed}); newQuery.setSortBy(new String[]{ItemSortBy.DateCreated}); newQuery.setSortOrder(SortOrder.Descending); newQuery.setLimit(300); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_new_premieres), newQuery, 0, true, true, new ChangeTriggerType[] {ChangeTriggerType.TvPlayback}, QueryType.Premieres)); //Latest content added StdItemQuery latestSeries = new StdItemQuery(); latestSeries.setIncludeItemTypes(new String[]{"Series"}); latestSeries.setRecursive(true); latestSeries.setParentId(mFolder.getId()); latestSeries.setLimit(50); latestSeries.setImageTypeLimit(1); if (TvApp.getApplication().getCurrentUser().getConfiguration().getHidePlayedInLatest()) latestSeries.setFilters(new ItemFilter[]{ItemFilter.IsUnplayed}); latestSeries.setSortBy(new String[]{ItemSortBy.DateLastContentAdded}); latestSeries.setSortOrder(SortOrder.Descending); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_latest), latestSeries, 0, new ChangeTriggerType[] {ChangeTriggerType.LibraryUpdated})); //Favorites StdItemQuery tvFavorites = new StdItemQuery(); tvFavorites.setIncludeItemTypes(new String[]{"Series"}); tvFavorites.setRecursive(true); tvFavorites.setParentId(mFolder.getId()); tvFavorites.setImageTypeLimit(1); tvFavorites.setFilters(new ItemFilter[]{ItemFilter.IsFavorite}); tvFavorites.setSortBy(new String[]{ItemSortBy.SortName}); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_favorites), tvFavorites, 60, new ChangeTriggerType[] {ChangeTriggerType.LibraryUpdated, ChangeTriggerType.FavoriteUpdate})); rowLoader.loadRows(mRows); break; case "music": //Latest StdItemQuery latestAlbums = new StdItemQuery(); latestAlbums.setIncludeItemTypes(new String[]{"MusicAlbum"}); latestAlbums.setRecursive(true); latestAlbums.setImageTypeLimit(1); latestAlbums.setParentId(mFolder.getId()); latestAlbums.setLimit(50); latestAlbums.setSortBy(new String[]{ItemSortBy.DateLastContentAdded}); latestAlbums.setSortOrder(SortOrder.Descending); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_latest), latestAlbums, 0, false, true, new ChangeTriggerType[] {ChangeTriggerType.LibraryUpdated})); //Last Played StdItemQuery lastPlayed = new StdItemQuery(); lastPlayed.setIncludeItemTypes(new String[]{"Audio"}); lastPlayed.setRecursive(true); lastPlayed.setParentId(mFolder.getId()); lastPlayed.setImageTypeLimit(1); lastPlayed.setFilters(new ItemFilter[]{ItemFilter.IsPlayed}); lastPlayed.setSortBy(new String[]{ItemSortBy.DatePlayed}); lastPlayed.setSortOrder(SortOrder.Descending); lastPlayed.setLimit(50); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_last_played), lastPlayed, 0, false, true, new ChangeTriggerType[] {ChangeTriggerType.MusicPlayback, ChangeTriggerType.LibraryUpdated})); //Favorites StdItemQuery favAlbums = new StdItemQuery(); favAlbums.setIncludeItemTypes(new String[]{"MusicAlbum", "MusicArtist"}); favAlbums.setRecursive(true); favAlbums.setParentId(mFolder.getId()); favAlbums.setImageTypeLimit(1); favAlbums.setFilters(new ItemFilter[]{ItemFilter.IsFavorite}); favAlbums.setSortBy(new String[]{ItemSortBy.SortName}); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_favorites), favAlbums, 60, false, true, new ChangeTriggerType[] {ChangeTriggerType.LibraryUpdated, ChangeTriggerType.FavoriteUpdate})); //AudioPlaylists StdItemQuery playlists = new StdItemQuery(new ItemFields[] {ItemFields.PrimaryImageAspectRatio, ItemFields.CumulativeRunTimeTicks}); playlists.setIncludeItemTypes(new String[]{"Playlist"}); playlists.setMediaTypes(new String[] {"Audio"}); playlists.setImageTypeLimit(1); playlists.setRecursive(true); playlists.setSortBy(new String[]{ItemSortBy.DateCreated}); playlists.setSortOrder(SortOrder.Descending); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_playlists), playlists, 60, false, true, new ChangeTriggerType[] {ChangeTriggerType.LibraryUpdated}, QueryType.AudioPlaylists)); rowLoader.loadRows(mRows); break; case "livetv": //On now RecommendedProgramQuery onNow = new RecommendedProgramQuery(); onNow.setIsAiring(true); onNow.setFields(new ItemFields[] {ItemFields.Overview, ItemFields.PrimaryImageAspectRatio, ItemFields.ChannelInfo}); onNow.setUserId(TvApp.getApplication().getCurrentUser().getId()); onNow.setImageTypeLimit(1); onNow.setLimit(200); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_on_now), onNow)); //Upcoming RecommendedProgramQuery upcomingTv = new RecommendedProgramQuery(); upcomingTv.setUserId(TvApp.getApplication().getCurrentUser().getId()); upcomingTv.setFields(new ItemFields[]{ItemFields.Overview, ItemFields.PrimaryImageAspectRatio, ItemFields.ChannelInfo}); upcomingTv.setIsAiring(false); upcomingTv.setHasAired(false); upcomingTv.setImageTypeLimit(1); upcomingTv.setLimit(200); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_coming_up), upcomingTv)); //Latest Recordings RecordingQuery recordings = new RecordingQuery(); recordings.setFields(new ItemFields[]{ItemFields.Overview, ItemFields.PrimaryImageAspectRatio}); recordings.setUserId(TvApp.getApplication().getCurrentUser().getId()); recordings.setEnableImages(true); recordings.setImageTypeLimit(1); recordings.setLimit(40); mRows.add(new BrowseRowDef("Latest Recordings", recordings)); //Fav Channels LiveTvChannelQuery favTv = new LiveTvChannelQuery(); favTv.setUserId(TvApp.getApplication().getCurrentUser().getId()); favTv.setEnableFavoriteSorting(true); favTv.setIsFavorite(true); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_favorite_channels), favTv)); //Other Channels LiveTvChannelQuery otherTv = new LiveTvChannelQuery(); otherTv.setUserId(TvApp.getApplication().getCurrentUser().getId()); otherTv.setIsFavorite(false); mRows.add(new BrowseRowDef(mApplication.getString(R.string.lbl_other_channels), otherTv)); rowLoader.loadRows(mRows); break; default: // Fall back to rows defined by the view children final List<BrowseRowDef> rows = new ArrayList<>(); final String userId = TvApp.getApplication().getCurrentUser().getId(); ItemQuery query = new ItemQuery(); query.setParentId(mFolder.getId()); query.setUserId(userId); query.setImageTypeLimit(1); query.setSortBy(new String[]{ItemSortBy.SortName}); TvApp.getApplication().getApiClient().GetItemsAsync(query, new Response<ItemsResult>() { @Override public void onResponse(ItemsResult response) { if (response.getTotalRecordCount() > 0) { for (BaseItemDto item : response.getItems()) { ItemQuery rowQuery = new StdItemQuery(); rowQuery.setParentId(item.getId()); rowQuery.setUserId(userId); rows.add(new BrowseRowDef(item.getName(), rowQuery, 60, new ChangeTriggerType[] {ChangeTriggerType.LibraryUpdated})); } } rowLoader.loadRows(rows); } @Override public void onError(Exception exception) { exception.printStackTrace(); } }); break; } } }