Skip to content

Commit

Permalink
Merge pull request #1846 from jellyfin/jf-1481-next-up-all
Browse files Browse the repository at this point in the history
Add View All for Next Up
  • Loading branch information
jimdogx authored Jul 29, 2024
2 parents 422c670 + 5a4b71c commit 38cf11b
Show file tree
Hide file tree
Showing 7 changed files with 84 additions and 10 deletions.
15 changes: 15 additions & 0 deletions components/ItemGrid/GridItem.bs
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,21 @@ sub itemContentChanged()
else
m.itemText.text = itemData.Title
end if
' Adjust to wide posters for "View All Next Up"
if m.topParent.overhangTitle = tr("View All Next Up")
m.posterMask.maskUri = ""

m.itemPoster.height = 300
m.itemPoster.width = 400
m.itemPoster.loadDisplayMode = "scaleToFit"

m.backdrop.height = 300
m.backdrop.width = 400
m.backdrop.loadDisplayMode = "scaleToFit"

m.itemText.translation = [0, m.itemPoster.height + 7]
m.itemText.maxWidth = 400
end if
else if itemData.type = "MusicArtist"
m.itemPoster.uri = itemData.PosterUrl
m.itemText.text = itemData.Title
Expand Down
13 changes: 10 additions & 3 deletions components/ItemGrid/ItemGrid.bs
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,14 @@ sub loadInitialItems()
' non recursive for collections (folders, boxsets, photo albums, etc)
m.loadItemsTask.recursive = false
end if

if getCollectionType() = "nextup"
m.loadItemsTask.itemType = "NextUp"
m.itemGrid.itemSize = "[400, 300]"
m.top.imageDisplayMode = "scaleToFit"
m.itemGrid.numColumns = 4
m.alpha.visible = false
end if
else if m.top.parentItem.json.type = "Studio"
m.loadItemsTask.itemId = m.top.parentItem.parentFolder
m.loadItemsTask.itemType = "Series,Movie"
Expand Down Expand Up @@ -402,7 +410,6 @@ sub SetUpOptions()
setPhotoAlbumOptions(options)
else if getCollectionType() = "music"
setMusicOptions(options)

else
setDefaultOptions(options)
end if
Expand Down Expand Up @@ -786,7 +793,7 @@ function onKeyEvent(key as string, press as boolean) as boolean
searchGrp.setFocus(false)
end if

if key = "options"
if key = "options" and getCollectionType() <> "nextup"
if m.options.visible = true
m.options.visible = false
m.top.removeChild(m.options)
Expand Down Expand Up @@ -836,7 +843,7 @@ function onKeyEvent(key as string, press as boolean) as boolean
m.top.quickPlayNode = itemToPlay
return true
end if
else if key = "left" and topGrp.isinFocusChain()
else if key = "left" and topGrp.isinFocusChain() and m.alpha.visible
m.top.alphaActive = true
topGrp.setFocus(false)
m.alphaMenu.setFocus(true)
Expand Down
11 changes: 10 additions & 1 deletion components/ItemGrid/LoadItemsTask2.bs
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,11 @@ sub loadItems()
url = Substitute("Users/{0}/Items/", m.global.session.user.id)
params.append({ ImageTypeLimit: 1 })
params.append({ EnableImageTypes: "Primary,Backdrop,Banner,Thumb" })
else if LCase(m.top.ItemType) = "nextup"
url = "Shows/NextUp"
params.limit = 100 ' If you have more than 100 in your Next Up queue, maybe go outside a bit more.
params.append({ ImageTypeLimit: 1 })
params.append({ EnableImageTypes: "Primary,Backdrop,Banner,Thumb" })
else
url = Substitute("Users/{0}/Items/", m.global.session.user.id)
end if
Expand Down Expand Up @@ -194,6 +199,10 @@ sub loadItems()
tmp.image = PosterImage(item.id, { "maxHeight": 425, "maxWidth": 290, "quality": "90" })
else if item.type = "Episode"
tmp = CreateObject("roSGNode", "TVEpisode")
if LCase(m.top.ItemType) = "nextup"
tmp.title = item.name
tmp.type = "Episode"
end if
else if LCase(item.Type) = "recording"
tmp = CreateObject("roSGNode", "RecordingData")
else if item.Type = "Genre"
Expand Down Expand Up @@ -281,7 +290,7 @@ sub loadItems()
end if

if tmp <> invalid
if item.Type <> "Genre" and item.Type <> "MusicGenre"
if LCase(item.Type) <> "genre" and LCase(item.Type) <> "musicgenre"
tmp.parentFolder = m.top.itemId
tmp.json = item
if item.UserData <> invalid and item.UserData.isFavorite <> invalid
Expand Down
14 changes: 8 additions & 6 deletions components/data/HomeData.bs
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,17 @@ sub setData()

' Set appropriate Images for Wide and Tall based on type

if datum.type = "CollectionFolder" or datum.type = "UserView"
params = { "Tag": datum.ImageTags.Primary, "maxHeight": 261, "maxWidth": 464 }
m.top.thumbnailURL = ImageURL(datum.id, "Primary", params)
m.top.widePosterUrl = m.top.thumbnailURL
if LCase(datum.type) = "collectionfolder" or LCase(datum.type) = "userview"
if IsValid(datum.ImageTags)
params = { "Tag": datum.ImageTags.Primary, "maxHeight": 261, "maxWidth": 464 }
m.top.thumbnailURL = ImageURL(datum.id, "Primary", params)
m.top.widePosterUrl = m.top.thumbnailURL
end if

' Add Icon URLs for display if there is no Poster
if datum.CollectionType = "livetv"
if LCase(m.top.CollectionType) = "livetv"
m.top.iconUrl = "pkg:/images/media_type_icons/live_tv_white.png"
else if datum.CollectionType = "folders"
else if LCase(m.top.CollectionType) = "folders" or LCase(m.top.CollectionType) = "nextup"
m.top.iconUrl = "pkg:/images/media_type_icons/folder_white.png"
end if

Expand Down
33 changes: 33 additions & 0 deletions components/home/LoadItemsTask.bs
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ sub loadItems()
end if
end if

addViewAll = true ' Assume there will be a "View All" to start
checkViewAll = false ' Only need to check if we don't have anything in the Next Up home row

resp = APIRequest(url, params)
data = getJson(resp)
if isValid(data) and isValid(data.Items)
Expand All @@ -93,6 +96,36 @@ sub loadItems()
tmp.json = item
results.push(tmp)
end for
if data.Items.Count() = 0
checkViewAll = true
end if
else
checkViewAll = true
end if

' Add "View All"
if checkViewAll
' Nothing to show in Next Up, but are there hidden items (e.g. > 365 days old)?
params.Delete("NextUpDateCutoff")
params["limit"] = 1 ' if there is even one, then we know we need to show "View All"
resp = APIRequest(url, params)
data = getJson(resp)
if not isValid(data) or isValid(data) and isValid(data.Items) and data.Items.Count() = 0
addViewAll = false
end if
end if

if addViewAll
tmp = CreateObject("roSGNode", "HomeData")
tmp.type = "CollectionFolder"
tmp.usePoster = false
tmp.json = {
IsFolder: true,
Name: tr("View All Next Up"),
Type: "CollectionFolder",
CollectionType: "nextup"
}
results.push(tmp)
end if
' Load Continue Watching
else if m.top.itemsToLoad = "continue"
Expand Down
5 changes: 5 additions & 0 deletions locale/en_US/translations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1271,6 +1271,11 @@
<translation>Ratings for how good a movie is</translation>
<extracomment>User Setting - Setting description</extracomment>
</message>
<message>
<source>View All Next Up</source>
<translation>View All Next Up</translation>
<extracomment>Title for viewing all episodes available in the Next Up section</extracomment>
</message>
<message>
<source>Rewatching Next Up</source>
<translation>Rewatching Next Up</translation>
Expand Down
3 changes: 3 additions & 0 deletions source/Main.bs
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,9 @@ sub Main (args as dynamic) as void
group = CreateMovieLibraryView(selectedItem)
else if selectedItem.collectionType = "music"
group = CreateMusicLibraryView(selectedItem)
else if selectedItem.collectionType = "nextup"
group = CreateItemGrid(selectedItem)
group.optionsAvailable = false
else
group = CreateItemGrid(selectedItem)
end if
Expand Down

0 comments on commit 38cf11b

Please sign in to comment.