diff --git a/components/MovieItem.xml b/components/MovieItem.xml
index 1dff2a69..23f432d5 100644
--- a/components/MovieItem.xml
+++ b/components/MovieItem.xml
@@ -3,15 +3,11 @@
+ font="font:SmallSystemFont"
+ />
@@ -22,7 +18,15 @@
sub Init()
m.title = m.top.findNode("title")
m.poster = m.top.findNode("moviePoster")
- m.title.text = "Loading..."
+
+ maxSize = m.top.getParent().itemSize
+
+ m.poster.width = int(maxSize[0]) - 4
+ m.poster.height = m.poster.width * 1.5
+
+ m.title.width = m.poster.width
+ m.title.height = int(maxSize[1]) - m.poster.height
+ m.title.translation = [0, m.poster.height]
end sub
function itemContentChanged() as void
diff --git a/components/MovieItemDetails.brs b/components/MovieItemDetails.brs
new file mode 100644
index 00000000..62d6a8a1
--- /dev/null
+++ b/components/MovieItemDetails.brs
@@ -0,0 +1,88 @@
+sub itemContentChanged()
+ itemData = m.top.itemJson
+
+ m.top.findNode("moviePoster").uri = ImageURL(itemData.id)
+
+ ' Handle all "As Is" fields
+ setFieldText("title", itemData.name)
+ setFieldText("releaseYear", itemData.productionYear)
+ setFieldText("officialRating", itemData.officialRating)
+ setFieldText("communityRating", str(itemData.communityRating))
+ setFieldText("overview", itemData.overview)
+
+ setFieldText("runtime", stri(getRuntime()) + " mins")
+ setFieldText("ends-at", "Ends at " + getEndTime())
+
+ if itemData.genres.count() > 0
+ setFieldText("genres", itemData.genres.join(", "))
+ end if
+ director = invalid
+ for each person in itemData.people
+ if person.type = "Director"
+ director = person.name
+ exit for
+ end if
+ end for
+ if director <> invalid
+ setFieldText("director", "Director: " + director)
+ end if
+ setFieldText("video_codec", "Video: " + itemData.mediaStreams[0].displayTitle)
+ setFieldText("audio_codec", "Audio: " + itemData.mediaStreams[1].displayTitle)
+ ' TODO - cmon now. these are buttons, not words
+ setFieldText("buttons", "Play, Delete, Watched, Favorite, ...")
+ if itemData.taglines.count() > 0
+ setFieldText("tagline", itemData.taglines[0])
+ end if
+end sub
+
+sub setFieldText(field as string, value)
+ node = m.top.findNode(field)
+ if node = invalid then return
+
+ node.text = value
+end sub
+
+function getRuntime() as Integer
+ itemData = m.top.itemJson
+
+ ' A tick is .1ms, so 1/10,000,000 for ticks to seconds,
+ ' then 1/60 for seconds to minutess... 1/600,000,000
+ return round(itemData.RunTimeTicks / 600000000.0)
+end function
+
+function getEndTime() as string
+ itemData = m.top.itemJson
+
+ date = CreateObject("roDateTime")
+ duration_s = int(itemData.RunTimeTicks / 10000000.0)
+ date.fromSeconds(date.asSeconds() + duration_s)
+ date.toLocalTime()
+ hours = date.getHours()
+ meridian = "AM"
+ if hours = 0
+ hours = 12
+ meridian = "AM"
+ else if hours = 12
+ hours = 12
+ meridian = "PM"
+ else if hours > 12
+ hours = hours - 12
+ meridian = "PM"
+ end if
+
+ return Substitute("{0}:{1} {2}", stri(hours), stri(date.getMinutes()), meridian)
+end function
+
+function round(f as Float) as Integer
+ ' BrightScript only has a "floor" round
+ ' This compares floor to floor + 1 to find which is closer
+ m = int(f)
+ n = m + 1
+ x = abs(f - m)
+ y = abs(f - n)
+ if y > x
+ return m
+ else
+ return n
+ end if
+end function
diff --git a/components/MovieItemDetails.xml b/components/MovieItemDetails.xml
index 78a67ca4..ffdad905 100644
--- a/components/MovieItemDetails.xml
+++ b/components/MovieItemDetails.xml
@@ -1,7 +1,7 @@
-
+
@@ -30,79 +30,15 @@
+
diff --git a/components/MovieList.xml b/components/MovieList.xml
index 5bd7dc80..b99a37c2 100644
--- a/components/MovieList.xml
+++ b/components/MovieList.xml
@@ -13,15 +13,29 @@
m.top.content = getData()
m.top.numrows = 1
- m.top.rowSize = 4
+ m.top.rowSize = 5
+
+ dimensions = m.top.getScene().currentDesignResolution
+
+ border = 75
+ m.top.translation = [border, border]
+
+ textHeight = 50
+ ' Do we decide width by rowSize, or rowSize by width...
+ itemWidth = (dimensions["width"] - border*2) / m.top.rowSize
+ itemHeight = itemWidth * 1.5 + textHeight
m.top.visible = true
- m.top.itemSize = [200 * 4 + 20 * 3, 400]
- m.top.rowHeights = [400]
- m.top.rowItemSize = [ [200, 400] ]
- m.top.itemSpacing = [ 0, 50 ]
- m.top.rowItemSpacing = [ [20, 0] ]
- m.top.rowLabelOffset = [ [0, 30] ]
+
+ ' size of the whole row
+ m.top.itemSize = [dimensions["width"] - border*2, itemHeight]
+ ' spacing between rows
+ m.top.itemSpacing = [ 0, 10 ]
+
+ ' size of the item in the row
+ m.top.rowItemSize = [ itemWidth, itemHeight ]
+ ' spacing between items in a row
+ m.top.rowItemSpacing = [ 0, 0 ]
m.top.rowFocusAnimationStyle = "floatingFocus"
'm.top.vertFocusAnimationStyle = "floatingFocus"
diff --git a/components/Movies.xml b/components/Movies.xml
index 57a66b72..54fb0969 100644
--- a/components/Movies.xml
+++ b/components/Movies.xml
@@ -4,7 +4,6 @@
diff --git a/manifest b/manifest
index dbc82f5d..ab7c6d2f 100644
--- a/manifest
+++ b/manifest
@@ -17,5 +17,7 @@ splash_screen_sd=pkg:/images/splash-screen_sd.jpg
splash_min_time=1500
+ui_resolutions=hd,fhd
+
screensaver_private=0
screensaver_title=Jellyfin