Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate (album) artists and live tv channel rows to SDK #3647

Merged
merged 4 commits into from
Jun 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ class FilterOptions {
var isFavoriteOnly = false
var isUnwatchedOnly = false

val filters: Array<ItemFilter>?
val filters: Array<ItemFilter>
get() {
if (!isUnwatchedOnly && !isFavoriteOnly) return null
if (!isUnwatchedOnly && !isFavoriteOnly) return emptyArray()

return buildList {
if (isFavoriteOnly) add(ItemFilter.IsFavorite)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ package org.jellyfin.androidtv.data.querying;

import java.util.UUID

data class AdditionalPartsQuery(
data class GetAdditionalPartsRequest(
val itemId: UUID,
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ package org.jellyfin.androidtv.data.querying

import java.util.UUID

data class SpecialsQuery(
data class GetSpecialsRequest(
val itemId: UUID,
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ package org.jellyfin.androidtv.data.querying

import java.util.UUID

data class TrailersQuery(
data class GetTrailersRequest(
val itemId: UUID,
)
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
package org.jellyfin.androidtv.data.querying

data object ViewQuery
data object GetUserViewsRequest
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,8 @@
import org.jellyfin.androidtv.constant.PosterSize;
import org.jellyfin.androidtv.constant.QueryType;
import org.jellyfin.androidtv.data.model.FilterOptions;
import org.jellyfin.androidtv.data.querying.AlbumArtistsQuery;
import org.jellyfin.androidtv.data.querying.GetUserViewsRequest;
import org.jellyfin.androidtv.data.querying.StdItemQuery;
import org.jellyfin.androidtv.data.querying.ViewQuery;
import org.jellyfin.androidtv.data.repository.CustomMessageRepository;
import org.jellyfin.androidtv.data.repository.UserViewsRepository;
import org.jellyfin.androidtv.data.service.BackgroundService;
Expand All @@ -63,7 +62,6 @@
import org.jellyfin.androidtv.util.KeyProcessor;
import org.jellyfin.androidtv.util.Utils;
import org.jellyfin.androidtv.util.apiclient.EmptyLifecycleAwareResponse;
import org.jellyfin.apiclient.model.querying.ArtistsQuery;
import org.jellyfin.apiclient.model.querying.ItemFields;
import org.jellyfin.sdk.api.client.ApiClient;
import org.jellyfin.sdk.model.api.BaseItemDto;
Expand Down Expand Up @@ -578,26 +576,10 @@ private void setupQueries() {
//Special queries needed for album artists
String includeType = getArguments().getString(Extras.IncludeType);
if ("AlbumArtist".equals(includeType)) {
AlbumArtistsQuery albumArtists = new AlbumArtistsQuery();
albumArtists.setUserId(userRepository.getValue().getCurrentUser().getValue().getId().toString());
albumArtists.setFields(new ItemFields[]{
ItemFields.PrimaryImageAspectRatio,
ItemFields.ItemCounts,
ItemFields.ChildCount,
});
albumArtists.setParentId(mParentId.toString());
setRowDef(new BrowseRowDef("", albumArtists, CHUNK_SIZE_MINIMUM, new ChangeTriggerType[]{}));
setRowDef(new BrowseRowDef("", BrowsingUtils.createAlbumArtistsRequest(mParentId), CHUNK_SIZE_MINIMUM, new ChangeTriggerType[]{}));
return;
} else if ("Artist".equals(includeType)) {
ArtistsQuery artists = new ArtistsQuery();
artists.setUserId(userRepository.getValue().getCurrentUser().getValue().getId().toString());
artists.setFields(new ItemFields[]{
ItemFields.PrimaryImageAspectRatio,
ItemFields.ItemCounts,
ItemFields.ChildCount
});
artists.setParentId(mParentId.toString());
setRowDef(new BrowseRowDef("", artists, CHUNK_SIZE_MINIMUM, new ChangeTriggerType[]{}));
setRowDef(new BrowseRowDef("", BrowsingUtils.createArtistsRequest(mParentId), CHUNK_SIZE_MINIMUM, new ChangeTriggerType[]{}));
return;
}
query.setIncludeItemTypes(new String[]{includeType != null ? includeType : "MusicAlbum"});
Expand Down Expand Up @@ -674,7 +656,7 @@ private void buildAdapter() {
mAdapter = new ItemRowAdapter(requireContext(), mRowDef.getNextUpQuery(), true, mCardPresenter, null);
break;
case Views:
mAdapter = new ItemRowAdapter(requireContext(), ViewQuery.INSTANCE, mCardPresenter, null);
mAdapter = new ItemRowAdapter(requireContext(), GetUserViewsRequest.INSTANCE, mCardPresenter, null);
break;
case SimilarSeries:
mAdapter = new ItemRowAdapter(requireContext(), mRowDef.getSimilarQuery(), QueryType.SimilarSeries, mCardPresenter, null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

import org.jellyfin.androidtv.constant.ChangeTriggerType;
import org.jellyfin.androidtv.constant.QueryType;
import org.jellyfin.androidtv.data.querying.AlbumArtistsQuery;
import org.jellyfin.androidtv.data.querying.GetSeriesTimersRequest;
import org.jellyfin.androidtv.data.querying.SpecialsQuery;
import org.jellyfin.androidtv.data.querying.ViewQuery;
import org.jellyfin.apiclient.model.livetv.LiveTvChannelQuery;
import org.jellyfin.apiclient.model.querying.ArtistsQuery;
import org.jellyfin.androidtv.data.querying.GetSpecialsRequest;
import org.jellyfin.androidtv.data.querying.GetUserViewsRequest;
import org.jellyfin.apiclient.model.querying.ItemQuery;
import org.jellyfin.sdk.model.api.request.GetAlbumArtistsRequest;
import org.jellyfin.sdk.model.api.request.GetArtistsRequest;
import org.jellyfin.sdk.model.api.request.GetLatestMediaRequest;
import org.jellyfin.sdk.model.api.request.GetLiveTvChannelsRequest;
import org.jellyfin.sdk.model.api.request.GetNextUpRequest;
import org.jellyfin.sdk.model.api.request.GetRecommendedProgramsRequest;
import org.jellyfin.sdk.model.api.request.GetRecordingsRequest;
Expand All @@ -22,15 +22,15 @@
private GetNextUpRequest nextUpQuery;
private GetSimilarItemsRequest similarQuery;
private GetLatestMediaRequest latestItemsQuery;
private LiveTvChannelQuery tvChannelQuery;
private GetLiveTvChannelsRequest tvChannelQuery;
private GetRecommendedProgramsRequest programQuery;
private GetRecordingsRequest recordingQuery;
private GetSeriesTimersRequest seriesTimerQuery;

private ArtistsQuery artistsQuery;
private AlbumArtistsQuery albumArtistsQuery;
private GetArtistsRequest artistsQuery;
private GetAlbumArtistsRequest albumArtistsQuery;
private GetResumeItemsRequest resumeQuery;
private SpecialsQuery specialsQuery;
private GetSpecialsRequest specialsQuery;
private QueryType queryType;

private int chunkSize = 0;
Expand Down Expand Up @@ -70,15 +70,15 @@
this.changeTriggers = changeTriggers;
}

public BrowseRowDef(String header, ArtistsQuery query, int chunkSize, ChangeTriggerType[] changeTriggers) {
public BrowseRowDef(String header, GetArtistsRequest query, int chunkSize, ChangeTriggerType[] changeTriggers) {

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations
headerText = header;
this.artistsQuery = query;
this.chunkSize = chunkSize;
this.queryType = QueryType.Artists;
this.changeTriggers = changeTriggers;
}

public BrowseRowDef(String header, AlbumArtistsQuery query, int chunkSize, ChangeTriggerType[] changeTriggers) {
public BrowseRowDef(String header, GetAlbumArtistsRequest query, int chunkSize, ChangeTriggerType[] changeTriggers) {

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations
headerText = header;
this.albumArtistsQuery = query;
this.chunkSize = chunkSize;
Expand Down Expand Up @@ -109,7 +109,7 @@
this.changeTriggers = changeTriggers;
}

public BrowseRowDef(String header, LiveTvChannelQuery query) {
public BrowseRowDef(String header, GetLiveTvChannelsRequest query) {

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations
headerText = header;
this.tvChannelQuery = query;
this.queryType = QueryType.LiveTvChannel;
Expand Down Expand Up @@ -139,7 +139,7 @@
this.queryType = type;
}

public BrowseRowDef(String header, ViewQuery query) {
public BrowseRowDef(String header, GetUserViewsRequest query) {

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations
headerText = header;
this.staticHeight = true;
this.queryType = QueryType.Views;
Expand All @@ -155,7 +155,7 @@
this.changeTriggers = changeTriggers;
}

public BrowseRowDef(String header, SpecialsQuery query) {
public BrowseRowDef(String header, GetSpecialsRequest query) {

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations
headerText = header;
this.specialsQuery = query;
this.queryType = QueryType.Specials;
Expand Down Expand Up @@ -187,7 +187,7 @@
return queryType;
}

public LiveTvChannelQuery getTvChannelQuery() {
public GetLiveTvChannelsRequest getTvChannelQuery() {

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations
return tvChannelQuery;
}

Expand All @@ -199,14 +199,14 @@

public boolean getPreferParentThumb() { return preferParentThumb; }

public ArtistsQuery getArtistsQuery() { return artistsQuery; }
public AlbumArtistsQuery getAlbumArtistsQuery() { return albumArtistsQuery; }
public GetArtistsRequest getArtistsQuery() { return artistsQuery; }

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations
public GetAlbumArtistsRequest getAlbumArtistsQuery() { return albumArtistsQuery; }

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations

public GetSeriesTimersRequest getSeriesTimerQuery() { return seriesTimerQuery; }

public GetResumeItemsRequest getResumeQuery() { return resumeQuery; }

public SpecialsQuery getSpecialsQuery() { return specialsQuery; }
public GetSpecialsRequest getSpecialsQuery() { return specialsQuery; }

Check notice

Code scanning / Android Lint

Unknown nullness Note

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations

public ChangeTriggerType[] getChangeTriggers() {
return changeTriggers;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import org.jellyfin.apiclient.model.dto.BaseItemType;
import org.jellyfin.apiclient.model.entities.LocationType;
import org.jellyfin.apiclient.model.entities.SortOrder;
import org.jellyfin.apiclient.model.livetv.LiveTvChannelQuery;
import org.jellyfin.apiclient.model.livetv.RecordingQuery;
import org.jellyfin.apiclient.model.livetv.TimerInfoDto;
import org.jellyfin.apiclient.model.livetv.TimerQuery;
Expand Down Expand Up @@ -234,17 +233,10 @@ protected void setupQueries(final RowLoader rowLoader) {
mRows.add(new BrowseRowDef(getString(R.string.lbl_coming_up), BrowsingUtils.createLiveTVUpcomingRequest()));

//Fav Channels
LiveTvChannelQuery favTv = new LiveTvChannelQuery();
favTv.setUserId(KoinJavaComponent.<UserRepository>get(UserRepository.class).getCurrentUser().getValue().getId().toString());
favTv.setEnableFavoriteSorting(true);
favTv.setIsFavorite(true);
mRows.add(new BrowseRowDef(getString(R.string.lbl_favorite_channels), favTv));
mRows.add(new BrowseRowDef(getString(R.string.lbl_favorite_channels), BrowsingUtils.createLiveTVChannelsRequest(true)));

//Other Channels
LiveTvChannelQuery otherTv = new LiveTvChannelQuery();
otherTv.setUserId(KoinJavaComponent.<UserRepository>get(UserRepository.class).getCurrentUser().getValue().getId().toString());
otherTv.setIsFavorite(false);
mRows.add(new BrowseRowDef(getString(R.string.lbl_other_channels), otherTv));
mRows.add(new BrowseRowDef(getString(R.string.lbl_other_channels), BrowsingUtils.createLiveTVChannelsRequest(false)));

//Latest Recordings
RecordingQuery recordings = new RecordingQuery();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ import org.jellyfin.sdk.model.api.BaseItemDto
import org.jellyfin.sdk.model.api.BaseItemKind
import org.jellyfin.sdk.model.api.ItemFields
import org.jellyfin.sdk.model.api.ItemSortBy
import org.jellyfin.sdk.model.api.request.GetAlbumArtistsRequest
import org.jellyfin.sdk.model.api.request.GetArtistsRequest
import org.jellyfin.sdk.model.api.request.GetLatestMediaRequest
import org.jellyfin.sdk.model.api.request.GetLiveTvChannelsRequest
import org.jellyfin.sdk.model.api.request.GetNextUpRequest
import org.jellyfin.sdk.model.api.request.GetRecommendedProgramsRequest
import org.jellyfin.sdk.model.api.request.GetRecordingsRequest
Expand Down Expand Up @@ -209,4 +212,29 @@ object BrowsingUtils {
limit = 60,
isKids = true,
)

@JvmStatic
fun createLiveTVChannelsRequest(isFavorite: Boolean) = GetLiveTvChannelsRequest(
isFavorite = isFavorite,
)

@JvmStatic
fun createAlbumArtistsRequest(parentId: UUID) = GetAlbumArtistsRequest(
fields = setOf(
ItemFields.PRIMARY_IMAGE_ASPECT_RATIO,
ItemFields.ITEM_COUNTS,
ItemFields.CHILD_COUNT,
),
parentId = parentId,
)

@JvmStatic
fun createArtistsRequest(parentId: UUID) = GetArtistsRequest(
fields = setOf(
ItemFields.PRIMARY_IMAGE_ASPECT_RATIO,
ItemFields.ITEM_COUNTS,
ItemFields.CHILD_COUNT,
),
parentId = parentId,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
import org.jellyfin.androidtv.constant.LiveTvOption;
import org.jellyfin.androidtv.constant.QueryType;
import org.jellyfin.androidtv.data.model.DataRefreshService;
import org.jellyfin.androidtv.data.querying.ViewQuery;
import org.jellyfin.androidtv.data.querying.GetUserViewsRequest;
import org.jellyfin.androidtv.data.repository.CustomMessageRepository;
import org.jellyfin.androidtv.data.service.BackgroundService;
import org.jellyfin.androidtv.databinding.EnhancedDetailBrowseBinding;
Expand Down Expand Up @@ -237,7 +237,7 @@ public void loadRows(List<BrowseRowDef> rows) {
rowAdapter = new ItemRowAdapter(requireContext(), def.getLatestItemsQuery(), true, mCardPresenter, mRowsAdapter);
break;
case Views:
rowAdapter = new ItemRowAdapter(requireContext(), ViewQuery.INSTANCE, mCardPresenter, mRowsAdapter);
rowAdapter = new ItemRowAdapter(requireContext(), GetUserViewsRequest.INSTANCE, mCardPresenter, mRowsAdapter);
break;
case SimilarSeries:
rowAdapter = new ItemRowAdapter(requireContext(), def.getSimilarQuery(), QueryType.SimilarSeries, mCardPresenter, mRowsAdapter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import android.os.Bundle;

import org.jellyfin.androidtv.R;
import org.jellyfin.androidtv.data.querying.SpecialsQuery;
import org.jellyfin.androidtv.data.querying.GetSpecialsRequest;
import org.jellyfin.androidtv.data.querying.StdItemQuery;
import org.jellyfin.androidtv.util.Utils;
import org.jellyfin.apiclient.model.entities.SortOrder;
Expand Down Expand Up @@ -62,7 +62,7 @@ protected void setupQueries(RowLoader rowLoader) {
mRows.add(new BrowseRowDef(header, byName, 100));

if (mFolder.getType() == BaseItemKind.SEASON) {
SpecialsQuery specials = new SpecialsQuery(mFolder.getId());
GetSpecialsRequest specials = new GetSpecialsRequest(mFolder.getId());
mRows.add(new BrowseRowDef(getString(R.string.lbl_specials), specials));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import androidx.leanback.widget.HeaderItem
import androidx.leanback.widget.ListRow
import androidx.leanback.widget.Row
import org.jellyfin.androidtv.constant.QueryType
import org.jellyfin.androidtv.data.querying.ViewQuery
import org.jellyfin.androidtv.data.querying.GetUserViewsRequest
import org.jellyfin.androidtv.preference.UserPreferences
import org.jellyfin.androidtv.ui.browsing.BrowseRowDef
import org.jellyfin.androidtv.ui.itemhandling.ItemRowAdapter
Expand All @@ -27,7 +27,7 @@ class HomeFragmentBrowseRowDefRow(
val rowAdapter = when (browseRowDef.queryType) {
QueryType.NextUp -> ItemRowAdapter(context, browseRowDef.nextUpQuery, preferParentThumb, cardPresenter, rowsAdapter)
QueryType.LatestItems -> ItemRowAdapter(context, browseRowDef.latestItemsQuery, userPreferences[UserPreferences.seriesThumbnailsEnabled], cardPresenter, rowsAdapter)
QueryType.Views -> ItemRowAdapter(context, ViewQuery, cardPresenter, rowsAdapter)
QueryType.Views -> ItemRowAdapter(context, GetUserViewsRequest, cardPresenter, rowsAdapter)
QueryType.SimilarSeries -> ItemRowAdapter(context, browseRowDef.similarQuery, QueryType.SimilarSeries, cardPresenter, rowsAdapter)
QueryType.SimilarMovies -> ItemRowAdapter(context, browseRowDef.similarQuery, QueryType.SimilarMovies, cardPresenter, rowsAdapter)
QueryType.LiveTvChannel -> ItemRowAdapter(context, browseRowDef.tvChannelQuery, 40, cardPresenter, rowsAdapter)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import android.content.Context
import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.auth.repository.UserRepository
import org.jellyfin.androidtv.constant.ChangeTriggerType
import org.jellyfin.androidtv.data.querying.ViewQuery
import org.jellyfin.androidtv.data.querying.GetUserViewsRequest
import org.jellyfin.androidtv.data.repository.UserViewsRepository
import org.jellyfin.androidtv.ui.browsing.BrowseRowDef
import org.jellyfin.sdk.model.api.ItemFields
Expand All @@ -25,7 +25,7 @@ class HomeFragmentHelper(
}

fun loadLibraryTiles(): HomeFragmentRow {
return HomeFragmentBrowseRowDefRow(BrowseRowDef(context.getString(R.string.lbl_my_media), ViewQuery))
return HomeFragmentBrowseRowDefRow(BrowseRowDef(context.getString(R.string.lbl_my_media), GetUserViewsRequest))
}

fun loadResume(title: String, includeMediaTypes: Collection<MediaType>): HomeFragmentRow {
Expand Down
Loading
Loading