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

Add showing additional parts #1775

Merged
merged 4 commits into from
Jul 8, 2022
Merged
Show file tree
Hide file tree
Changes from 2 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 @@ -12,6 +12,7 @@ enum class QueryType {
StaticChapters,
Search,
Specials,
AdditionalParts,
Trailers,
LiveTvChannel,
LiveTvProgram,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.jellyfin.androidtv.data.querying;

class AdditionalPartsQuery(private val ItemId: String) {
Fixed Show fixed Hide fixed
fun getItemId(): String {
return ItemId
}
}
nielsvanvelzen marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.jellyfin.androidtv.data.model.ChapterItemInfo;
import org.jellyfin.androidtv.data.model.DataRefreshService;
import org.jellyfin.androidtv.data.model.InfoItem;
import org.jellyfin.androidtv.data.querying.AdditionalPartsQuery;
import org.jellyfin.androidtv.data.querying.SpecialsQuery;
import org.jellyfin.androidtv.data.querying.StdItemQuery;
import org.jellyfin.androidtv.data.querying.TrailersQuery;
Expand Down Expand Up @@ -526,27 +527,33 @@ protected void addAdditionalRows(ArrayObjectAdapter adapter) {
switch (mBaseItem.getBaseItemType()) {
case Movie:

//Additional Parts
if (mBaseItem.getPartCount() != null && mBaseItem.getPartCount() > 0) {
ItemRowAdapter additionalPartsAdapter = new ItemRowAdapter(this, new AdditionalPartsQuery(mBaseItem.getId()), new CardPresenter(), adapter);
addItemRow(adapter, additionalPartsAdapter, 0, getString(R.string.lbl_additional_parts));
}

//Cast/Crew
if (mBaseItem.getPeople() != null && mBaseItem.getPeople().length > 0) {
ItemRowAdapter castAdapter = new ItemRowAdapter(this, mBaseItem.getPeople(), new CardPresenter(true, 260), adapter);
addItemRow(adapter, castAdapter, 0, getString(R.string.lbl_cast_crew));
addItemRow(adapter, castAdapter, 1, getString(R.string.lbl_cast_crew));
}

//Specials
if (mBaseItem.getSpecialFeatureCount() != null && mBaseItem.getSpecialFeatureCount() > 0) {
addItemRow(adapter, new ItemRowAdapter(this, new SpecialsQuery(mBaseItem.getId()), new CardPresenter(), adapter), 2, getString(R.string.lbl_specials));
addItemRow(adapter, new ItemRowAdapter(this, new SpecialsQuery(mBaseItem.getId()), new CardPresenter(), adapter), 3, getString(R.string.lbl_specials));
}

//Trailers
if (mBaseItem.getLocalTrailerCount() != null && mBaseItem.getLocalTrailerCount() > 1) {
addItemRow(adapter, new ItemRowAdapter(this, new TrailersQuery(mBaseItem.getId()), new CardPresenter(), adapter), 3, getString(R.string.lbl_trailers));
addItemRow(adapter, new ItemRowAdapter(this, new TrailersQuery(mBaseItem.getId()), new CardPresenter(), adapter), 4, getString(R.string.lbl_trailers));
}

//Chapters
if (mBaseItem.getChapters() != null && mBaseItem.getChapters().size() > 0) {
List<ChapterItemInfo> chapters = BaseItemUtils.buildChapterItems(mBaseItem);
ItemRowAdapter chapterAdapter = new ItemRowAdapter(this, chapters, new CardPresenter(true, 240), adapter);
addItemRow(adapter, chapterAdapter, 1, getString(R.string.lbl_chapters));
addItemRow(adapter, chapterAdapter, 2, getString(R.string.lbl_chapters));
}

//Similar
Expand All @@ -560,7 +567,7 @@ protected void addAdditionalRows(ArrayObjectAdapter adapter) {
similar.setLimit(10);

ItemRowAdapter similarMoviesAdapter = new ItemRowAdapter(this, similar, QueryType.SimilarMovies, new CardPresenter(), adapter);
addItemRow(adapter, similarMoviesAdapter, 4, getString(R.string.lbl_more_like_this));
addItemRow(adapter, similarMoviesAdapter, 5, getString(R.string.lbl_more_like_this));

addInfoRows(adapter);
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.jellyfin.androidtv.data.model.ChapterItemInfo;
import org.jellyfin.androidtv.data.model.DataRefreshService;
import org.jellyfin.androidtv.data.model.FilterOptions;
import org.jellyfin.androidtv.data.querying.AdditionalPartsQuery;
import org.jellyfin.androidtv.data.querying.SpecialsQuery;
import org.jellyfin.androidtv.data.querying.StdItemQuery;
import org.jellyfin.androidtv.data.querying.TrailersQuery;
Expand Down Expand Up @@ -79,6 +80,7 @@ public class ItemRowAdapter extends ArrayObjectAdapter {
private PersonsQuery mPersonsQuery;
private SearchQuery mSearchQuery;
private SpecialsQuery mSpecialsQuery;
private AdditionalPartsQuery mAdditionalPartsQuery;
private TrailersQuery mTrailersQuery;
private LiveTvChannelQuery mTvChannelQuery;
private RecommendedProgramQuery mTvProgramQuery;
Expand Down Expand Up @@ -279,6 +281,14 @@ public ItemRowAdapter(Context context, SpecialsQuery query, Presenter presenter,
queryType = QueryType.Specials;
}

public ItemRowAdapter(Context context, AdditionalPartsQuery query, Presenter presenter, ArrayObjectAdapter parent) {

Check notice

Code scanning / Android Lint

Unknown nullness

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

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

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

Unknown nullability; explicitly declare as @Nullable or @NonNull to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations
super(presenter);
this.context = context;
mParent = parent;
mAdditionalPartsQuery = query;
queryType = QueryType.AdditionalParts;
}

public ItemRowAdapter(Context context, TrailersQuery query, Presenter presenter, ArrayObjectAdapter parent) {
super(presenter);
this.context = context;
Expand Down Expand Up @@ -663,6 +673,9 @@ public void Retrieve() {
case Specials:
retrieve(mSpecialsQuery);
break;
case AdditionalParts:
retrieve(mAdditionalPartsQuery);
break;
case Trailers:
retrieve(mTrailersQuery);
break;
Expand Down Expand Up @@ -1316,6 +1329,41 @@ public void onError(Exception exception) {

}

private void retrieve(final AdditionalPartsQuery query) {
final ItemRowAdapter adapter = this;
apiClient.getValue().GetAdditionalParts(query.getItemId(), KoinJavaComponent.<UserRepository>get(UserRepository.class).getCurrentUser().getValue().getId().toString(), new Response<ItemsResult>() {
nielsvanvelzen marked this conversation as resolved.
Show resolved Hide resolved
@Override
public void onResponse(ItemsResult response) {
if (response.getItems() != null && response.getItems().length > 0) {
int i = 0;
if (adapter.size() > 0) {
adapter.clear();
}
for (BaseItemDto item : response.getItems()) {
adapter.add(new BaseRowItem(i++, item));
}
totalItems = response.getTotalRecordCount();
setItemsLoaded(itemsLoaded + i);
if (i == 0) {
removeRow();
}
} else {
// no results - don't show us
removeRow();
}

notifyRetrieveFinished();
}

@Override
public void onError(Exception exception) {
Timber.e(exception, "Error retrieving similar series items");
nielsvanvelzen marked this conversation as resolved.
Show resolved Hide resolved
removeRow();
notifyRetrieveFinished(exception);
}
});
}

private void retrieve(final TrailersQuery query) {
final ItemRowAdapter adapter = this;
apiClient.getValue().GetLocalTrailersAsync(KoinJavaComponent.<UserRepository>get(UserRepository.class).getCurrentUser().getValue().getId().toString(), query.getItemId(), new Response<BaseItemDto[]>() {
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
<string name="msg_recording_cancelled">Recording Cancelled</string>
<string name="msg_unable_to_cancel">Unable to cancel recording</string>
<string name="lbl_cast_crew">Cast/Crew</string>
<string name="lbl_additional_parts">Additional Parts</string>
<string name="lbl_chapters">Chapters</string>
<string name="lbl_specials">Specials</string>
<string name="lbl_trailers">Trailers</string>
Expand Down