Skip to content

Commit c74410a

Browse files
committed
Queue home videos from the same folder
1 parent 2736431 commit c74410a

2 files changed

Lines changed: 53 additions & 2 deletions

File tree

app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/ItemLauncher.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,11 +156,15 @@ public void launch(final BaseRowItem rowItem, MutableObjectAdapter<Object> adapt
156156
break;
157157
case Play:
158158
//Just play it directly
159-
playbackHelper.getValue().getItemsToPlay(context, baseItem, baseItem.getType() == BaseItemKind.MOVIE, false, new Response<List<BaseItemDto>>() {
159+
final BaseItemDto itemToPlay = baseItem;
160+
playbackHelper.getValue().getItemsToPlay(context, itemToPlay, itemToPlay.getType() == BaseItemKind.MOVIE, false, new Response<List<BaseItemDto>>() {
160161
@Override
161162
public void onResponse(List<BaseItemDto> response) {
162163
if (!isActive()) return;
163-
playbackLauncher.getValue().launch(context, response);
164+
int itemPosition = itemToPlay.getType() == BaseItemKind.VIDEO
165+
? findItemPosition(response, itemToPlay)
166+
: 0;
167+
playbackLauncher.getValue().launch(context, response, null, false, itemPosition);
164168
}
165169
});
166170
break;
@@ -274,4 +278,14 @@ public void onResponse(BaseItemDto response) {
274278
break;
275279
}
276280
}
281+
282+
private int findItemPosition(List<BaseItemDto> items, BaseItemDto selectedItem) {
283+
for (int index = 0; index < items.size(); index++) {
284+
if (items.get(index).getId().equals(selectedItem.getId())) {
285+
return index;
286+
}
287+
}
288+
289+
return 0;
290+
}
277291
}

app/src/main/java/org/jellyfin/androidtv/util/sdk/SdkPlaybackHelper.kt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,20 @@ class SdkPlaybackHelper(
230230
}
231231
}
232232

233+
BaseItemKind.VIDEO -> {
234+
val parentId = mainItem.parentId
235+
if (parentId == null) {
236+
getParts(mainItem)
237+
} else {
238+
val siblingVideos = getVideosInFolder(parentId)
239+
if (siblingVideos.any { it.id == mainItem.id } && siblingVideos.size > 1) {
240+
siblingVideos
241+
} else {
242+
getParts(mainItem)
243+
}
244+
}
245+
}
246+
233247
else -> {
234248
val parts = getParts(mainItem)
235249
val addIntros = allowIntros && userPreferences[UserPreferences.cinemaModeEnabled]
@@ -248,6 +262,29 @@ class SdkPlaybackHelper(
248262
}
249263
}
250264

265+
private suspend fun getVideosInFolder(parentId: UUID): List<BaseItemDto> {
266+
val videos = mutableListOf<BaseItemDto>()
267+
var totalRecordCount: Int
268+
269+
do {
270+
val response by api.itemsApi.getItems(
271+
parentId = parentId,
272+
isMissing = false,
273+
includeItemTypes = listOf(BaseItemKind.VIDEO),
274+
sortBy = listOf(ItemSortBy.SORT_NAME),
275+
startIndex = videos.size,
276+
limit = ITEM_QUERY_LIMIT,
277+
fields = ItemRepository.itemFields,
278+
)
279+
280+
totalRecordCount = response.totalRecordCount
281+
if (response.items.isEmpty()) break
282+
videos += response.items
283+
} while (videos.size < totalRecordCount)
284+
285+
return videos
286+
}
287+
251288
private suspend fun getParts(item: BaseItemDto): List<BaseItemDto> = buildList {
252289
add(item)
253290

0 commit comments

Comments
 (0)