diff --git a/components/ItemGrid/GridItem.bs b/components/ItemGrid/GridItem.bs
index 400a77e3f..4df67550a 100644
--- a/components/ItemGrid/GridItem.bs
+++ b/components/ItemGrid/GridItem.bs
@@ -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
diff --git a/components/ItemGrid/ItemGrid.bs b/components/ItemGrid/ItemGrid.bs
index 654b232a6..6a5e768a2 100644
--- a/components/ItemGrid/ItemGrid.bs
+++ b/components/ItemGrid/ItemGrid.bs
@@ -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"
@@ -402,7 +410,6 @@ sub SetUpOptions()
setPhotoAlbumOptions(options)
else if getCollectionType() = "music"
setMusicOptions(options)
-
else
setDefaultOptions(options)
end if
@@ -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)
@@ -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)
diff --git a/components/ItemGrid/LoadItemsTask2.bs b/components/ItemGrid/LoadItemsTask2.bs
index 2a7292d90..2290103d1 100644
--- a/components/ItemGrid/LoadItemsTask2.bs
+++ b/components/ItemGrid/LoadItemsTask2.bs
@@ -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
@@ -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"
@@ -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
diff --git a/components/data/HomeData.bs b/components/data/HomeData.bs
index 196274507..01b00be21 100644
--- a/components/data/HomeData.bs
+++ b/components/data/HomeData.bs
@@ -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
diff --git a/components/home/LoadItemsTask.bs b/components/home/LoadItemsTask.bs
index 1c3049e9e..f947d1250 100644
--- a/components/home/LoadItemsTask.bs
+++ b/components/home/LoadItemsTask.bs
@@ -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)
@@ -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"
diff --git a/locale/en_US/translations.ts b/locale/en_US/translations.ts
index 81c122358..fe5666d25 100644
--- a/locale/en_US/translations.ts
+++ b/locale/en_US/translations.ts
@@ -1271,6 +1271,11 @@
Ratings for how good a movie isUser Setting - Setting description
+
+
+ View All Next Up
+ Title for viewing all episodes available in the Next Up section
+ Rewatching Next Up
diff --git a/source/Main.bs b/source/Main.bs
index 814d1dff7..14e25f93b 100644
--- a/source/Main.bs
+++ b/source/Main.bs
@@ -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