Skip to content

Commit

Permalink
Fix InfoLayoutHelper not using first video stream, update details whe…
Browse files Browse the repository at this point in the history
…n selecting version (#2812)

(cherry picked from commit 9657743)
  • Loading branch information
StubbyB authored and nielsvanvelzen committed Jun 3, 2023
1 parent 208dc4f commit d565617
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -156,8 +156,6 @@ public class FullDetailsFragment extends Fragment implements RecordingIndicatorV
private BaseItemDto mBaseItem;

private ArrayList<MediaSourceInfo> versions;
private int selectedVersionPopupIndex = 0;

private Lazy<ApiClient> apiClient = inject(ApiClient.class);
private Lazy<org.jellyfin.sdk.api.client.ApiClient> api = inject(org.jellyfin.sdk.api.client.ApiClient.class);
private Lazy<UserPreferences> userPreferences = inject(UserPreferences.class);
Expand Down Expand Up @@ -1389,20 +1387,21 @@ private void addVersionsMenu(View v) {

for (int i = 0; i< versions.size(); i++) {
MenuItem item = menu.getMenu().add(Menu.NONE, i, Menu.NONE, versions.get(i).getName());
item.setChecked(i == selectedVersionPopupIndex);
item.setChecked(i == mDetailsOverviewRow.getSelectedMediaSourceIndex());
}

menu.getMenu().setGroupCheckable(0,true,false);
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
selectedVersionPopupIndex = menuItem.getItemId();
apiClient.getValue().GetItemAsync(versions.get(selectedVersionPopupIndex).getId(), KoinJavaComponent.<UserRepository>get(UserRepository.class).getCurrentUser().getValue().getId().toString(), new LifecycleAwareResponse<BaseItemDto>(getLifecycle()) {
mDetailsOverviewRow.setSelectedMediaSourceIndex(menuItem.getItemId());
apiClient.getValue().GetItemAsync(versions.get(mDetailsOverviewRow.getSelectedMediaSourceIndex()).getId(), KoinJavaComponent.<UserRepository>get(UserRepository.class).getCurrentUser().getValue().getId().toString(), new LifecycleAwareResponse<BaseItemDto>(getLifecycle()) {
@Override
public void onResponse(BaseItemDto response) {
if (!getActive()) return;

mBaseItem = response;
mDorPresenter.getViewHolder().setItem(mDetailsOverviewRow);
}
});
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class MyDetailsOverviewRow @JvmOverloads constructor(
var infoItem1: InfoItem? = null,
var infoItem2: InfoItem? = null,
var infoItem3: InfoItem? = null,
var selectedMediaSourceIndex: Int = 0,
) : Row() {
private val _actions = mutableListOf<TextUnderButton>()
val actions get() = _actions.toList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class MyDetailsOverviewRowPresenter(
fun setItem(row: MyDetailsOverviewRow) {
setTitle(row.item.name)

InfoLayoutHelper.addInfoRow(view.context, row.item, binding.fdMainInfoRow, false, false)
InfoLayoutHelper.addInfoRow(view.context, row.item, row.selectedMediaSourceIndex, binding.fdMainInfoRow, false, false)
binding.fdGenreRow.text = row.item.genres?.joinToString(" / ")

binding.infoTitle1.text = row.infoItem1?.label
Expand Down
26 changes: 16 additions & 10 deletions app/src/main/java/org/jellyfin/androidtv/util/InfoLayoutHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,20 @@ public static void addInfoRow(Context context, BaseRowItem item, LinearLayout la
}
}

public static void addInfoRow(Context context, BaseItemDto item, LinearLayout layout, boolean includeRuntime, boolean includeEndTime) {
public static void addInfoRow(Context context, BaseItemDto item, int mediaSourceIndex, LinearLayout layout, boolean includeRuntime, boolean includeEndTime) {
layout.removeAllViews();
if (item.getId() != null) {
addInfoRow(context, item, layout, includeRuntime, includeEndTime, StreamHelper.getFirstAudioStream(item));
addInfoRow(context, item, mediaSourceIndex, layout, includeRuntime, includeEndTime, StreamHelper.getFirstAudioStream(item));
}else{
addProgramChannel(context, item, layout);
}
}

public static void addInfoRow(Context context, BaseItemDto item, LinearLayout layout, boolean includeRuntime, boolean includeEndTime, MediaStream audioStream) {
public static void addInfoRow(Context context, BaseItemDto item, LinearLayout layout, boolean includeRuntime, boolean includeEndTime) {
addInfoRow(context, item, 0, layout, includeRuntime, includeEndTime);
}

public static void addInfoRow(Context context, BaseItemDto item, int mediaSourceIndex, LinearLayout layout, boolean includeRuntime, boolean includeEndTime, MediaStream audioStream) {
RatingType ratingType = KoinJavaComponent.<UserPreferences>get(UserPreferences.class).get(UserPreferences.Companion.getDefaultRatingType());
if (ratingType != RatingType.RATING_HIDDEN) {
addCriticInfo(context, item, layout);
Expand Down Expand Up @@ -100,7 +104,7 @@ public static void addInfoRow(Context context, BaseItemDto item, LinearLayout la
}
if (includeRuntime) addRuntime(context, item, layout, includeEndTime);
addSeriesStatus(context, item, layout);
addRatingAndRes(context, item, layout);
addRatingAndRes(context, item, mediaSourceIndex, layout);
addMediaDetails(context, audioStream, layout);
}

Expand Down Expand Up @@ -325,14 +329,17 @@ private static void addDate(@NonNull Context context, BaseItemDto item, LinearLa

}

private static void addRatingAndRes(Context context, BaseItemDto item, LinearLayout layout) {
private static void addRatingAndRes(Context context, BaseItemDto item, int mediaSourceIndex, LinearLayout layout) {
if (item.getOfficialRating() != null && !item.getOfficialRating().equals("0")) {
addBlockText(context, layout, item.getOfficialRating());
addSpacer(context, layout, " ");
}
if (item.getMediaStreams() != null && item.getMediaStreams().size() > 0 && item.getMediaStreams().get(0).getWidth() != null && item.getMediaStreams().get(0).getHeight() != null) {
int width = item.getMediaStreams().get(0).getWidth();
int height = item.getMediaStreams().get(0).getHeight();

MediaStream videoStream = StreamHelper.getFirstVideoStream(item, mediaSourceIndex);

if (videoStream != null && videoStream.getWidth() != null && videoStream.getHeight() != null) {
int width = videoStream.getWidth();
int height = videoStream.getHeight();
if (width <= 960 && height <= 576) {
addBlockText(context, layout, context.getString(R.string.lbl_sd));
} else if (width <= 1280 && height <= 962) {
Expand All @@ -347,8 +354,7 @@ private static void addRatingAndRes(Context context, BaseItemDto item, LinearLay

addSpacer(context, layout, " ");

addVideoCodecDetails(context, layout, item.getMediaStreams().get(0));

addVideoCodecDetails(context, layout, videoStream);
}
if (Utils.isTrue(item.getHasSubtitles())) {
addBlockText(context, layout, "CC");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,33 @@ public static List<MediaStream> getAudioStreams(MediaSourceInfo mediaSource) {
return getStreams(mediaSource, MediaStreamType.AUDIO);
}

public static List<MediaStream> getVideoStreams(MediaSourceInfo mediaSource) {
return getStreams(mediaSource, MediaStreamType.VIDEO);
}

public static MediaStream getFirstAudioStream(BaseItemDto item) {
if (item.getMediaSources() == null || item.getMediaSources().size() < 1) return null;
List<MediaStream> streams = getAudioStreams(item.getMediaSources().get(0));
return getFirstAudioStream(item, 0);
}

public static MediaStream getFirstAudioStream(BaseItemDto item, int mediaSourceIndex) {
return getFirstStreamOfType(item, MediaStreamType.AUDIO, mediaSourceIndex);
}

public static MediaStream getFirstVideoStream(BaseItemDto item) {
return getFirstVideoStream(item, 0);
}

public static MediaStream getFirstVideoStream(BaseItemDto item, int mediaSourceIndex) {
return getFirstStreamOfType(item, MediaStreamType.VIDEO, mediaSourceIndex);
}

public static MediaStream getFirstStreamOfType(BaseItemDto item, MediaStreamType streamType) {
return getFirstStreamOfType(item, streamType, 0);
}

public static MediaStream getFirstStreamOfType(BaseItemDto item, MediaStreamType streamType, int mediaSourceIndex) {
if (item.getMediaSources() == null || mediaSourceIndex > item.getMediaSources().size() - 1) return null;
List<MediaStream> streams = getStreams(item.getMediaSources().get(mediaSourceIndex), streamType);
if (streams == null || streams.size() < 1) return null;
return streams.get(0);
}
Expand Down

0 comments on commit d565617

Please sign in to comment.